Ruby - TwitterタイムラインをOAuth認証で取得!
Updated:
Twitterを始めてまだ10日ばかりですが、面白さにはまりRubyで実用的なものを作ろうと考えました。
今回作ってみたものは、「自分のTwitterタイムラインをバックアップするRubyスクリプト」です。
Rubyスクリプトの概要
- TwitterへOAuth認証でログイン。
- 自分のアカウントのタイムラインをリツイートも含めて全て取得。
- 取得したタイムラインデータをデータベース(MySQL)へINSERT。
詳細は説明はしませんが、おおまかな流れは説明します。 ※各項目の詳細はそれぞれWeb等で調べれば大体わかると思います。
作業手順
前提条件
- Rubyがインストールされ使用可能である。
- MySQLがインストールされ使用可能である。
- ある程度のLinuxの知識。(Linuxで開発・運用する場合)
- ある程度のRubyの知識。
- ある程度のMySQLの知識。
- ある程度のTwitterAPIの知識。
1.gemパッケージインストール
RubyでのTwitter関連、OAuth関連の開発を行うのに必要なGemパッケージをインストールする。 (WindowsでもLinuxでも同様。おそらくBSD系OSでも同様。)
gem install twitter
gem install oauth
2.連携アプリの登録
(1) twitterにログインしていなければログインする。 (2) twitterの設定ページのアプリ連携タブないの「連携アプリの追加と設定はこちらから変更できます。」のこちらをクリックする。
(3) twitter developersのログインページに移るので、twitterのユーザ名・パスワードを入力してログインする。
(4) 「Create a new application」ボタンをクリックする。
(5) 「Name」、「Description」、「WebSite」を入力、「Yes, I agree」にチェックを入れ、認証用文字を入力して、「Create your Twitter application」ボダンをクリックする。
(6) 「Consumer key」、「Consumer secret」が発行されるので控えておく。 (twitter developersのページにログインすればいつでも確認できる)
(7) 「Settings」タブに移り、「Application Type」を「Read and Write」にし、「Update this Twitter application’’s settings」ボタンをクリックする (今後のことも考えて書き込みもできるようにしておいた。)
(8) 「Details」タブに戻り、ページ下の「Create my access token」ボタンをクリックする。 (なぜか「Create my access token」ボタンを2回クリックしなければならなかった?)
(9) 「Access token」、「Access token secret」が発行されるので控えておく。 (twitter developersのページにログインすればいつでも確認できる)
(10) これで必要なキー、トークン等はそろったので、twitter developersからログアウトする。
3.コーディング
単純にタイムライを取得するだけのコードならWeb上に転がっているので参照する。 (当方はWeb上から参照したRubyスクリプトをタイムラインを未取得のものを全件取得するように改修し、さらにMySQLへ登録する処理を追加しました。) 独学でRubyを習得して作成したものなのでソースは見た目も良くないし、ロジックもあまりスマートでないのでソースの公開はしません。 ※注意※一度に取得するツイートが大量にあるとTwitterAPIのアクセス制限に引っかかるので調整が必要になる。(※1も参照)
4.実行
作成したRubyスクリプトを実行してみる。 MySQLにデータが登録されていれば成功。 あとは取得したデータは手元にあるので自由に加工可能です。
※1 TwitterAPIのアクセス制限
OAuth認証の場合 ・・・ 350回 / 時
認証無しの場合(IP毎) ・・・ 150回 / 時
問題点というか、開発中に困ったこと
- OAuth認証は1時間に350回が限度なので、コーディングに不備があって無限ループに入り、リクエストを高速で送ってしまうと、一気に350回のリミットに引っかかってしまい、解除されるまでの間、作業が滞ってしまう。
- 1回に取得できるツイートはデフォルトで20件、最大で200件まで指定できるはずだが、今回使用した「Ruby Twitter Gem 1.6.0」では20件につき1件少ない件数しか取得できなかった。バグか?それとも勘違いか? → 20件につき1件少ないことを考慮したコーディングをした。
- TwitterAPIは更新のペースが速いので少し前の情報でさえ間違っている(すでに変更になっている)ことがある。
主に参考にしたサイト
- Twitter Developers
- RubyでTwitterのOAuth認証をしてみる - kk_Atakaの日記
- Twitter API - TwitterまとめWiki
- ぱそぱそ雑記Rubyを使ってみる~その2~
当方は早速、自分のホームページにツイート一覧を表示してみました。 自宅サーバで1時間毎にタイムラインを取得・DB登録し、Ruby on Railsで作成している当方ホームページに一覧(直近5件)を表示するようにしました。 データが手元にあるため、プログパーツを使用していたときよりも表示が高速になりました。 そんなに頻繁に更新する必要性も感じられないので、1時間毎の更新にしています。 (近い将来には、直近5件だけではなく全件参照できるページも構築予定(気が向いたら))
また、当方のブログ(WordPress)の方にもタイムラインをブログパーツを使用して表示させていますが、こちらはPHPでできているため今のところこのままブログパーツを使用することにします。
以上。
Comments