检查新推文的最佳方法

时间:2012-05-21 13:56:43

标签: ruby twitter

来自我的irc机器人的一段代码。它的作用是检查特定帐户的新推文,然后在频道中回复。 现在,有没有更好的方法来检查新推文?对于我在1..999999999中的感觉有点不合理,而ddos' y。

tweetzsr = {}
xzsr = {}
zsr = {}

on :message, ".start zsr" do |m|
  if zsr[m.channel] == true
    m.reply "already doing it.."
  else
    m.reply "ok."
    zsr[m.channel] = true
    for i in 1..99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
      sleep 60
      puts "#{xzsr[m.channel]} = x, tweetzsr = #{tweetzsr[m.channel]}"
      tweetzsr[m.channel] = Twitter.user_timeline("twiitterracount").first.text
      if xzsr[m.channel] == tweetzsr[m.channel]
        nil
      else
        m.reply "#{tweetzsr[m.channel]} - via twitter feed"
        xzsr[m.channel] = tweetzsr[m.channel]
      end
    end
  end
end

2 个答案:

答案 0 :(得分:3)

首先,对于无限循环,使用loop方法。

最好的办法就是使用Twitter's streaming api。这个api会向Twitter发送一个请求,然后Twitter会将任何新数据推送到您的客户端。为此,有一个名为TweetStream的宝石。

使用示例:

TweetStream::Client.new.userstream do |status|
  m.reply "#{status.text} - via twitter"
end

答案 1 :(得分:0)

这是你的无限循环吗?

将其改为此以提高理智

loop do
  sleep 60
  newtweet[m.channel] = Twitter.user_timeline("twitteracount").first.text
  next if oldtweet[m.channel] == newtweet[m.channel]
  m.reply "#{newtweet[m.channel]} - via twitter"
  oldtweet[m.channel] = newtweet[m.channel]
end

您错过了两个end个关键字。