2011-12-02 538 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