0

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

它似乎仅适用于我代表调用的某些用户:我可以在 90 个用户的限制下迭代一些用户,但我迭代的一些用户将出错,Too many terms specified in query除非我严格限制我的调用(例如,一次 10 个用户)......但是这种严重的限制只会带来一个不同的问题 - 当我尝试为用户拨打这么多小电话时,我遇到了速率限制。

我正在使用 迭代我的数据库中的每个用户User.all.each do |u|,并且我正在为该块中的每个用户创建与 Twitter 的连接:

  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

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

  adding_to_list.each_slice(90) do |adding_ids|
    client.list_add_members(list_id, adding_ids)
    sleep 2
  end

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

4

1 回答 1

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

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

于 2013-01-16T20:34:09.040 回答