2012-05-21 66 views
0

下面是我的irc bot中的一段代码。它所做的就是检查特定帐户的新推文,然后在频道中回复它。 现在,有没有更好的方法来检查新的推文?我在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 

回答

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关键字。

+0

习语红宝石应该使用而'环do'然后'而TRUE'。 –

+1

<3更新了相应的答案 – shime

3

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

最适合这种东西的是使用Twitter's streaming api。这个api会向Twitter发送一个请求,然后这个请求会将任何新的数据推送给你的客户端。为此,有一个名为TweetStream的宝石。

实例:

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

我更新了第一个链接中的代码,即我的“twitter部分”的所有代码,tweetstream会如何处理它? – qwerty1911

+0

你的代码有点混乱,所以我不完全确定你在做什么。在上面的例子中,每个新推文都会调用一次该块(如果检出文档,有关于处理删除和错误的信息)。我假设你正在试图在你展示的代码中做什么。 –