0

これが私のircボットからのコードです。特定のアカウントで新しいツイートをチェックし、チャネルで返信します。さて、新しいツイートをチェックするためのより良い方法はありますか?1..999999999のiの場合、少し最適ではないと感じ、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
4

2 に答える 2

3

まず、無限ループの場合はこのloopメソッドを使用します。

この種のことに最適なのは、TwitterのストリーミングAPIを使用することです。このAPIはTwitterに単一のリクエストを送信し、Twitterは新しいデータをクライアントにプッシュします。そのためにTweetStreamと呼ばれる宝石があります。

使用例:

TweetStream::Client.new.userstream do |status|
  m.reply "#{status.text} - via twitter"
end
于 2012-05-21T14:07:50.970 に答える
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

end2つのキーワードがありません。

于 2012-05-21T14:07:49.050 に答える