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

四十三庵

蔀の雑記帳

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

IT

https://twitter.com/finance_keynes/status/595575684371582977

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

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

設計図らしきもの

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

インプットにするデータ

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

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

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

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

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

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

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

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

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

●詰まったトコ
twitterのgemをインストールしようとしたところ、

ERROR: Failed to build gem native extension.

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

●参考
qiita.com
qiita.com

http://tetsuwo.tumblr.com/post/103951983537/gem-hitimes-install-error-macosx
tetsuwo.tumblr.com
qiita.com
Route 477
github.com
3分でスッキリ! Oauth 1.0図解とRuby Twitter bot開発 – KumanBlog

実行環境

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

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

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

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

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

crontabの書き方ならこちら。
www.server-memo.net


以下僕が詰まったトコ。

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

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

[root@xxxxxxxxxx]# cat cron_env
SHELL=/bin/sh
MAILTO=xxxxxxxxx@xxxxxx
USER=root
PATH=/usr/bin:/bin
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変数が上書きされて、いい感じになる。

●参考にしたの
crontabの環境変数PATHについて調べてみた · DQNEO起業日記

今後

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

*1:Rubyのライブラリ

*2:僕も怪しいが