2011-12-02 71 views
4

我有一個需要幫助的項目。我希望能夠訪問我製作的網站,例如abc123.com,並顯示道瓊斯指數。而已。只需在我的abc123.com網站上顯示一個數字,如12050。如何從雅虎財經等網站獲取數據?

很顯然,我必須從雅虎財經等地方獲取數據。我不想下載任何.csv文件或類似的東西。而且它不需要是實時數據,因爲我知道雅虎的數據延遲了15分鐘。只是想能夠訪問我自己的網站,看看道瓊斯指數是什麼。

在問這個問題之前,我的確研究過一些類似的問題,但是很多都沒有回答,或者引用了YQL(我正在研究並試圖在此刻理解)。

任何指導最簡單的方法來做到這一點將不勝感激!我是HTML開始的程序員,並且正在尋找最容易理解和實現的路線。

+0

我剛剛在這個鏈接中發現了一些有用的東西,可以幫助任何可能面臨與我一樣的問題的人:http://www.seangw.com/wordpress/index.php/2010/01/formatting-stock- data-from-yahoo-finance/ – phan

+0

如果這是你正在使用的路線,我可能會建議你將它作爲你的答案發布,解釋它如何解決你的問題,然後接受你的答案。:) –

+0

感謝這裏的每一個人,因爲這個主題上的想法幫助我找到了答案,並做到了我正在尋找的東西。特別感謝阿拉斯。 此鏈接解釋瞭如何在約10行代碼中執行此操作: http://www.seangw.com/wordpress/index.php/2010/01/formatting-stock-data-from-yahoo-finance/ 我所做的只是將他的代碼粘貼到我的網站的index.html中。在訪問我的網站時,我得到了我感興趣的數據。您可以修改$ stocklist以放入您想要的任何股票,並且您可以使用$ stockFormat中的標記修改您想要從Yahoo獲得哪種數據。再次感謝所以! – phan

回答

3

你不能。不是以編程方式,而是合法的。

報價延遲,除非另有說明。納斯達克,紐約證券交易所和美國證券交易所的延遲時間爲15分鐘。另請參閱其他交易所的延遲時間。雅虎通過獨立供應商提供的報價和其他信息。金融夥伴頁面。報價會自動更新,但會在25分鐘不活動後關閉。報價至少延遲15分鐘。所有信息按「原樣」提供,僅供參考,並非用於交易目的或建議。雅虎!任何獨立提供商均不對任何信息錯誤,不完整或延遲負責,也不對依賴此處所含信息所採取的任何行動負責。 通過訪問Yahoo!網站,您同意不重新發布其中的信息。

所有主要的市場數據提供者都有類似的合法東西。

但是,如果你打算這麼做,我可能會下載html並解析它,以便找到你正在尋找的報價。

如果你想合法地做到這一點,你將不得不花很多錢從交易所本身或傳遞信息的第三方實體獲取數據。在這種情況下,你將不得不使用他們提供的任何API。

來源:努力做你想這樣做:)

(EDIT)對於那些誰要說使用YQL什麼:

看看使用條款。

您不能:

出售,出租,共享,傳遞,或再許可YQL或派生從使用YQL的收入與雅虎結合API或其它Web服務,無論是直接的商業或獲取金錢或其他方式,沒有雅虎之前,表達,書面與產品或競爭的許可

使用YQL的產品或服務雅虎提供的服務

任何共享股票報價的網站將與finance.yahoo.com競爭,因此違反YPL的使用條款。此外,您無法從這些數據中獲得任何收益。祝運氣得到明確的書面同意。

在YQL上閱讀「The Dark Side」here:「誰擁有我的代碼?從技術上講,他們擁有一切。」

YQL在可擴展性,盈利能力,簡單性或合法性方面不是一個好的解決方案。如果你不關心任何這些東西,並且你的web應用程序不會流行或賺錢,並且你不介意寫一堆代碼來與雅虎合作。那麼YQL就是要走的路。

