2010-04-21 4 views
1

Мне нужно автоматически загрузить текущую версию Wall Street Journal Prime Rate и загрузить данные в мою базу данных. Каков наилучший метод для автоматической загрузки этих данных?Загрузить Current WSJ.com Prime Rate

Я придумал три возможных решения для этого делать:

  1. Scrape веб-страницы HTML с WSJ.
  2. Разбор RSS-ленты новостей от WSJ.
  3. Используйте API, который я не нашел в WSJ.

Что касается решения 1, хотя мне не нравится решение 1, так как он может легко сломаться, это единственный, который я разработал из конца в конец. Оказывается, я могу соскрести this page с 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 читатель, я не вижу способа надежно прогнозировать словоблудие для изменений в Prime Rate. Поэтому я не считаю это безопасным или надежным способом получить данные как решение 1.

Что касается решения 3, я не нашел опубликованных API для проверки денежных ставок, таких как Prime Rate. Если кто-нибудь знает веб-службу или другой API для проверки денежных ставок, пожалуйста, дайте мне знать.

+0

Что вы используете? Прямой HTML плюс некоторые Ajax? ASP.NET? PHP? – slugster

+0

Я запускаю задачу сценария C# в пакете SSIS, чтобы очистить целевую HTML-страницу один раз в день. Это работает, но должно быть лучшее решение, чем это, потому что я в зависимости от того, что WSJ.com не изменит их таблицу или макет страницы. –

ответ

2

Я осуществил следующий код, чтобы очистить HTML и обработать результаты:

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

хранимых процедур Вызывается Execute SQL Task

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

Уродливый код, но он служит цели. Существует также несколько правил проверки правильности данных, которые проверяют данные, но это ядро ​​того, что я использовал для очистки значения.

2

Существует веб-сервиса для этого, но это может быть не стоит затрат, если все, что вы хотите, это основная ставка:

http://www.armindexes.com/

+0

Спасибо за отзыв. Я проверил веб-сайт, и некоторые ссылки на дополнительную информацию об их веб-службах, похоже, не работают прямо сейчас. Я буду придерживаться решения для очистки экрана, поскольку он оказался надежным (до сих пор) и бесплатным. : P –

2

Я около 5 лет поздно, но думал, что я поднимите его. Quandl имеет хороший API для получения этой информации.

+0

Это именно то решение, которое я бы использовал 6 лет назад. Благодаря! –

+0

Если кто-то ищет решение для этого или аналогичные проблемы сегодня, +1 для Quandl, хороший API, и вы обычно можете найти стартовый код в различных проектах github. –