Category Archives: ruby

スクリプト完成

 とりあえず、複数のカードに対応出来るスクリプトが完成した。ほとんど、やっつけ感全開のスクリプトだけどリハビリにはちょうど良かった。とりあえず、今年の仕込みの目処もたった。昨日の時点で自分の web の古めのコンテンツもサルベージで出来たので、それも活用出来るようにしていこうと思う。

 選択と集中今年のテーマはコレだ。

Windows, Mac で共通に使えるスクリプト

 自宅に引きこもってずーっと PC をいじくっていた。録画したエヴァを見ながらひたすらだ。mysql のテーブルを作り直しながら ruby で共通のスクリプトが書けないかを模索していた。結局、キャラクターセットの違いに帰結される。
 Windows で ruby から mysql を操作する場合:
 db.query(“set character set sjis”)
 を行う。
 その後にキャラクタセットを
 .tosjis
 で切り替える。
 これは Windows のコンソールで対応しているキャラクタセットとフォントがもろ SJIS なのでこうなっている。と言う訳でコンソールでこれらを変更して対応してみたが、エラーが出るので動作しなかった。これを追いかけて修正する根性とスキルを持ち合わせていないので、上記の追記でしばらくはお茶を濁すことにする。

データ取得の改良

 株価のデータ取得の元は Yahoo ファイナンスのウェブを利用しているが、いくつか例外事項があることがわかったので修正してみた。
 業種を求める時に、業種が出ていない団体が存在する。そういうのにも対応出来たので、Panrolling の元ネタを使ってそこに記載されている全てのデータを取得することが出来るようになった。ただ、–unregistered– のデータは検索しない。
 修正
# 業種を切り取る
def scrape_category
@category = @text.scan(/市場:.*/)[0].gsub(/<\W.*/, "").gsub(/市場:/, "") if @category == "" @category = @text.scan(/ids=.*a/)[0].gsub(/ids=\d\d\d\d/, "").gsub(/\">/, “”).gsub(/<\/a/, "") else @category = @text.scan(/市場:.*/)[0].gsub(/市場:.*ids=\d\d\d\d/, "").gsub(/\">/, “”).gsub(/<\/a/, "").gsub(//, “”).gsub(/\/div/, “”).gsub(/市場:.*an/, “”)
if @category == “”
end
end
@catagory ||=””
end
 まぁ、こんな感じで。ついでに出来高も取れるようになった。
# 出来高を切り取る
def scrape_volume
@volume = @text.scan(/mar0.*株/)[0].gsub(/strong/, “”).gsub(/mar0\”/, “”).gsub(/株/, “”).gsub(//, “”).gsub(/\//, “”)
@volume ||=””
end
 これでだいぶ形が出来てきたな。

すこしずつ、utf8 へ

Windows, MacOSX で共通して使える ruby のスクリプトを構築しているが、けっこうめんどい。
記述するコードを UTF-8 にするわけだが、以下の点に留意する必要がある。
 1. Windows
 UTF-8 BOM なしで記述する
 画面出力直前で、.tosjis メソッドを使って、SJIS に変換する
 2. Mac OSX
 入力直後に .toutf8 メソッドを用いて、UTF8 に変換する
 まぁ、そんな感じで構築して行きます。

スクレイピング

 最近、株とかに興味が出てきたがイマイチ使い勝手の良いツールが無いので、自分で色々とやってみることにした。特に web からデータを得ることが多い。Yahoo のファイナンスのページから、目的とする指標を取り出すためのスクリプトを書いてみる。参考にさせてもらったページがあるのだが、キャッシュで無いと辿り着けないのでここではそれを使って自分で拡張した部分について述べる。
# 業種を切り取る
def scrape_category
@category = @text.scan(/ids=.*a/)[0].gsub(/ids=\d\d\d\d/, “”).gsub(/\”>/, “”).gsub(/<\/a/, "") @catagory ||="" end  「ids=~」がキーワードになるので、ここの行を取得して不要な部分を削ぎ落とせば OK # 市場名を切り取る def scrape_market @market = @text.scan(/市場:.*/)[0].gsub(/<\W.*/, "").gsub(/市場:/, "") if @market == "" @market = @text.scan(//, “”).gsub(/\//, “”)
end
@market ||=””
end
 市場を求めるのは若干複雑で複数の市場でその銘柄が上場している場合は、「市場:」の後に何も書かれない。一つの市場だけに上場している場合は、「市場:」の後に上場している市場(例:東証1部など)が書かれていることを利用する。
 まぁ、こんな感じで色々とデータを集めてみます。
 市場を求める