Question

Je dois télécharger automatiquement le journal actuel Wall Street Prime Rate et charger les données dans ma base de données. Quelle est la meilleure méthode pour le téléchargement de ces données automatiquement?

Je suis venu avec trois solutions possibles pour faire ceci:

  1. Gratter une page Web HTML à partir WSJ.
  2. Parse Un flux de nouvelles RSS WSJ.
  3. Utiliser une API que je ne l'ai pas trouvé de WSJ.

En ce qui concerne la solution 1, bien que je ne suis pas comme solution 1 car elle pourrait facilement se briser, il est le seul que je travaille à partir de bout en bout. Il semble que je peux éraflure cette page avec un WebRequest / WebResponse et lire le texte dans ce code:

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

En ce qui concerne la solution 2, bien que je puisse mettre en œuvre une solution de lecteur RSS, je ne vois pas une manière d'anticiper de manière fiable verbiage des changements dans le taux préférentiel. Par conséquent, je ne pense pas que ce soit comme un moyen d'un coffre-fort ou fiable pour obtenir les données sous forme de solution 1.

En ce qui concerne la solution 3, je n'ai pas trouvé de l'API de la publiées pour vérifier les taux d'argent comme le taux préférentiel. Si quelqu'un connaît un service Web ou d'autres API pour vérifier les taux d'argent, alors s'il vous plaît laissez-moi savoir.

Était-ce utile?

La solution

Je mis en œuvre le code suivant pour gratter le code HTML et traiter les résultats:

package SSIS C # Script Tâche

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

procédure stockée Appelé par une tâche d'exécution 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))

Code laid, mais il sert l'objectif. Il y a aussi plusieurs règles de validation qui fonctionnent pour vérifier les données sont correctes, mais c'est au cœur de ce que je gratter la valeur.

Autres conseils

Il y a un webservice pour cela, mais il ne peut pas être vaut le coût si vous voulez simplement est le taux préférentiel:

http://www.armindexes.com/

Je suis sur 5 ans de retard, mais je pensais que la mettre. Quandl a une API agréable pour obtenir ces informations.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top