YQL не надежно возвращает правильные данные - есть ли замены? - PullRequest
2 голосов
/ 11 февраля 2012

Я пишу приложение, которое выбирает компании на основе рыночной капитализации и дивидендной доходности. Он использует Yahoo! YQL REST API для получения этих данных. Казалось, вчера это работало хорошо, но сегодня я увидел, что в моей программе говорится, что доходность одной из компаний составила 65,95%! Нет проблем - ошибка в моем коде. Так я и думал. Но когда я просматриваю содержимое xml из ссылки yql для акции:

http://query.yahooapis.com/v1/public/yql?q=select * из yahoo.finance.quotes, где символ в ("MRO") & env = store: //datatables.org/alltableswithkeys

Я вижу XML-код, который вставляю внизу поста. (Я вставляю это полностью здесь, потому что, когда кто-то просматривает это после этих выходных, оно будет другим.)

Прокрутите вниз до дна, и вы увидите, что на самом деле он говорит, что доходность обыкновенных акций Marathon Oil Corporation (MRO) составляет 65,95%. Вы увидите это в содержимом тега DividendYield.

Когда я смотрю на финансовый сайт Yahoo! Здесь: http://finance.yahoo.com/q?s=mro

Показывает гораздо более разумную доходность:

Div & Yield:    0.68 (2.10%)

Итак, я неправильно читаю эти данные (надеюсь на это)? Почему несоответствие между тем, что я вижу на их общедоступном сайте, и тем, что я получаю из запроса? Разве они не используют одну и ту же базу данных?

Если содержание ненадежное, укажите мне другой инструмент. Мое приложение в Python.

Если это полезно, вот небольшой фрагмент кода:

#!/usr/bin/env python 

import yql
y = yql.Public()
q = 'use "http://www.datatables.org/yahoo/finance/yahoo.finance.quotes.xml" as yahoo.finance.quotes; select * from yahoo.finance.quotes where symbol in ("MRO")'
result = y.execute(q)
print result.rows[0]['DividendYield']

Вывод:

65.95

Спасибо!


Редактировать 11 февраля 2012 г .:

На следующий день после публикации я нашел это на Yahoo! Сеть разработчиков:

http://developer.yahoo.com/forum/YQL/yahoo-finance-quotes-data-very-inaccurate/1313170622678-7121b5e0-317d-4a87-bd58-7a27cb8a62ce

Многие люди там комментируют получение ошибочных данных в различных областях.

У Google есть API для сбора данных. Вот пример использования этого для той же компании, о которой запрос yql ниже (MRO):

http://www.google.com/ig/api?stock=MRO

Может быть, это поможет кому-то еще, но, похоже, оно не содержит информации о дивидендах, что очень важно для моих нужд.

Кто-то еще написал приложение, которое программным путем собирает данные о запасах с использованием источника, который им нравится? Если так, пожалуйста, поделитесь - я готов перейти к чему-то еще. Кстати: мне не нужны данные в реальном времени. Обычно я запускаю свое приложение нечасто после прихода домой с работы, после закрытия рынков.

Спасибо.


