RubyでTwitterを操作する方法

RubyからTwitterを操作する方法をまとめました。

はじめに

TwitterAPIをwrapしたライブラリは以下の2つがあるようです

どちらがいいかは正直わかりません。パッと見twitter gemのほうがとっつきやすかったので twitter gem を使いました。以下、twitter gem の使い方です。

情報元

データ構造などはここで確認します。Twitter用語もちゃんと押さえておきましょう。

ライブラリ名が「twitter」そのままですが紛らわしいので、ここでは twitter gem と書いておきます。

インストール

gemで一発です。

%gem install twitter
When you HTTParty, you must party hard!
Successfully installed rubyforge-1.0.3
Successfully installed hoe-2.0.0
Successfully installed ruby-hmac-0.3.2
Successfully installed oauth-0.3.4
Successfully installed mash-0.0.3
Successfully installed crack-0.1.2
Successfully installed httparty-0.4.3
Successfully installed twitter-0.6.11

「When you HTTParty, you must party hard!」ここは笑うところ、たぶん。

使い方

下位互換なくバージョンアップしてるので、gemでバージョンを確認してください。ここでは「twitter-0.6.11」です。また、日本語を使う場合は文字コードUTF-8にします。

モジュールのロード
require 'rubygems'
require 'twitter'
Search API

Sarch, Trendに関してはWebに例が載っていて、そのままで動作します。

  • helloを含むつぶやきを検索
Twitter::Search.new('hello').each do |result|
  puts result.text
end
  • トレンドキーワードを取得
Twitter::Trends.current.each {|trend|
  puts trend.name
}
REST API

REST APIを使った一連の処理をいかに示します。
ログイン認証はOAuthを使う方法もありますが、ここではHTTP Authを使います。

#ログイン認証
httpauth = Twitter::HTTPAuth.new("user", "password")
twit = Twitter::Base.new(httpauth)

#タイムラインを取得
twit.friends_timeline.each {|status|
  p status.text + status.user.screen_name
}

#新規tweat
msg = "Rubyの世界からこんにちは"
twit.update(msg)
queryパラメータの指定方法

パラメータはハッシュで渡します。

twit.followers({'page' => '2'}).each {|follower|
  p follower.screen_name
}

ちなみに、本家のマニュアルに、

100 at a time

と書いてありますが、98しか取れなかった。。。
なので、全件取得したい場合の継続条件には使えません。

機能追加

mentions (@レスが付いたtweet) を取得するAPIが実装されてなかったので追加しました。わかりやすい実装でよかった^^

module Twitter
  class Base
    def mentions(query={})
      perform_get('/statuses/mentions.json', :query => query)
    end
  end
end

メモ

  • 一時間当たり100リクエストまで、という制限があるのでテスト時にあまり頻繁にアクセスするとエラーになってしまいます。頻繁にアクセスしたい場合は、テスト用のアカウントを別につくっておいたほうがいいかも知れませんね。
 (400): Bad Request - Rate limit exceeded. Clients may not make more than 100 requests per hour. (Twitter::RateLimitExceeded)

以上です。