Rubyでtwitter APIを使う
昨日から急に始まった「Rubyでいろいろするシリーズ」、第2弾は「twitter」をお届けする。
ご存知の方はご存知の通り、twitterはほぼすべての機能をAPIとして公開している。自分のプロフィールやアイコンの変更もできるので、時間や状況によって動的に変化させる、なんてのも楽しそうだ。
まずは自分のタイムラインを取得してみよう。
準備
rubygems
gemのup to dateなtwitterライブラリは「twitter4r」。「twitter」ではないようなので気をつけよう。
データはJSONで返ってくるので(オプションでXMLも指定できるが)、JSONライブラリも準備しておこう。
% sudo gem install twitter4r % sudo gem install json
twitterアカウント
アカウントがないと始まらないので、持ってない場合は取得しておこう。
なお、twitter APIは1時間に150回の利用制限がある。負荷が高いとさらに厳しくなる場合もあるので、利用する際は無茶な回数リクエストしないよう注意すること。利用回数を取得するAPIもあるので、念入りに作るなら確認も必要だろう。
タイムラインの取得
まずは、自分のフレンドタイムライン(フォローしてるユーザのtweet)を取得してみよう。
twitter_api.rb
# -*- coding: utf-8 -*- require 'rubygems' require 'twitter' require 'pp' class TwitterApi # twitterのID / PASSWORD USERNAME = 'kwappa' PASSWORD = '********' # コンストラクタ : Twiter::Clientオブジェクトを準備する def initialize @client = Twitter::Client.new(:login => USERNAME, :password => PASSWORD) end # friends_timelineを取得 def friends_timeline @timeline = @client.timeline_for(:friend, :count => 10) end # データ構造をチェック def dump @timeline.each do |status| pp status.to_hash end end # データを1行 = 1発言で保存 def save(file_name) File.open(file_name, 'w') { |file| @timeline.each do |status| file.puts status.to_hash.to_json end } end end twapi = TwitterApi.new twapi.friends_timeline twapi.dump twapi.save './result.json'
@timelineにタイムラインが取れるので、eachでstatus(個々の発言)をほげほげする。
% ruby twitter_api.rb
データがどんな構成になってるか確認してみよう。発言は私の朝っぱらのご挨拶。くだらないのは勘弁な。
{:user=> {:utc_offset=>32400, :friends_count=>332, :profile_text_color=>"666666", :time_zone=>"Tokyo", :statuses_count=>6349, :profile_link_color=>"2FC2EF", :url=>"http://www.kwappa.net/", :location=>"Tokyo Junk", :created_at=>"Fri May 25 05:33:43 +0000 2007", :profile_sidebar_fill_color=>"252429", :screen_name=>"kwappa", :profile_sidebar_border_color=>"181A1E", :favourites_count=>112, :profile_image_url=> "http://a1.twimg.com/profile_images/53072266/kwappa_twitter_normal.gif", :description=>"プログラマ / 東京Basic Technology勉強会主宰", :name=>"kwappa", :profile_background_image_url=> "http://s.twimg.com/a/1253830975/images/themes/theme9/bg.gif", :id=>6304032, :followers_count=>368, :profile_background_color=>"1A1B1F"}, :created_at=>Sun Sep 27 08:39:52 +0900 2009, :source=> "<a href=\"http://simplytweet.com\" rel=\"nofollow\">SimplyTweet</a>", :text=> "おはよった。寝坊リューション(ノートに書き留めた言葉的な意味で)。", :id=>4404774512}
user
…発言者のデータいろいろ
created_at
…発言日時
text
…本文
id
…発言ID
再利用するために
発言を永続化したいけど、DB用意するのもめんどくさいし…などの場合、ファイルに1行 = 1発言で保存できると何かと便利。JSONライブラリを使うとそれも簡単に実現できる。TwitterApi#saveで保存してあるので…
json.status.rb
# -*- coding: utf-8 -*- require 'rubygems' require 'json' File.open('./result.json') { |file| while line = file.gets status = JSON.parse(line) puts status["text"] end }
まとめ
これでtwitterの発言が取得できるようになった。これをYahoo! web APIで解析して、結果をほげほげして、タイムラインに投稿するようにしてやれば、twitter botのいっちょあがり、というわけ。
twitter4rではAPIの利用残り回数を取得できないようなので、ちゃんとしたbotを作るならこの辺をなんとかするのが課題だろう。
Links
http://usy.jp/twitter/index.php?twitter%20API
●twitter API Wiki / twitter API Documentation
http://apiwiki.twitter.com/twitter-API-Documentation
●[観] twitter API 仕様書 (勝手に日本語訳シリーズ)
http://watcher.moe-nifty.com/memo/2007/04/twitter_api.html
●twitter4R – Open Source Ruby Project for twitter REST API [Rubyforge]
http://twitter4r.rubyforge.org/
●twitter4R v0.3.0: Open Source Ruby Client Library for the Twitter REST API
http://twitter4r.rubyforge.org/rdoc/
●JavaScript Object Notation – Wikipedia
http://ja.wikipedia.org/wiki/JavaScript_Object_Notation