为什么我在Twitter API 100用户限制内收到“查询中指定的条款太多”?

时间:2013-01-13 18:38:14

标签: ruby-on-rails twitter twitter-gem

我正在使用list/members/create_alllist/members/destroy_all,它们都声称每次通话限制为100个用户。我将我的呼叫限制为90个用户,但我仍然间歇性地收到Too many terms specified in query错误...当我将呼叫限制为40个用户或更少时,我甚至会间歇性地收到此错误。

它似乎仅适用于我代表以下方进行调用的某些用户:我可以使用我的90个用户限制迭代某些用户,但我迭代的一些用户将使用{{1除非我严格限制我的电话(例如,一次只有10个用户)......但是这个严重的限制只会出现一个不同的问题 - 当我尝试为用户拨打这么多小电话时,我点击了速率限制。

我正在使用Too many terms specified in query在我的数据库中迭代每个用户,并且我正在为该块中的每个用户创建一个与Twitter的连接:

User.all.each do |u|

这是我用来从列表中删除用户的代码:

  client = Twitter::Client.new(
    :consumer_key => TWITTER_CONSUMER_KEY,
    :consumer_secret => TWITTER_CONSUMER_SECRET,
    :oauth_token => u.twitter_token,
    :oauth_token_secret => u.twitter_secret
  )

此代码将用户添加到列表中:

  removing_from_list.each_slice(90) do |remove_ids|
    client.list_remove_members(list_id, remove_ids)
    sleep 2
  end

我在使用Twitter gem以及直接使用Rested(Mac REST客户端)访问Twitter API时遇到过这个问题。

1 个答案:

答案 0 :(得分:0)

我还在REST API v1.1 Developer Discussions中发布了这个问题,我收到了关于list_add_members部分问题的建议。该建议是为了确保列表不超过500个成员,并且用户没有20多个列表。鉴于我发现了什么,我不确定它有多相关,但它仍然是一个很好的建议。

我解决此问题的方法是删除&如果我遇到错误,重新创建列表本身:

  removing_from_list.each_slice(99) do |remove_ids|
    begin
      client.list_remove_members(list_id, remove_ids)
      sleep 2
    rescue => error
      if error == "Too many terms specified in query"
        client.list_destroy(list_id)
        client.list_create('ListName', :description => 'List Description')
        list_id = client.list('ListName').id
      end
    end
  end

完成此操作后,列表按预期运行。此外,我不必多次删除/重新创建列表。因此,我非常有信心声明它是列表本身的问题,或者是在删除/重新创建之前碰巧驻留在列表中的用户。