Domanda

Ho bisogno di scaricare automaticamente la corrente di Wall Street Journal Prime Rate e caricare i dati nel mio database. Qual è il metodo migliore per scaricare automaticamente questi dati?

Sono venuto su con tre possibili soluzioni per fare questo:

  1. Raschiare una pagina web HTML dal WSJ.
  2. Parse un feed RSS notizie da WSJ.
  3. Usa alcune API che non ho trovato da WSJ.

Per quanto riguarda la soluzione 1, anche se non mi piace la soluzione 1 dal momento che potrebbe facilmente rompere, è l'unico che ho lavorato fuori da un capo all'altro. Sembra che posso raschiare questa pagina con un WebRequest / WebResponse e leggere il testo in questo codice:

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

Per quanto riguarda la soluzione di 2, anche se posso implementare una soluzione di lettore RSS, non vedo un modo per anticipare i affidabile verbosità delle variazioni del Prime Rate. Pertanto, non credo che questo sia come modo sicuro o affidabile una per ottenere i dati come soluzione 1.

Per quanto riguarda la soluzione 3, non ho trovato alcuna API pubblicate per controllare i tassi di denaro come il Prime Rate. Se qualcuno sa di un servizio web o altro API per controllare i tassi di denaro, quindi per favore fatemelo sapere.

È stato utile?

Soluzione

I implementato il seguente codice per raschiare il codice HTML ed elaborare i risultati:

pacchetto SSIS 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 chiamata da un Esegui 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))

Codice Brutto, ma serve allo scopo. Ci sono anche diverse regole di convalida che vengono eseguiti per verificare i dati sono corretti, ma questo è il nucleo di quello che ho usato per raschiare il valore.

Altri suggerimenti

C'è un webservice per questo, ma non può valere il costo se invece si è il tasso primario:

http://www.armindexes.com/

Sono circa 5 anni di ritardo, ma ho pensato di tirarlo su. quandl ha un bel API per ottenere queste informazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top