TwitterのStreamingAPIを使ってみた – 2(ruby twitter gem編)

3b19eb0c-s

ちょうど先日、rubyでtwitterのStreamingAPIを叩いてみましたー とエントリーたんですが(こちら)、普通にgemのパッケージでtwitterAPIを超簡単に利用できるライブラリがあったんですねw
なんと情弱!(ていうかググれば普通に出てきてたし・・)

ただ、最初入れたtwitterなるgemは期待していたのと違っており、なーんだ と思っていたのですがすぐにtweetstreamを発見してこちらも試してみました。

というわけで今回は rubyのgemで ‘twitter’ と ‘tweetstream’ を使ってみた件でのエントリーです。

注意 : 2013/12/21 現在 gem install twitter とするとVer5以降のものがインストールされますが、中身全然変わってますw
4以前はこのエントリはまぁ参考になるかもしれませんが、5以降が入ってる場合は↓こちらを参考にしてみてください。

TwitterのStreamingAPIを使ってみた – 3(ruby twitter gem – Ver5編)

ruby twitter gemを使う

まずはtwitterを入れる事にしやした。
こちらのブログを参考にさせていただきやした。

もう、インストールもソースも超簡単☆


# gem install twitter

これでインストール完了。

ソースはこれ

# encoding: utf-8

require 'twitter'

CONSUMER_KEY         = "XXXX"
CONSUMER_SECRET      = "XXXX"
ACCESS_TOKEN         = "XXXX"  #この辺のキーは前回同様
ACCESS_TOKEN_SECRET  = "XXXX"  #Twitter Developersで登録したものを使いまわし

Twitter.configure do |config|
   config.consumer_key = CONSUMER_KEY
   config.consumer_secret = CONSUMER_SECRET
   config.oauth_token = ACCESS_TOKEN
   config.oauth_token_secret = ACCESS_TOKEN_SECRET
end

Twitter.home_timeline.each do |tw|
   puts tw['text']
end

よっしゃー動かすぜー っと思ったら、gemのパスのせいなのか以下のエラーが

