揮発性のメモ2

http://d.hatena.ne.jp/iww/

指定銘柄の一定期間の株価を取得するPHPプログラム

スクレイピングの練習。
指定銘柄の一定期間の株価を取得する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

株価より株を取得したい