Yahoo Financeからの株価自動取得ツールを更新
January 28, 2015 – 9:27 am「Web公開情報から株価を自動取得しFlotでチャート化」で紹介しておいたYahoo Finance からの株価自動取得ツールが、Yahoo Financeのデータ表示(画面)仕様が変わったため動作しなくなっていた。この仕様変更、1月7日の午前中に行われた。
この仕様変更に対応するため、株価自動取得ツールに含まれるソースのうち変更した関数getStockPrices()(php ファイルfinance.php上に収録)をアップしておいた。
finance.php:
<?php function getStockPrices($stockcodes) { // $nr = sizeof($stockcodes); $str_codes = ""; for ( $k=0; $k<$nr; $k++ ) { // echo $stockcodes[$k] . "\n"; $str_codes = $str_codes . urlencode($stockcodes[$k]); if ( $k < $nr-1 ) $str_codes = $str_codes . "+"; } $url ="http://info.finance.yahoo.co.jp/search/?query=" . $str_codes . "&ei=UTF-8&view=l1"; echo $url; // $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $feed = curl_exec($ch); echo $feed; curl_close($ch); // $stock_value = array(); // 株価コード // $n = preg_match_all("/code=([^<]+)\" data-/",$feed, $cell, PREG_PATTERN_ORDER); $n = preg_match_all("/highlight\">\[([^<]+)\]<\/span>/",$feed, $cell, PREG_PATTERN_ORDER); echo "nn = " . $n . "\n"; if ( $n == $nr ) for( $i= 0; $i<$n; $i++ ) $stock_value[0][] = $cell[1][$i]; else return -1; // 日付/時間 出来高 // $n = preg_match_all("/<td nowrap>\n([^<]+)<\/td>/s", $feed, $cell, PREG_PATTERN_ORDER); $n = preg_match_all("/<dd class=\"time\">([^<]+)<\/dd>/s", $feed, $cell, PREG_PATTERN_ORDER); if ( $n == $nr ) { for($i= 0;$i<$n;$i++) { $stock_value[1][] = $cell[1][$i]; // $stock_value[2][] = $cell[1][$i+1]; } } else return -1; // 株価 // $n = preg_match_all("/<td><strong>([^<]+)<\/strong><\/td>/s", $feed, $cell, PREG_PATTERN_ORDER); $n = preg_match_all("/<dt class=\"price yjXXL\">([^<]+)<\/dt>/s", $feed, $cell, PREG_PATTERN_ORDER); if ( $n == $nr ) for( $i= 0; $i<$n; $i++ ) $stock_value[3][] = $cell[1][$i]; else return -1; // 銘柄 // $n = preg_match_all("/<strong class=\"ico.*\">([^<]+)<\/strong>/",$feed, $cell, PREG_PATTERN_ORDER); $n = preg_match_all("/<span class=\"name highlight\">([^<]+)<\/span>/",$feed, $cell, PREG_PATTERN_ORDER); if ( $n == $nr ) for( $i= 0; $i<$n; $i++ ) $stock_value[4][] = $cell[1][$i]; else return -1; // return $stock_value; } ?>
変更に係る注意点:1月7日のYahoo Financeの変更により、一度に処理できる銘柄数が15銘柄になっている。これに対応するため、データベース上に登録していた銘柄を一部削除している。