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銘柄になっている。これに対応するため、データベース上に登録していた銘柄を一部削除している。