プログラミング的なSomething

プログラミング的なSomething

ITエンジニア(?)目線で生活・自転車・トレーニング話を綴ります

WAN回線障害にかかわるRSSフィード取得して流すTwitterBOT作ったよ

昨日まで作成していたスクリプトを使ってTwitterBOTを作成しました。
動機はWAN回線の障害情報のキャッチだったので、RSSフィードを取得してTwitterに吐き出しています。ちょっと紹介。

構成

  • 30分〜1時間に1回スクリプトを起動する。前回起動時になかったフィードがあればPost
  • Postする内容は回線の障害情報。
  • レンタルサーバ等を持ちあわせていないので、Macのcronで自動実行を仕込む

コード

肝心のコードは昨日までに完成していました。こちらを御覧ください。
回線の工事・故障情報を確認するため、RSSフィードを定期的に取得するスクリプト作ったよ

今回の主眼は自動実行、つまりcronの設定です。

cronの設定

けっこう躓きました。
Macであれば(cronにかわるものがあるとしても)、crontabで設定できます。

編集モード

crontab -e

状態確認

crontab -l

ずばり今回はこんな感じでcronを設定しました。

*/30 * * * * /bin/zsh /Users/hogehoge/script_test/post.sh

30分に1回post.shを実行します。hogehogeの部分は実行ファイルのあるディレクトリを埋めてください。

今回は実行ファイルにシェルスクリプトを使用していますが、これには理由があります。
私の環境ではrvmを使用しているので、cronで「ruby hoge.rb」と指定した場合、システムファイルのRubyと認識してしまうので、Rubyのバージョンどころかgemsetすら読み込んでくれません。LoadErrorでコケます。一発です。
というわけで、シェルスクリプトにrvmの実行込みでruby hoge.rbを呼び出すように作成しました。

#!/bin/zsh
rvm_path=/Users/user_name/.rvm/
source /Users/user_name/.rvm/scripts/rvm
rvm 1.9.3-p125
rvm gemset use testuse
ruby /Users/hoge/script_test/rssget.rb

「rvm 1.9.3-p125」と「rvm gemset use testuse」は適宜変更してください。
ここまででも結構手間でしたが、これでもコケました。こんなエラーが出力されます。

RVM is not a function, selecting rubies with 'rvm use ...' will not work.
You need to change your terminal settings to allow shell login.
Please visit https://rvm.io/workflow/screen/ for example.

エラーコードで調べてみると……ありがたいことです。同じエラーに当たっている方がいらっしゃいました。
最近(?)zshを使い始めました

.zshrcへ以下を追記します。

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"  # This loads RVM

これで完成です。ためしに/bin/zsh post.shを叩いていただければrubyで組んだスクリプトが動いてくれるはずです。
ローカルで動かしているので不安定ですが、とりあえずTwitterBOTとしての形になって少し満足。
ちなみにこれがBotです。テスト用なのでいきなりつぶやかなくなってしまうと思うのでご承知おきを。→https://twitter.com/#!/anime_stuffHis