<query yahoo:count="1" yahoo:created="2012-02-11T06:30:09Z" yahoo:lang="en-US"><results><quote symbol="MRO"><Ask/>
<AverageDailyVolume>7003410</AverageDailyVolume>
<Bid/>
<AskRealtime>36.00</AskRealtime>
<BidRealtime>32.73</BidRealtime>
<BookValue>23.79</BookValue>
<Change_PercentChange>+0.55 - +1.69%</Change_PercentChange><Change>+0.55</Change>
<Commission/>
<ChangeRealtime>+0.55</ChangeRealtime>
<AfterHoursChangeRealtime>N/A - N/A</AfterHoursChangeRealtime>
<DividendShare>21.50</DividendShare>
<LastTradeDate>2/10/2012</LastTradeDate>
<TradeDate/>
<EarningsShare>4.125</EarningsShare>
<ErrorIndicationreturnedforsymbolchangedinvalid/>
<EPSEstimateCurrentYear>3.66</EPSEstimateCurrentYear>
<EPSEstimateNextYear>4.38</EPSEstimateNextYear>
<EPSEstimateNextQuarter>0.89</EPSEstimateNextQuarter>
<DaysLow>32.04</DaysLow>
<DaysHigh>33.16</DaysHigh>
<YearLow>19.13</YearLow>
<YearHigh>54.33</YearHigh>
<HoldingsGainPercent>- - -</HoldingsGainPercent>
<AnnualizedGain/>
<HoldingsGain/>
<HoldingsGainPercentRealtime>N/A - N/A</HoldingsGainPercentRealtime>
<HoldingsGainRealtime/>
<MoreInfo>cnsprmiIed</MoreInfo>
<OrderBookRealtime/>
<MarketCapitalization>23.328B</MarketCapitalization>
<MarketCapRealtime/>
<EBITDA>6.846B</EBITDA>
<ChangeFromYearLow>+14.02</ChangeFromYearLow>
<PercentChangeFromYearLow>+73.29%</PercentChangeFromYearLow>
<LastTradeRealtimeWithTime>N/A - <b>33.15</b>
</LastTradeRealtimeWithTime>
<ChangePercentRealtime>N/A - +1.69%</ChangePercentRealtime>
<ChangeFromYearHigh>-21.18</ChangeFromYearHigh>
<PercebtChangeFromYearHigh>-38.98%</PercebtChangeFromYearHigh>
<LastTradeWithTime>Feb 10 - <b>33.15</b>
</LastTradeWithTime>
<LastTradePriceOnly>33.15</LastTradePriceOnly>
<HighLimit/>
<LowLimit/>
<DaysRange>32.04 - 33.16</DaysRange>
<DaysRangeRealtime>N/A - N/A</DaysRangeRealtime>
<FiftydayMovingAverage>31.2758</FiftydayMovingAverage>
<TwoHundreddayMovingAverage>27.2837</TwoHundreddayMovingAverage>
<ChangeFromTwoHundreddayMovingAverage>+5.8663</ChangeFromTwoHundreddayMovingAverage>
<PercentChangeFromTwoHundreddayMovingAverage>+21.50%</PercentChangeFromTwoHundreddayMovingAverage>
<ChangeFromFiftydayMovingAverage>+1.8742</ChangeFromFiftydayMovingAverage>
<PercentChangeFromFiftydayMovingAverage>+5.99%</PercentChangeFromFiftydayMovingAverage>
<Name>Marathon Oil Corp</Name>
<Notes/>
<Open>32.26</Open>
<PreviousClose>32.60</PreviousClose>
<PricePaid/>
<ChangeinPercent>+1.69%</ChangeinPercent>
<PriceSales>1.56</PriceSales>
<PriceBook>1.37</PriceBook>
<ExDividendDate>Nov 14</ExDividendDate>
<PERatio>7.90</PERatio>
<DividendPayDate>Mar 12</DividendPayDate>
<PERatioRealtime/>
<PEGRatio>0.99</PEGRatio>
<PriceEPSEstimateCurrentYear>8.91</PriceEPSEstimateCurrentYear>
<PriceEPSEstimateNextYear>7.44</PriceEPSEstimateNextYear>
<Symbol>MRO</Symbol>
<SharesOwned/>
<ShortRatio>2.60</ShortRatio>
<LastTradeTime>4:02pm</LastTradeTime>
<TickerTrend>&nbsp;++-+-=&nbsp;</TickerTrend>
<OneyrTargetPrice>37.19</OneyrTargetPrice>
<Volume>9239122</Volume>
<HoldingsValue/>
<HoldingsValueRealtime/>
<YearRange>19.13 - 54.33</YearRange>
<DaysValueChange>- - +1.69%</DaysValueChange>
<DaysValueChangeRealtime>N/A - N/A</DaysValueChangeRealtime>
<StockExchange>NYSE</StockExchange>
<DividendYield>65.95</DividendYield>
<PercentChange>+1.69%</PercentChange>
</quote>
</results>
</query>
<!-- total: 270 -->
<!-- engine5.yql.ac4.yahoo.com -->

1 Ответ

7 голосов
/ 11 февраля 2012

Не сам по себе ответ, но чтобы пролить немного света на то, что вы видите:

У Yahoo нет официального API для Yahoo Finance.Вместо этого эти таблицы сообщества YQL читают из CSV-файлов, которые люди перепроектировали с веб-сайта Yahoo Finance.Время от времени они меняются, поэтому это не надежный источник данных.Я бы не стал создавать «настоящие» приложения, использующие их, потому что это также может быть проблемой с условиями обслуживания.

Вы можете увидеть, что происходит, если попробуете свой пример запроса в консоли YQL ,В выводе посмотрите на раздел <diagnostics> и увидите, что он извлекается из http://download.finance.yahoo.com/d/quotes.csv.Я думаю, что сайт Yahoo Finance сейчас использует совершенно другой внутренний источник, так что, вероятно, почему вы не видите подходящих цифр.

...