すがブロ

sugamasaoのhatenablogだよ

RubyでTwitterAPIを叩いてみる

Rubyで使えるライブラリ

の二種類があるようだけど、twitter4rはちょっと情報が見つけにくかったので twitter ライブラリを使ってみる。

インストール

sudo gem install twitter 

これだけ。

認証してポストする

>> require 'twitter'
=> true
>> require 'pit'
=> true
>> auth = Twitter::HTTPAuth.new(Pit.get("twitter_user")["username"], Pit.get("twitter_user")["password"], {:ssl => true})
>> client = Twitter::Base.new(auth)
>> client.update("@sugamasao hogehoge")
>> ret = client.update("@sugamasao hogehogehoge")
=> ::Mash contributors=nil coordinates=nil created_at="Sun Apr 04 14:06:55 +0000 2010" favorited=false geo=nil id=11588919713 in_reply_to_screen_name="sugamasao" in_reply_to_status_id=nil in_reply_to_user_id=4579301 place=nil source="<a href=\"http://apiwiki.twitter.com/\" rel=\"nofollow\"API</a" text="@sugamasao hogehogehoge" truncated=false user=<#Hashie::Mash contributors_enabled=false created_at="Sat Apr 14 06:52:44 +0000 2007" description="はてな ではid:seiunskyでやってます。コードで世界を変えたいです。Ruby使いのFlasherです。@は全部読んでますが、タイミング外したりすると返信はしないかもしれません 。ごめんなさいね。/Twilog始めたよ:http://twilog.org/sugamasao" favourites_count=1331 followers_count=1027 following=false friends_count=1060 geo_enabled=false id=4579301 lang="ja" location="東京/皇居あたり" name="sugamasao" notifications=false profile_background_color="C6E2EE" profile_background_image_url="http://a1.twimg.com/profile_background_images/76890856/Untitled.png" profile_background_tile=true profile_image_url="http://a1.twimg.com/profile_images/51506628/200803032159000_normal.jpg" profile_link_color="1F98C7" profile_sidebar_border_color="C6E2EE" profile_sidebar_fill_color="DAECF4" profile_text_color="663B12" protected=false screen_name="sugamasao" statuses_count=9986 time_zone="Tokyo" url="http://d.hatena.ne.jp/seiunsky/" utc_offset=32400 verified=false>

こんな感じでclient に対して操作すれば良いようだ。
ちなみに、これでPOSTした内容はこっち。Twitter / sugamasao: @sugamasao hogehogehoge
進展があったら続きをかく。

検索 API を使ってみる

ここら辺を参考に。とりあえず、コンストラクタに突っ込むと良さそうなので、突っ込んでみる。

irb(main):033:0> search = Twitter::Search.new("sugamasao", {:lang=>"ja"})
=> #<Twitter::Search:0x1d6e77c @query={:q=>["sugamasao"]}, options{:lang=>"ja"}, fetchnil
irb(main):034:0> search.each do |t| puts t.text;end;nil
RT @tmtms: RT @nov: OpenID &amp; OAuth 仕様書を日本語に翻訳しました http://blog.matake.jp/archives/openid_oauth
ちなみにいっておくと、凛子を買おうとして慣れないiTunesから買ったら愛佳を買ってしまったので、都合二つ購入するはめになったのは秘密だぜ
これを見ると、カレンダーの同期もそのうち実装されるのか… http://www.gpara.com/article/cms_show.php?c_id=20008&amp;c_num=14
おお、最後の track っていう API を使えばいんじゃまいか
マジレスすると、もう飽きた。。。本編やってないしな……
これ、カレンダーが iCal か google カレンダーと同期してくれればまだ使えるよちがあるんだが……。これで600円とかボロい商売やでェ
なう http://twitpic.com/1d7a06
ぎゃばあああああああああああ凛子がしゃべってるうううううううううう
ワロスwww http://hamusoku.com/archives/2990235.html
@tomikopink ありがとう
@capeknote ありがとうございます
@sugamasao ぶあ!
おいらも。。。しかも今出張中だし。 RT @sugamasao: iPhone OS のバージョンアップしろって怒られたお……しょんぼり
@sugamasao おめでとう
@sugamasao 廃人にもほどがあります まずはおめでとうといわせて

結構簡単に取れますね。
ただ、 #search は初回にデータを取りに行って、二回目以降は最初にとったデータをキャッシュするみたいだから、再度とろうとするなら、new からしないといけないっぽいかな。まだAPIちゃんと読んでないけど。

Streaming API を使ってみる

track とやらだと(精度は低いけど)登録なしかつ無制限で使えるらしい。
というわけで、ちょっくら試してみる。

ここを参考にして実行してみたが一向に動く気配が無い……。動作を細かく見てると、そもそも URL が 404 になっているw
しょうがないので本家のドキュメントにあたってみる。

サンプルの curl ではちゃんと動くなぁと思ったら URL がぜんぜん違ってる。なので、上記の Ruby サンプルも URL 変えればいけるんじゃね? と思い URL を変えてみた*1
……おお、いけたいけた。ワシャワシャ取れてる!!
というわけで、動かしたサンプルは下記に置いた。ソースは全く同じで、ユーザ名や URL を変えただけだが。

で、ちょっと気になるんだけど、これって日本語のユーザ(というか発言?)を指定して取れるのかな。
日本の特定の話題とかでフィルタリングするには粒度が荒すぎてほとんど発言を取れないんじゃあないかと懸念してるなう。

*1:http://stream.twitter.com/1/statuses/filter.json