</pre>
<div>political_twitter.rb:3:in `require': no such file to load -- twitter (LoadError)</div>
<pre>

なんか前にも見たことあるな って思って
require ‘rubygems’ を最初に入れたらなおった。
※ちゃんと勉強したほうがいいな

さっそく動かします!

すぐに止まりました!

なんで?w

参考にしたブログはuserstreamAPIを叩くプログラムと同類で紹介してるので、今回のプログラムもuserstreamがババババーっと流れてくるものを(勝手に)期待していたのですが、そうではないようですね。

Documentをみてみよう

ruby twitter gemのドキュメントはこちらにありました。

http://rdoc.info/gems/twitter

で、上のソースで使っているtweet取得部分のメソッド “home_timeline”  の項を見てみる。

すると、以下のように書いてありました。

Returns the 20 most recent Tweets, including retweets if they exist, posted by the authenticating user and the users they follow

私、英語はバッチリ苦手なんですがなんとなく20tweet返すぜ みたいな事書いてある気がする。
ほほー streamじゃないのね。オプションもあさってみましたが、どうもそれっぽいのはない様子。

Documentのサイトを血眼になって探してみたんですが、自分の英語力のなさが原因かもしれんですがuserstreamを叩くクラスはなさげな印象でした。

しかし、グーグル先生は異なる手段を教えてくれました。

ruby tweetstream gem の存在

ユーザストリームAPIを叩くgemは全く別のライブラリになっていまして、それを紹介してくれている神様を発見しました。

ではでは。。 と早速インストールです

# gem install tweetstream

しっぱい!

Building native extensions.  This could take a while...
ERROR:  Error installing tweetstream:
ERROR: Failed to build gem native extension.

/usr/bin/ruby extconf.rb
checking for rb_trap_immediate in ruby.h,rubysig.h... yes
checking for rb_thread_blocking_region()... no
checking for inotify_init() in sys/inotify.h... yes
checking for writev() in sys/uio.h... yes
checking for rb_wait_for_single_fd()... no
checking for rb_enable_interrupt()... no
checking for rb_time_new()... yes
checking for sys/event.h... no
checking for epoll_create() in sys/epoll.h... yes
creating Makefile

make
g++ -I. -I. -I/usr/lib/ruby/1.8/i386-linux -I. -DWITH_SSL -DBUILD_FOR_RUBY -DHAVE_RB_TRAP_IMMEDIATE -DHAVE_RBTRAP -DHAVE_INOTIFY_INIT -DHAVE_INOTIFY -DHAVE_WRITEV -DHAVE_WRITEV -DHAVE_RB_TIME_NEW -DOS_UNIX -DHAVE_EPOLL_CREATE -DHAVE_EPOLL  -D_FILE_OFFSET_BITS=64  -fPIC -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables -fno-strict-aliasing  -fPIC      -c ed.cpp
make: g++: コマンドが見つかりませんでした
make: *** [ed.o] エラー 127

g++ コマンドが見つかりませんでした って。 そんなんあったんすか。すいません。

というわけで、cコンパイラ?のc++版と思えばよいのでしょうか。 とりあえず gcc-c++ 先輩を召還しました。

# yum install -y  gcc-c++

さくっと入り、再び gem install tweetstream したら今度は成功の様子。

早速使ってみよう

ソースはこちら。まるパクり。 ていうかフォーク?

require 'rubygems'
require 'tweetstream'

CONSUMER_KEY         = "XXXX"
CONSUMER_SECRET      = "XXXX"
ACCESS_TOKEN         = "XXXX"
ACCESS_TOKEN_SECRET  = "XXXX"

TweetStream.configure do |config|
   config.consumer_key        = CONSUMER_KEY
   config.consumer_secret     = CONSUMER_SECRET
   config.oauth_token            = ACCESS_TOKEN
   config.oauth_token_secret  = ACCESS_TOKEN_SECRET
   config.auth_method            = : oauth   #コロンの後に半角スペースわざと入れてます。(WPがバグるため)
end

client = TweetStream::Client.new
client.userstream do |status|
   puts " #{status.user.name} -> #{status.text}\n\n"
end

usersteamAPIを本当に中で叩いているのか知りませんが、実行したところほぼそれに近いものがバババーっと出てくるのを確認しました。

trackパラメータを渡してないので、自分のscreen_nameのstreamingでしょうか。
まぁ、これこそがほしかったものなので満足です。

で、どっちで書くことにしたか?

gemのtweetstreamはもう本当にお手軽で、たぶん専業主婦の方もお洗濯とお掃除の合間に実装できそうな手軽さでした。

ただ、今回ちょっとしたアプリを作るにあたっては net/https と OAuth を使って普通に実装する事としました。
まぁ、あまり深い理由はないのですが、前回書いた方はデバッグ中にソース見まくって”何をやっているのか把握できた” 事でしょうか。

gemはライブラリのソース見るの面倒なのと、twitterのAPIも仕様がたまに変わるので、はやり自分で臨機応変に対処できそうかなと。。 駄文でした。

tweetstreamが出力してくれるJSON

最後に、ただのstreamingAPIのサンプルですが、tweetstreamがちゃんとJSONとってきてるかdumpしてみたので、一応貼っておきます。
ループの中で pp status した結果です。

#0,
   :entities=>{:user_mentions=>[], :urls=>[], :symbols=>[], :hashtags=>[]},
   :in_reply_to_user_id=>nil,
   :place=>nil,
   :geo=>nil,
   :user=>
    {:profile_link_color=>"0084B4",
     :friends_count=>9,
     :notifications=>nil,
     :default_profile=>true,
     :time_zone=>"Irkutsk",
     :screen_name=>"ここにスクリーンネーム",
     :profile_sidebar_border_color=>"C0DEED",
     :geo_enabled=>false,
     :id_str=>"twitterの数字ID情報",
     :default_profile_image=>true,
     :profile_background_color=>"C0DEED",
     :verified=>false,
     :url=>nil,
     :following=>nil,
     :profile_sidebar_fill_color=>"DDEEF6",
     :profile_image_url=>
      "http://a0.twimg.com/sticky/default_profile_images/default_profile_1_normal.png",
     :is_translator=>false,
     :description=>nil,
     :profile_background_image_url=>
      "http://a0.twimg.com/images/themes/theme1/bg.png",
     :favourites_count=>0,
     :protected=>false,
     :profile_text_color=>"333333",
     :lang=>"ja",
     :follow_request_sent=>nil,
     :profile_background_image_url_https=>
      "https://si0.twimg.com/images/themes/theme1/bg.png",
     :profile_use_background_image=>true,
     :profile_image_url_https=>
      "https://si0.twimg.com/sticky/default_profile_images/default_profile_1_normal.png",
     :utc_offset=>32400,
     :listed_count=>0,
     :name=>"ユーザ名",
     :profile_background_tile=>false,
     :created_at=>"Tue Aug 28 02:04:42 +0000 2012",
     :followers_count=>3,
     :id=>ここもIDか?,
     :contributors_enabled=>false,
     :statuses_count=>3,
     :location=>""},
   :source=>"web",
   :id_str=>"ここのIDはなんやねん",
   :contributors=>nil,
   :in_reply_to_status_id_str=>nil,
   :truncated=>false,
   :text=>"test002", ここでtweet本文ですな
   :retweeted=>false,
   :favorite_count=>0,
   :lang=>"tl",
   :in_reply_to_screen_name=>nil,
   :in_reply_to_user_id_str=>nil,
   :filter_level=>"medium",
   :favorited=>false,
   :id=>333862516067291136,
   :created_at=>"Mon May 13 08:33:21 +0000 2013",
   :coordinates=>nil,
   :in_reply_to_status_id=>nil}>

以上でした。
おわり。

2013-05-14 | Posted in twitter APINo Comments » 


関連記事

Comment





Comment



*