2012年10月24日水曜日

gnucash と yahoo finance quote

gnucashで株式のデータ取り込む際に今まで こちらのperlスクリプトを利用させていただいていたのですが、作者の方のgithubのサイトにもあるように Yahoo Financeの仕様が変更されたため、株価および投資信託の基準価格が取得できなくなって実は困ってました。
個人的な時間があったのと、折角ソースを公開して頂いているので早速修正に着手してみました。
githubから該当のプロジェクトをfork して何年ぶりかのperl コーディング。オブジェクト指向の記述に戸惑ったものの、perl のHTML scrap処理を調査しつつ修正。その時に参考にさせていただいたサイトは下記の通り。
対象となるページは
のように該当の証券コードをQueryStringとして付与すれば取得可能となっており、Scrape対象となる箇所のキーとなるhtml tag を検討すれば対応可能と考えていましたが、いくつか問題が発生しました。
  • Yahoo Financeでの証券コード検索は「部分一致」検索
証券コードを指定しても「部分一致」で検索されるため、証券コードを可能な限り特定する場合には「証券コード.取引所コードの頭文字(?名称不明。T:東証、O:大証、Q:JASDAQの存在を確認済み)」で指定できるようです。しかしどの証券コードがどの取引所に上場しているかの判断がつきません。存在しないコードは結果が戻らないので3種類全てでリクエストすれば解決できるかと思いましたが、
それぞれの証券コードに対して".T", ".O", ".Q" を付与した証券コードで実行した所、複数の証券所に上場している会社(例は任天堂。大阪と東京で扱われている。あまり良くわからないけど 「教えて! goo」をリンク)  が存在し、それぞれの証券コードに対するメインの証券所の確認は不可能と判断し、この方法も使えないと判断しました。


Yahoo Finance 「部分一致」検索結果が返却されます。さらに50件でページングする仕様になっています。ということは証券コードを50件単位で指定して検索処理を実施しても結果は50件以上返却される可能性があるためページングを考慮する必要がありそうです。
(2012年10月初旬までYahooFinanceの検索結果のページングにバグが存在していたのを確認していたのですが現在(2012/10/24)解消されていました。)
  • Web:Scraperで "Parsing of undecoded UTF-8 will give garbage when decoding entities" が発生
現在(2012/10/24)確認した所、上記のWarningも解消されているようです。ちょっと改めて修正を行う必要を対応します・・・

0 件のコメント: