2007-04-21
■ [ruby] Ruby Twitter Gem by John Nunemaker
RubyからTwitterにアクセスするためのライブラリをrubyforgeにて発見。
twit = Twitter::Base.new('emailaddress', 'password') # You and Your Friends Timeline twit.timeline(:user).each do |s| puts s.text, s.user.name end # Your Friends twit.friends.each do |u| puts u.name, u.status.text end
こんなんだそうです。しかしインスタンス生成がTwitter::Base.newってのは覚えにくい! twit = Twitter.login(user, pass) とかなんかあるだろう…。
メモ
- サンプルとして、コマンドラインツールが付いてきます。twitter post hoge で送信、twitter timeline で受信。
- user/passは~/.twitterから読み込むこともできるようです。
- Hpricot 0.5+と相性が悪いようです(Hpricotのバグ)。ソース
■ [nadoka] twitterの新着をnadoka経由でIRCに表示
twitterの新着を表示するnadoka bot(twitterbot.nb)を書きました。 まだ受信専用です。
require 'net/http' require 'kconv' require 'rexml/document' class Twitter def initialize(user, pass) @user, @pass = user, pass @req = Net::HTTP::Get.new("/statuses/friends_timeline.xml") @req.basic_auth @user,@pass @most_recent_id = nil end # timelineを読み込む。前回呼ばれた以降に更新されたstatusを配列で返す。 def timeline xml = Net::HTTP.start('twitter.com',80) {|http| http.request(@req).body } doc = REXML::Document.new(xml) results = [] doc.each_element('/statuses/status') do |elem| id = elem.elements['id'].text.to_i time = Time.parse(elem.elements['created_at'].text) text = elem.elements['text'].text user = elem.elements['user'].elements['screen_name'].text if @most_recent_id.nil? || id > @most_recent_id results << [id, time, text, user] end end @most_recent_id = results[0][0] unless results.size == 0 results.reverse end end class TwitterBot < Nadoka::NDK_Bot def bot_initialize @tw = Twitter.new(@bot_config[:user], @bot_config[:pass]) @ch = @bot_config[:ch] end def on_timer t @tw.timeline.each do |id, time, text, user| send_notice @ch, "<#{user}> #{text.gsub(/\n/," ").tojis}" end end end
使い方
nadokarcに、下のような感じで設定を書き加えてください。(※以下はtrunkでの例なんで、nadokaのバージョンによっては 書き方が違うかも)
BotConfig = [ { :name => :TwitterBot, :user => "myname", :pass => "asdffdsa", :ch => "#myname-twitter:*.jp" },