Frage

Ich brauche die aktuelle Wall Street Journal Prime Rate automatisch herunterzuladen und die Daten in der Datenbank zu laden. Was ist die beste Methode, um diese Daten automatisch zum Download?

Ich habe kommen mit drei möglichen Lösungen für dies zu tun:

  1. Scrape eine HTML-Webseite von WSJ.
  2. Parse ein RSS-Newsfeed von WSJ.
  3. Verwenden Sie einige API, dass ich nicht von WSJ gefunden zu haben.

Lösung In Bezug auf 1, obwohl ich nicht wie Lösung 1, da sie leicht brechen könnte, dann ist es das einzige, das ich von einem Ende zum anderen ausgearbeitet. Es scheint, ich kann schaben diese Seite mit ein WebRequest / WebResponse und den Text in diesem Code lesen:

<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>

Im Hinblick auf die Lösung 2, obwohl ich einen RSS-Reader-Lösung implementieren können, sehe ich keinen Weg, um zuverlässig Wortschwall für Veränderungen in der Prime Rate antizipieren. Deshalb habe ich glaube nicht, das als sicher oder zuverlässig ein Weg ist 1 die Daten als Lösung zu erhalten.

In Bezug auf Lösung 3, habe ich gefunden, keine API veröffentlichte zur Überprüfung Geldsätze wie die Prime Rate. Wenn jemand einen Web-Service oder anderer API kennt Geldsätze für die Überprüfung, dann lass es mich wissen.

War es hilfreich?

Lösung

I implementiert den folgenden Code den HTML zu kratzen und die Ergebnisse verarbeiten:

SSIS Paket 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;
    }

Stored Procedure Aufruf durch eine Task SQL ausführen

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))

hässliche Code, aber es dient dem Zweck. Es gibt auch mehrere Validierungsregeln, die die Daten korrekt sind, um zu überprüfen laufen, aber dies ist der Kern das, was ich verwenden, um den Wert zu kratzen.

Andere Tipps

Es ist ein Webservice für diese, aber es kann nicht wert sein, die Kosten, wenn alles, was Sie wollen, ist die Prime Rate:

http://www.armindexes.com/

Ich bin über 5 Jahre zu spät, aber ich dachte, es nach oben bringen würde. Quandl hat eine schöne API für diese Informationen zu erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top