2012-02-11 11 views
2

我正在編寫一個基於市值和股息收益率選擇公司的應用程序。它使用雅虎的YQL REST API來獲取這些數據。它似乎昨天運行良好,但今天我看到我的程序說其中一家公司的收益率爲65.95%!沒問題 - 我的代碼中存在一個錯誤。所以我認爲。但是,當我查看XML的內容從YQL網址爲股票:YQL是否不可靠地返回正確的數據 - 任何替換?

http://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.quotes where symbol in ("MRO")&env=store://datatables.org/alltableswithkeys

我看到我的帖子底部粘貼的XML。 (我把它全部粘貼在這裏,因爲在這個週末之後有人看到它會有所不同。)

向下滾動到底部,你會看到它實際上表示馬拉松石油公司(MRO)股票的收益率是65.95%。你會在DividendYield標籤的內容中看到它。

當我看到「雅虎金融網站在這裏! 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 

謝謝!


編輯2012年2月11日:

一天我的帖子後,我發現這對雅虎開發者網絡:

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

回答

7

不是答案本身,而是要闡明你看到的一些光:

雅虎沒有對雅虎財經的官方API。相反,這些YQL社區表格正在從人們從雅虎財經網站進行反向工程的CSV文件中讀取。這些會不時發生變化,所以它不是一個可靠的數據來源。我不會使用這些構建任何「真實」應用程序,因爲它可能也是一個服務條款問題。

如果您嘗試使用sample query in the YQL console,可以看到發生了什麼。在輸出看看<diagnostics>部分,並看到它從http://download.finance.yahoo.com/d/quotes.csv提取。我認爲雅虎財經網站現在使用的是完全不同的內部資源,所以'可能爲什麼你沒有看到正確的數字匹配。

+0

謝謝Brian。投票解釋這種差異。出於好奇,你有使用另一種工具嗎? – firebush 2012-02-11 17:57:32

相關問題