TwitterのStreaming APIをいろいろといじっています。今回はMongoLabがJSONをそのまま保存できるというのを最近おしえてもらったので、勉強がてらMongoLabを触ってみました。
また、この機会にRubyのEventMachineについても多少勉強したり、資料を探してみたので合わせて
紹介いたしやす!
😸 Mongoの基本を学ぶ
MongoDBの基本は、安定のドットインストールで!
あとは英語ですが、MongoDB Ruby Driver Tutorialを読めば最低限の操作は理解できそう。
🎳 EventMachineの基本を学ぶ
RubyのEventMachineですが、海外の入門PDFをナイスに翻訳してくれているこちらが一番オススメ。
こちらはEventMachineを使ったアプリケーションの一例。なかなか悪くない!
🤔 サンプルソース
Gemfile
まずは今回使ったGemfile。
ruby '2.1.0' |
🐝 Twitter Stream API => MongoDBのソース
Twitter Stream APIから取得したJSONをそのままMongoDBに保存するまでのRubyのソースコードです。
大まかなプログラムの流れはこちら。
(1) MongoDBからFollowersの一覧を取得 (2) Twitter Stream APIでFollowersを監視 (3) Tweetが流れてきたらMongoDBにJSONをそのまま保存 (4) Followersが増えたらworkerをエラー終了(herokuでworkerとして起動した場合は、エラー終了しても再起動してくれる)
require 'rubygems' |
今回は、Twitter-Stream-API用Gemに『tweetstream/tweetstream』を使いました。アップデートの頻度が高いことと、説明が充実していたからです。
.env
の読み込みをしてくれる『dotenv』をはじめて知って使いました。pryでデバッグするのを助けてくれます。
あとログを残したいのでAddonを検討中。Pure Rubyでログを残すときにお勧めの方法とかあればぜひ教えてください。
Procfile
今回のProcfileはこちら。
worker: bundle exec ruby tweet_stream_to_mongodb.rb |
今回はプロセス名をワーカ
にしました。ワーカの場合は異常終了した場合に、再起動をしてくれるそう。はじめて知りましたが、これはTwitter stream APIのように通信の失敗などでこけることがあるプロセスにはほんとうにうれしい仕様。
参考リンク
Elämä on — 実質無料!Rubyで作りMongoDBで保存しHerokuで運用するコスパ最強のTweet収集方法
.env: Twitterのキー情報の取得と環境変数への登録
まずは次のサイトでTwitterアプリケーションを登録してください。
(Sign in => アプリケーションの登録)
登録したら環境変数にTwitterキーを登録します。まずはローカルへのキー情報の登録です。foremanで管理しているプロセスでは、.env
ファイルに環境変数にしたい情報を書き込むと勝手に読み込んでくれます。
TWITTER_CONSUMER_KEY=xxx |
.env: MongoDBの接続設定
まずはMongoDBでDBとユーザーを作成。
mongo |
次に、localhostでのMongoDBの接続設定。DB_NAME, USER_NAME, PASSWORD
を入力して登録。
MONGODB_URL=mongodb://localhost |
参考リンク
mongodbユーザ認証有効化 - Studio3104::BLOG.new
🐮 Herokuへのデプロイ
では、Herokuにソースコードをデプロイ。
(このまえにソースはローカルでGitにコミットしておいてください)
heroku create APP --stack cedar |
続いてMongoLabのAddonを追加。
heroku addons:add mongolab |
次のコマンドで接続情報をブラウザで見れるので、その情報をHerokuの環境変数に登録。
heroku addons:open mongolab |
Twitterのキー情報やDBへの接続情報もHerokuの環境変数に登録。
heroku config:set TWITTER_CONSUMER_KEY=xxx |
ワーカプロセスを起動!
heroku scale worker=1 |
ということでHerokuの無料枠の中で、ツイートをそのままJSONとして保存できるようになりました!
🏀 Special
mongodb-driver-examples/ruby/ruby_simple_example.rb at master · mongolab/mongodb-driver-examples
rubyでmongodbを使ってみる by mongolab - shoprevのブログ