トップ «前の日記(2007-04-20) 最新 次の日記(2007-04-26)» 編集

Route 477



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

LimeChat

使い方

nadokarcに、下のような感じで設定を書き加えてください。(※以下はtrunkでの例なんで、nadokaのバージョンによっては 書き方が違うかも)

  BotConfig = [
    { :name => :TwitterBot, :user => "myname", :pass => "asdffdsa", :ch => "#myname-twitter:*.jp" },