سؤال

أحتاج إلى تنزيل Prime Prime الحالي تلقائيًا وتحميل البيانات في قاعدة البيانات الخاصة بي. ما هي أفضل طريقة لتنزيل هذه البيانات تلقائيًا؟

لقد توصلت إلى ثلاثة حلول ممكنة للقيام بذلك:

  1. كشط صفحة ويب HTML من WSJ.
  2. تحليل تغذية الأخبار RSS من WSJ.
  3. استخدم بعض واجهة برمجة التطبيقات التي لم أجدها من WSJ.

فيما يتعلق بالحل 1 ، على الرغم من أنني لا أحب الحل 1 لأنه يمكن أن ينكسر بسهولة ، إلا أنه الوحيد الذي عملت من نهايته إلى النهاية. يبدو أنه يمكنني كشط هذه الصفحة مع webrequest / webresponse وقراءة النص في هذا الرمز:

<tr>
<td style="text-align:left" class="colhead">&nbsp;</td>
<td class="colhead">Latest</td>
<td class="colhead">Wk ago</td>
<td class="colhead">High</td>
<td class="colhead">Low</td>
</tr>
<tr>
<td class="text">U.S.</td>
<td style="font-weight:bold;" class="num">3.25</td>
<td class="num">3.25</td>
<td class="num">3.25</td>
<td class="num" style="border-right:0px">3.25</td>
</tr>

فيما يتعلق بالحل 2 ، على الرغم من أنه يمكنني تنفيذ حل قارئ RSS ، إلا أنني لا أرى طريقة لتوقع استعراض التغيرات في معدل الذروة بشكل موثوق. لذلك ، لا أعتقد أن هذه طريقة آمنة أو موثوقة للحصول على البيانات كحل 1.

فيما يتعلق بالحل 3 ، لم أجد أي واجهة برمجة تطبيقات منشورة للتحقق من أسعار الأموال مثل السعر الرئيسي. إذا كان أي شخص يعرف خدمة ويب أو واجهة برمجة تطبيقات أخرى للتحقق من أسعار المال ، فيرجى إخبارنا بذلك.

هل كانت مفيدة؟

المحلول

لقد قمت بتطبيق الكود التالي لكشط HTML ومعالجة النتائج:

SSIS Package C# Script Task

public void Main()
    {
        // Post the web page.
        try
        {
            // Set variables.
            bool fireAgain = true;
            Uri WebPageURI = new Uri("http://online.wsj.com/mdc/public/page/2_3020-moneyrate.html");

            // Post the web page.
            WebRequest request = WebRequest.Create(WebPageURI);
            request.Timeout = (1000 * 60 * 60);
            request.Method = "POST";
            WebResponse response = request.GetResponse();
            StreamReader reader = new StreamReader(response.GetResponseStream());
            string Output = reader.ReadToEnd();

            Dts.Variables["wall_street_journal_str"].Value = Output;
            Dts.Events.FireInformation(0, "WebRequest:", WebPageURI.ToString(), "", 0, ref fireAgain);
            Dts.Events.FireInformation(0, "WebResponse:", Output, "", 0, ref fireAgain);
        }
        catch (WebException ex)
        {
            Dts.Events.FireError(0, "Error:", ex.Message, "", 0);
        }


        // Return success.
        Dts.TaskResult = (int)ScriptResults.Success;
    }

الإجراء المخزن التي تسمى مهمة تنفيذ SQL

SET @WALL_STREET_JOURNAL_HTML = SUBSTRING(@WALL_STREET_JOURNAL_HTML, CHARINDEX('Prime rates', @WALL_STREET_JOURNAL_HTML, 1), CHARINDEX('Canada', @WALL_STREET_JOURNAL_HTML, CHARINDEX('Prime rates', @WALL_STREET_JOURNAL_HTML, 1)) - CHARINDEX('Prime rates', @WALL_STREET_JOURNAL_HTML, 1))
    SELECT @RATE_CHANGE_DATE = CONVERT(DATE, RTRIM(LTRIM(SUBSTRING(@WALL_STREET_JOURNAL_HTML, CHARINDEX('[', @WALL_STREET_JOURNAL_HTML, 1) + 23, CHARINDEX(']', @WALL_STREET_JOURNAL_HTML, 1) - CHARINDEX('[', @WALL_STREET_JOURNAL_HTML, 1) - 23))))
        , @RATE = CONVERT(NUMERIC(8, 2), SUBSTRING(@WALL_STREET_JOURNAL_HTML, CHARINDEX('class="num">', @WALL_STREET_JOURNAL_HTML, CHARINDEX('U.S.</td>', @WALL_STREET_JOURNAL_HTML, 1)) + 12, CHARINDEX('<', @WALL_STREET_JOURNAL_HTML, CHARINDEX('class="num">', @WALL_STREET_JOURNAL_HTML, CHARINDEX('U.S.</td>', @WALL_STREET_JOURNAL_HTML, 1))) - CHARINDEX('class="num">', @WALL_STREET_JOURNAL_HTML, CHARINDEX('U.S.</td>', @WALL_STREET_JOURNAL_HTML, 1)) -12))

رمز قبيح ، لكنه يخدم الغرض. هناك أيضًا العديد من قواعد التحقق من الصحة التي يتم تشغيلها للتحقق من أن البيانات صحيحة ، ولكن هذا هو جوهر ما اعتدت عليه كشط القيمة.

نصائح أخرى

هناك خدمة ويب لهذا الغرض ، ولكن قد لا يكون الأمر يستحق التكلفة إذا كان كل ما تريده هو السعر الرئيسي:

http://www.armindexes.com/

تأخرت حوالي 5 سنوات ، لكنني اعتقدت أنني سأطرحها.Quandl لديه واجهة برمجة تطبيقات لطيفة للحصول على هذه المعلومات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top