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" },
[ツッコミを入れる]