スクレイピングの練習。
指定銘柄の一定期間の株価を取得するRubyプログラム - うなの日記
http://www.nijiiroworks.com/blog/214.html
こちらを参考に、yahooから株価を取得してCSVを出力するプログラムを作成。
http://table.yahoo.co.jp/t?c=2010&a=11&b=1&f=2010&d=11&e=7&g=d&s=9631&y=0&z=&x=sb
のテーブルを解析してCSV出力するだけ。
コード
<?php include_once('simple_html_dom.php'); $tablenumber = 9; // データは9番目のテーブルにある // 引数取得 $sdate = localtime(strtotime($argv[1]),TRUE); $c=$sdate['tm_year']+1900; $a=$sdate['tm_mon']+1; $b=$sdate['tm_mday']; $edate = localtime(strtotime($argv[2]),TRUE); $f=$edate['tm_year']+1900; $d=$edate['tm_mon']+1; $e=$edate['tm_mday']; $stock = $argv[3]; // HTML取得 // http://table.yahoo.co.jp/t?c=2010&a=11&b=1&f=2010&d=11&e=7&g=d&s=9631&y=0&z=&x=sb $url = "http://table.yahoo.co.jp/t?c=$c&a=$a&b=$b&f=$f&d=$d&e=$e&g=d&s=$stock&y=0&z=&x=sb"; $html = file_get_html($url); // CSV表示 $table = $html->find('table',$tablenumber); foreach( $table->find('tr') as $tr ){ $arr = array(); foreach( $tr->find('td,th') as $td ){ $tmp = $td->plaintext; $tmp = mb_convert_encoding($tmp,'UTF-8','EUC-JP'); $tmp = str_replace(',','',$tmp); $arr[] = $tmp; } $str = implode(',',$arr); echo "$str\n"; } ?>
実行結果
$ ./getcsvfromyahoo.php 2010-11-01 2010-11-07 9631.T 日付,始値,高値,安値,終値,出来高,調整後終値* 2010年11月5日,510,511,509,511,5000,511 2010年11月4日,507,510,507,508,14000,508 2010年11月2日,506,507,505,505,6000,505 2010年11月1日,508,508,507,508,7000,508
株価より株を取得したい