如何使用雅虎财务获得RealTime股票价格
我有几个要求,如下所示。
- 获取实时股票价格,无需刷新页面或ajax。 (即雅虎财经,他们获得最新的股票价格,没有页面刷新和ajax调用)
- 从BSE,NSC等股票市场获取股票价格。
现在使用以下代码我能够获得股票价格,但要么我必须刷新页面或调用ajax,在这两种情况下需要20到30秒,但在许多金融网站,他们可以每秒更新价格而不使用ajax。
stocks[] = $stock; } /** * Populate parameters/format to be fetched * * @param string $param Parameters/Format to be fetched * @return void */ public function addFormat($format) { $this->format = $format; } /** * Get Stock Data * * @return array */ public function getQuotes() { $result = array(); $format = $this->format; foreach ($this->stocks as $stock) { /** * fetch data from Yahoo! * s = stock code * f = format * e = filetype */ $s = file_get_contents("http://finance.yahoo.com/d/quotes.csv?s=$stock&f=$format&e=.csv"); /** * convert the comma separated data into array */ $data = explode( ',', $s); /** * populate result array with stock code as key */ $result[$stock] = $data; } return $result; } } $objYahooStock = new YahooStock; /** Add format/parameters to be fetched s = Symbol n = Name l1 = Last Trade (Price Only) d1 = Last Trade Date t1 = Last Trade Time c = Change and Percent Change v = Volume */ $objYahooStock->addFormat("snl1d1t1cv"); /** Add company stock code to be fetched msft = Microsoft amzn = Amazon yhoo = Yahoo goog = Google aapl = Apple */ $objYahooStock->addStock("msft"); $objYahooStock->addStock("amzn"); $objYahooStock->addStock("yhoo"); $objYahooStock->addStock("goog"); $objYahooStock->addStock("vgz"); $objYahooStock->addStock("FB"); /** * Printing out the data */ ?> Row Code Name Last Trade Price Last Trade Time Change and Percent Change Volume getQuotes() as $code => $stock) { ?>
file_get_contents_curl($url) ); return $jason_obj->query->results->quote; } //return not just the quote but others informations too public function getCurrentData($symbol){ $is_array = is_array($symbol); $imp_symbol = ($is_array)? implode('%22%2C%22', $symbol) : $symbol; $url = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quote%20where%20symbol%20in%20(%22$imp_symbol%22)&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback="; $jason_obj = json_decode( $this->file_get_contents_curl($url) ); $result = $jason_obj->query->results->quote; return (is_array($symbol) and (count($symbol) == 1))? [$result] : $result; } //return all quotes from the param $symbol passed, if symbol is array, it will return other array indexed by the symbols public function getCurrentQuote($symbol){ if(is_array($symbol)){ $symbol = empty($symbol)? ['GOOG'] : $symbol; $data = $this->getCurrentData($symbol); $result = []; for ($c = 0; $c < count($data); $c++) { $result[$data[$c]->Symbol] = $data[$c]->LastTradePriceOnly; } return $result; }else return $this->getCurrentData($symbol)->LastTradePriceOnly; } }
怎么用:
$yahoo = new U_Yahoo(); var_dump( $yahoo->getCurrentQuote('GOOG') ); var_dump( $yahoo->getCurrentQuote(['GOOG', 'YHOO']) ); var_dump( $yahoo->getCurrentData(['GOOG', 'YHOO']) ); var_dump( $yahoo->getHistoryQuote('YHOO', 20, 0) );
好吧,在您的方法中,股票价格提取由客户(用户的浏览器)触发。 所以没有办法在页面刷新或AJAX之外触发它。
但是,无论用户如何,您的服务器都可以获取这些数据。 就像是:
data source <----> your backend server fetching the data ---> your database <---- your frontend web server <---> users
后端和前端服务器可以是同一台服务器,但具有不同的进程。
就谷歌而言,我很确定该API已被弃用且不再有效。 你可以使用雅虎财务api,他们有civ下载api和通过yql。
参考: https : //code.google.com/p/yahoo-finance-managed/wiki/YahooFinanceAPIs
就实时情况而言,我建议看一下雅虎网络服务。 以下是一个示例: http : //finance.yahoo.com/webservice/v1/symbols/ITC.NS,ITC.BO/quote ?format= json如果您不提供格式,它将返回XML。
如果没有刷新或Ajax,你将如何实现它?
你可以创建一个pubsub模型并让你的应用程序订阅你的应用程序,你必须创建这个层,因为yahoo api是基于拉取而不是基于推送。 因此,您需要从雅虎提取股票报价并将其推送到您的应用程序。 您可以将JMS用于java或套接字,无论哪种方式适合您。