投資情報を自動でとってきてくれるTwitterbot「KEYNES」

社会人になると、学生の頃と違ってパソコンの前にかじりついて、 チャートを見ているわけにはいかない。。。 こんなときに自動で僕が求めている情報をとってきてくれるbotがあったら。。。

というわけで、ゴールデンウィークを犠牲にして作りました。 今は1時間ごとに為替情報だけ流すbotなんですが、 日経平均・ダウ・雇用統計あたりも拾ってこれるようにしたい。

設計図らしきもの

目標→日経平均、ダウ、為替情報を一時間に一度とってくるbotをつくる。 Rubyでどっかからデータとってきて、Twitter認証はなんか上手いことやって、 動かすのはPCにしろサーバーにしろ、出来てから考えればいいか、って感じで進めていった。

インプットにするデータ

Yahoo!ファイナンスから株価データをとってくるgem((Rubyのライブラリ))があるのは、 事前になんとなく知ってたんで、為替も似たようなのあると思っていた。

が、ググって出てくるよさそうな情報が、サービス停止になっていた。 以前Googleがやっていた為替データが、使えなくなってしまったらしい。 外為オンラインで、下記のURLで、JSON形式で、 リアルタイムの為替情報を提供していたので、それを利用することにした。 http://www.gaitameonline.com/rateaj/getrate しかしこのURL何目的なんだ。。。

株価をとってくるgemだけども、日経平均とダウがとってこれなかったので、 これは今後の課題としてとっておく。 (そもそも僕が株式投資してないんで、対応するか微妙ではある)

Rubyによる為替レート取得プログラムの実装

(※ gist貼ってたけど、今は削除していた)

そもそもRubyちゃんと書くのはじめてだったんだけども、 評判通りの楽しいプログラミング言語だった。

ただ文法体系は独特だったので、けっこー戸惑った。 ググったら情報はいっぱい出てくるんだけども、 データ型の理解もしてないんじゃないかコイツみたいな人(僕も怪しいが)が解説記事書いてて、うーんと思った。

とはいえ僕もハッシュと配列の違いすらよくわからないまま取り組んだので、結構混乱した。 元データがハッシュと配列とハッシュの入れ子みたいになっているせいで、苦しんでしまった。

結果として出来たのが最初に載せたgistのコードです。

実は冒頭で株価情報をとってきているのは、全然意味がないです。

詰まったトコ

twitterのgemをインストールしようとしたところ、

ERROR: Failed to build gem native extension.

でインストールに失敗した。 どうもXcodeの何かが足りないっぽかったんだけど、OSをYosemiteにしてないと、 アップデート出来なかったので、仕方なくOSをアップデートした。 Xcodeをアップデートしたら、普通にgemをインストールできた。

参考

http://qiita.com/ynakayama/items/afdfabd64b028da856b3 http://qiita.com/awakia/items/bd8c1385115df27c15fa http://tetsuwo.tumblr.com/post/103951983537/gem-hitimes-install-error-macosx http://qiita.com/gosshys/items/d31b4ef37f7614363029 http://route477.net/w/RubyTwitterJa.html https://github.com/sferik/twitter http://b.ruyaka.com/2013/12/02/ruby-twitter-bot-with-oath1-0a/

実行環境

ルビーーーのコードができて、ターミナルで叩くと、確かにTwitterアカウントにツイートが投稿される。 ここで「すげえ!」と感動。 これでMacのAutomatorに登録すれば、目的達成だ、と思ったけども、そんな簡単ではなかった。

Automatorは時間指定ができなくて、時間設定自体はCalenderアプリの方で設定するらしい。 Calenderアプリは、最小単位が一日なので、僕の想定している使い方とややズレる。 (もちろんカレンダー上に1日24個タスクを一時間ずつズラして登録して、それを一年繰り返し設定すればイケる。 けれど、それどうなんかなあ)

当初はPCでもギリギリ行ける気がしていたんだけども、 どうもサーバーがいいらしいということで、さくらVPSを契約することにした。 http://vps.sakura.ad.jp/

VPSの設定自体はググってもらうとして、 サーバー側でCrontabを設定して、今回作ったRubyスクリプトの実行を、毎時間設定。 終了。

サーバーサイドのRubyの環境設定はこの記事を参考にしました。 http://centos.bungu-do.jp/archives/000294.html

crontabの書き方ならこちら。 http://www.server-memo.net/tips/crontab.html

以下僕が詰まったトコ。

詰まったトコ

「crontab -e」で「ruby PGM_PATH」を指定して終わるはずだったんだけど、 実際にやってみたら全然動かなかった。 root権限で引っかかってんのかなあと思って、rootユーザーでやりなおしても同じだった。 ターミナルで同じコマンド打って見ると動くので、当初混乱した。

ググってみると、どうやらcrontabの実行環境と、Shellの実行環境が、 微妙に異なっているらしく、crontabの実行環境は下記のようになっていた。

[root@xxxxxxxxxx]# cat cron_env SHELL=/bin/sh MAILTO=xxxxxxxxx@xxxxxx USER=root <b>PATH=/usr/bin:/bin</b> PWD=/root LANG=C SHLVL=1 HOME=/root LOGNAME=root _=/usr/bin/env

どうやらPATH変数の指定が、せっかくインストールしたRuby関連のLibを指していないらしい。 そのせいで、crontabでrubyコマンドを指定すると、全部エラーで返ることになる。 shellで「env」と打ってみると、自分の環境変数が見れる。 僕の環境だと、

PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/xxxx/bin となっていた。 crontabの中に、これを書いてやると、PATH変数が上書きされて、いい感じになる。

参考にしたの

http://dqn.sakusakutto.jp/2014/04/crontab_path.html

今後

なんとかして日経とダウをとりたいなあと考えている。 日経は、証券会社がやってる日経ETFであれば、既にjp stockでとれるんだけども、 やっぱどうせとるんであれば、ちゃんととりたいと思う。 (了)