読者です 読者をやめる 読者になる 読者になる

鈍足ランナーのIT日記

走るのが好きな5流のITエンジニアのブログ。

趣味の範囲は広いけど、どれも中途半端なクソブロガー楽しめるWebアプリを作ってあっと言わせたい。サーバーサイドPerl(Mojolicious)、クライアントサイドVue.js。Arduinoにも触手を伸ばす予定。

ダウと日経平均、為替(USD日本円)のデータをcsvで入手する

YAHOO | DJI: Dow Jones Industrial Average

YAHOO | Nikkei 225 Index (Japan)


qiita.com

問題は為替の過去データにアクセスする方法が分からない。取り合えずこちらかな。

為替の東京市場の終値がまとめて分かるサイトご存じないですか? - 日々の東京... - Yahoo!知恵袋

http://www.federalreserve.gov/releases/H10/hist/dat00_ja.htm

HTMLからCSVにおこさないといけません。そこはPerlを使用しました。

use Web::Scraper;
use Time::ParseDate;
use Time::Moment;
use URI;
use DateTime;

my $scraper = scraper {
      process 'table.statistics th', "dates[]" => 'TEXT';
      process 'table.statistics td', "rates[]" => 'TEXT';
};

    print "Date,Close\n";

    my $res = $scraper->scrape( URI->new("http://www.federalreserve.gov/releases/H10/hist/dat00_ja.htm"));

    for (my $i = 0; $i <= $#{$res->{dates}}; $i++) {
        my $yen = trim(@{$res->{rates}}[$i]);
        if ($yen eq "ND") {
            $yen = "";
        }
        printf "%s,%s\n", date_format(@{$res->{dates}}[$i]), $yen; 
    }

sub trim {
    my $string = shift;
    $string =~ s/^\s*(.*?)\s*$/$1/;
    return $string;
}

sub date_format {
    my $string = shift;
    $string =~ s/-/ /g;
    my $epoch = parsedate($string, ZONE => PDT);
    my $moment = Time::Moment->from_epoch($epoch);
    return $moment->strftime("%F");
}