GnuCashで日本の投資信託の基準価額を取得するPerlモジュールを書いた
一ヶ月以上前に作ったまま長いこと紹介せずに放置していたので、そろそろ公開しようと思う...
LiosK's Finance--Quote--YahooJapan at master - GitHub
A Perl module that enables GnuCash to get quotes of Japanese stocks and funds from Yahoo! JAPAN.
GNUプロジェクトの財務管理ソフトウェアであるGnuCashには、Web上のデータソースから株式や投資信託の価格を自動で取得する便利な機能がついています。
Features | GnuCash (投資ポートフォリオに関する機能を抜粋)
- Stock/Mutual Fund Portfolios
- Track stocks individually (one per account) or in portfolio of accounts (a group of accounts that can be displayed together).
- Online Stock & Mutual Fund Quotes
- Get Stock & Mutual Fund quotes from various web sites, update portfolio automatically. Additional pricing sources are added regularly.
この機能を使えばGnuCashで投資ポートフォリオを管理するのがだいぶ楽になるのですが、残念なことにデフォルトでは日本の株式や投資信託の価格を取得することができませんでした。おそらく、日本では株式等の価格をCSVのような再利用可能な形で簡単に手に入れることができないために、GnuCashの方で対応してもらえなかったのでしょう。金融後進国は不便ですね...
というわけで、Yahoo!ファイナンスの検索結果ページをスクレイプして、日本の株価や投資信託価格をGnuCashで取り込めるようにするPerlモジュールを作成したので、GitHubで公開しましたよ!というのがこの記事の本題です。使い方等の詳細は続きで。
前回と前々回のエントリーの問題を総当りで
前々回と前回のエントリで書いた問題を、Perlで総当りで解こうとしてみた。使ったコードは最後に添付。
実行開始から7時間半経過したけど未だに終わる気配がない。馬鹿正直に40人の参加希望者と10個の実験枠を組み合わせたら組み合わせは10^40通り。今回のコードでは、参加可能枠の配列を使って解空間を狭めたけれど、それでもやはり9 * 8 * 9 * 6 * 6 * 5 * 4 * 6 * 7 * 9 * 6 * 8 * 9 * 6 * 7 * 5 * 9 * 4 * 4 * 5 * 3 * 8 * 6 * 8 * 6 * 8 * 7 * 3 * 7 * 9 * 5 * 9 * 5 * 6 * 8 * 7 * 8 * 8 * 7 * 5 = 1.4271125147448316e+32通りの解がある。もっと解空間を狭めるアルゴリズムを考えるか、確率的なアルゴリズムを考えるしかないようだ。
ちなみに、7時間半走らせたところ、最適解は最大実験枠が4個で最大参加者数が12人になっている。明らかにまだまだ。
Perlを書くようになったなぁと思うとき
- 2008-04-05
- カテゴリ: Client Side
- タグ: Perl
リネームツールを探してくる代わりに
rename $_, ++$i . '.jpg' foreach (sort glob '*.jpg');
とか書いて済ませ始めたとき。
[Perl][メモ] CGIのperlへのパスを書き換えるスクリプト
- 2008-03-07
- カテゴリ: Client Side
- タグ: Perl Tips CGI
CGIの先頭のperlへのパスを、ローカル環境用(#!perl)とアップロード先環境用(#!/usr/bin/perl)とで切り替えるPerlスクリプトを書いたのでメモ。Movable Type Open Sourceとかで遊んでるときに便利。
use strict;
foreach (glob '*.cgi') {
open FH, $_;
my @lines = <FH>;
close FH;
my $line = shift @lines;
$line =~ s|!perl|!/usr/bin/perl| unless ($line =~ s|!/usr/bin/perl|!perl|);
unshift @lines, $line;
open FH, '>' . $_;
flock FH, 2;
print FH @lines;
close FH;
}
こういう雑多な処理を自動化するときはPerlが便利すぎる。んで、foreach (glob '*.*') { ... }が便利すぎて困る。
ファイルを2回オープンしてるのが無駄な気がするんだけど、なんかいい案あるかな?
[JavaScript][Perl] 続・正規表現を使ったCSVパーサ
- 2008-01-29
- カテゴリ: Client Side
- タグ: Tips JavaScript Perl 正規表現 CSV
正規表現を使ったCSVパーサの続き。
トークン化したCSVを解釈するコードをJavaScriptとPerlで書いた。二つのロジックはほぼ同じ。
それぞれ、第一引数には解釈するCSVテキストを渡し、第二引数ではfield間の区切り文字を指定する。デフォルトはコンマ(,)。戻り値は、CSVを解釈した2次元配列(Perlの場合はリファレンス)。
Perlをもう一度勉強しよう
- 2007-12-21
- カテゴリ: Client Side
- タグ: 安易な発想 Perl 入門
Perlのスクリプトを書かなければいけない予感がしているので、Perlを勉強しなおしている。ゼミの研究室のサーバーは今のところPerlしか入っていなくて、PHPを入れるのも面倒そうなので、もう一度Perlを勉強しなおす決心をした。
実は僕がプログラミングを始めたのはPerlからで、Perlの後PHPに移って、JavaScriptにはまって今に至る。その間にC, Delphi, Javaなんかにも寄り道はしたが。
とはいっても、Perlを勉強したのは中学生のころで、今から思えば何もわかっていなかった。CGI.pmもなくて、おまじないのようにフォームデコードの関数をコピー&ペーストいたり、変数名の衝突でスクリプトが壊れて、以後グローバル変数恐怖症になったりしたことだけは覚えている。
今改めてPerlを勉強してみると、当時とは見違えるように理解が進む。特に無名配列、無名ハッシュ、無名サブルーチンあたりの便利さに目覚める。そしてリファレンスは便利ですね。
ということで、しばらくはPerlにはまりそうです。ものすごくJavaScriptの影響を受けたコードを書いていますが。
[PHP][mod_rewrite]ユーザーエージェントでPCとケータイを判別
- 2007-11-04
- カテゴリ: Server Side
- タグ: Tips ケータイ mod_rewrite apache PHP Perl 正規表現
HTTP_USER_AGENTの文字列を判断して、PCからのアクセスなのかケータイからのアクセスなのかを判別するというのは、広く使われているテクニック。
例えばDoCoMoのケータイならば、ユーザーエージェントの先頭に必ずDoCoMoの文字列が入ることになっているから、それを見てドコモのケータイだと判断すればよい。
先ほど、各キャリアのユーザーエージェントを調べたのでメモ。
XAMPP 1.6.4を入れたらPealアドオンが入れられない件
- 2007-10-26
- カテゴリ: Server Side
- タグ: XAMPP Perl Apache
XAMPP 1.6.4を導入した後に、Perlアドオンを入れようとしたんですが、Apache 2.2.4(XAMPP 1.6.4ではApache 2.2.6)を要求されて先に進めません。
XAMPP 1.6.3aにディグレードすることもできないし…どうすればいいんだろうか。時間がたてばApache 2.2.6でも動くようになるのかな?
Perl入れるついでにXAMPPもアップグレードしておこうと思ったのが裏目に出たorz