(編輯#2)

如果你只是想顯示自己的信息(不與他人分享),我覺得非常容易解析HTML和用C#在網站上顯示出來/ Visual Basic和ASP.NET而不是PHP。您可以在C#/ VB中創建一個http請求,它將(最終)返回一個html文件,您可以解析或搜索您的道瓊斯指數報價。在C#/ VB中作爲ASP Web應用程序的後端執行此操作。我相信你可以使用免費的Visual Studio 2010 Express來創建它們。

+0

Yahoo!財務部門擁有一個擁有自己許可證的API,因此這是一個相當令人誤解的答案。 – evan

+2

其實你可以[http://developer.yahoo.com/yql/](http://developer.yahoo.com/yql/) –

+0

這一行可能是真的,雖然:「我可能會下載的HTML和解析它是爲了找到你正在尋找的引用「這可能比爲有限的個人應用程序學習YQL更容易,只要提供Yahoo!的DOM即可。財務頁面可靠一致。 – joshuahedlund

0

感謝每個人的貢獻,因爲這個主題上產生的想法幫助我找到答案,並做到我正在尋找的東西。這傢伙介紹瞭如何在做它大約10行代碼:

http://www.seangw.com/wordpress/index.php/2010/01/formatting-stock-data-from-yahoo-finance/

所以基本上我所做的就是削減&貼他的代碼,並把它放在index.html的我的網站上。在訪問我的網站時,我會收到我感興趣的代碼的報價。您可以修改$ stocklist以放入您想要的任何股票,並且您可以使用$ stockFormat中的代碼修改Yahoo的回覆。再次感謝所以!

1

我不確定這樣做是否有法律限制。有很多商業(付費)應用程序從雅虎金融中提取數據,並且多年來一直運行良好。我想說的是,這裏的訣竅是這些應用程序安裝在用戶的設備(iOS/Android/Windows設備)中,因此他們從Yahoo Finance獲取數據以供用戶自己使用。

也許如果您通過Javascript從Yahoo Finance提取數據並且未將其存儲在您的服務器中,則同樣的情況也適用於您的項目。事實上,我真的會這麼想。這種情況唯一的區別是你的代碼不需要安裝在用戶的設備上,因爲它是一個網頁。

您是否試過聯繫YQL或雅虎財經的支持來討論您的項目的法定限制?

1

我寫過一個函數,可以從Yahoo!獲取股票數據。財務API;但是,我的代碼下載.csv文件。我希望這是有用的。

完整的源代碼和示例結果在my blog

<?php 

/* 
Description: Getting Stock Data from Yahoo! Finance 
Author URI: http://phpvancouver.ca/ 
*/ 

/* 
* More about Yahoo! Finance Tag 
* http://www.gummy-stuff.org/Yahoo-data.htm 
* http://www.canbike.ca/information-technology/2013/08/10/yahoo-finance-url-download-to-a-csv-file.html 
*/ 

$yahoo_finance_tags = array(
"a" => "Ask",  "a2" => "Average Daily Volume",  "a5" => "Ask Size", 
"b" => "Bid",  "b2" => "Ask (Real-time)",  "b3" => "Bid (Real-time)", 
"b4" => "Book Value",  "b6" => "Bid Size",  "c" => "Change & Percent Change", 
"c1" => "Change",  "c3" => "Commission",  "c6" => "Change (Real-time)", 
"c8" => "After Hours Change (Real-time)",  "d" => "Dividend/Share",  "d1" => "Last Trade Date", 
"d2" => "Trade Date",  "e" => "Earnings/Share",  "e1" => "Error Indication (returned for symbol changed/invalid)", 
"e7" => "EPS Estimate Current Year",  "e8" => "EPS Estimate Next Year",  "e9" => "EPS Estimate Next Quarter", 
"f6" => "Float Shares",  "g" => "Day's Low",  "h" => "Day's High", 
"j" => "52-week Low",  "k" => "52-week High",  "g1" => "Holdings Gain Percent", 
"g3" => "Annualized Gain",  "g4" => "Holdings Gain",  "g5" => "Holdings Gain Percent (Real-time)", 
"g6" => "Holdings Gain (Real-time)",  "i" => "More Info",  "i5" => "Order Book (Real-time)", 
"j1" => "Market Capitalization",  "j3" => "Market Cap (Real-time)",  "j4" => "EBITDA", 
"j5" => "Change From 52-week Low",  "j6" => "Percent Change From 52-week Low",  "k1" => "Last Trade (Real-time) With Time", 
"k2" => "Change Percent (Real-time)",  "k3" => "Last Trade Size",  "k4" => "Change From 52-week High", 
"k5" => "Percebt Change From 52-week High",  "l" => "Last Trade (With Time)",  "l1" => "Last Trade (Price Only)", 
"l2" => "High Limit",  "l3" => "Low Limit",  "m" => "Day's Range", 
"m2" => "Day's Range (Real-time)",  "m3" => "50-day Moving Average",  "m4" => "200-day Moving Average", 
"m5" => "Change From 200-day Moving Average",  "m6" => "Percent Change From 200-day Moving Average",  "m7" => "Change From 50-day Moving Average", 
"m8" => "Percent Change From 50-day Moving Average",  "n" => "Name",  "n4" => "Notes", 
"o" => "Open",  "p" => "Previous Close",  "p1" => "Price Paid", 
"p2" => "Change in Percent",  "p5" => "Price/Sales",  "p6" => "Price/Book", 
"q" => "Ex-Dividend Date",  "r" => "P/E Ratio",  "r1" => "Dividend Pay Date", 
"r2" => "P/E Ratio (Real-time)",  "r5" => "PEG Ratio",  "r6" => "Price/EPS Estimate Current Year", 
"r7" => "Price/EPS Estimate Next Year",  "s" => "Symbol",  "s1" => "Shares Owned", 
"s7" => "Short Ratio",  "t1" => "Last Trade Time",  "t6" => "Trade Links", 
"t7" => "Ticker Trend",  "t8" => "1 yr Target Price",  "v" => "Volume", 
"v1" => "Holdings Value",  "v7" => "Holdings Value (Real-time)",  "w" => "52-week Range", 
"w1" => "Day's Value Change",  "w4" => "Day's Value Change (Real-time)",  "x" => "Stock Exchange", 
); 

/* This function gets a symbol or an array of symbol as a parameter. 
* And it returns an array of the corresponding stock data. 
* If an error occurs, the detail of the error is saved in $error_message variable 
* which is passed by reference from the parent function 
*/ 

function get_stock_data_from_yahoo_finance_pv($symbol, &$error_message) { 

global $yahoo_finance_tags; 
$error_message = NULL; // Default value 

$f = ""; // The f parameter in Yahoo! Finance URL 
foreach($yahoo_finance_tags as $key => $value) 
    $f = $f . $key; 

if (is_array($symbol)) { // if the symbol is an array 

    if ($symbol == NULL) { // if the symbol is invalid 
     $error_message = "The given symbol is invalid."; 
     return -1; // ERROR 
    } 

    $url = "http://finance.yahoo.com/d/quotes.csv?s=" . implode("+", $symbol) . "&f=" . $f; 
    $fp = @fopen($url, "r"); 
    if ($fp == FALSE) { // If the URL can't be opened 
     $error_message = "Cannot get data from Yahoo! Finance. The following URL is not accessible, $url"; 
     return -1; // ERROR 
    } 

    $arr = array(); 
    $symbol = explode("+",implode("+", $symbol)); // Eliminate the keys in the symbol array 
    $j = 0; 
    while (($array = @fgetcsv($fp , 4096 , ', ')) !== FALSE) { 
     $i = 0; 
     $p = array(); 
     foreach($yahoo_finance_tags as $key => $value) { 
      $p[$key] = $array[$i]; 
      $i = $i + 1; 
     } 
     $arr[$symbol[$j]]= $p; 
     $j = $j + 1; 
    } 
    @fclose($fp); 
    return $arr; 

} else { // if the symbol is not array 

    if (strlen($symbol) < 1 || $symbol == NULL) { // if the symbol is invalid 
     $error_message = "The given symbol is invalid."; 
     return -1; // ERROR 
    } 

    $url = "http://finance.yahoo.com/d/quotes.csv?s=" . $symbol . "&f=" . $f; 
    $fp = @fopen($url, "r"); 
    if ($fp == FALSE) { // If the URL can't be opened 
     $error_message = "Cannot get data from Yahoo! Finance. The following URL is not accessible, $url"; 
     return -1; // ERROR 
    } 

    $array = @fgetcsv($fp , 4096 , ', '); 
    $arr = array(); 
    $i = 0; 
    foreach($yahoo_finance_tags as $key => $value) { 
     $arr[$key] = $array[$i]; 
     $i = $i + 1; 
    } 
    @fclose($fp);  
    return $arr; 
} 
return -1; 
} 
+0

謝謝,你知道即將推出的未來股息通知嗎? – disruptive