Scarica attuale WSJ.com Prime Rate
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:
- Raschiare una pagina web HTML dal WSJ.
- Parse un feed RSS notizie da WSJ.
- 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"> </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.
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:
Sono circa 5 anni di ritardo, ma ho pensato di tirarlo su. quandl ha un bel API per ottenere queste informazioni.