Python Tweepy多重身份验证处理程序

Python Tweepy多重身份验证处理程序,python,oauth,tweepy,Python,Oauth,Tweepy,我正在使用,我需要使用它在2017-01-31和2017-02-01之间获取推文。我的代码可以工作,由于twitter的速率限制,我必须在多个auth处理程序之间切换,以便能够处理与前面提到的日期一样遥远的tweet。我正在使用,但在达到速率限制并尝试使用api.auth_idx+=1切换到下一个身份验证处理程序后,我收到以下错误: File "build/bdist.macosx-10.11-intel/egg/tweepy/api.py", line 45, in auth_idx Inde

我正在使用,我需要使用它在
2017-01-31
2017-02-01
之间获取推文。我的代码可以工作,由于twitter的速率限制,我必须在多个auth处理程序之间切换,以便能够处理与前面提到的日期一样遥远的tweet。我正在使用,但在达到速率限制并尝试使用
api.auth_idx+=1切换到下一个身份验证处理程序后,我收到以下错误:

File "build/bdist.macosx-10.11-intel/egg/tweepy/api.py", line 45, in auth_idx
IndexError: Index out of bounds
主代码如下所示:

oauth_keys = [["consumer_key_1", "consumer_secret_1", "access_token_1", "access_token_secret_1"], ["consumer_key_2", "consumer_secret_2", "access_token_2", "access_token_secret_2"]]

auths = []
for consumer_key, consumer_secret, access_key, access_secret in oauth_keys:
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_key, access_secret)
    auths.append(auth)

api = tweepy.API(auths, monitor_rate_limit=True)

while True:
    try:
        for tweet in tweepy.Cursor(api.search, q='bitcoin', since=datetime.date(2017, 1, 31), lang='en').items(3000):
            ...
    except tweepy.TweepError as e:
        api.auth_idx += 1
        continue
我不知道我做错了什么。非常感谢您的帮助

这是解决方案

错误是索引对象本身。我必须创建一个变量作为索引:

switch += 1
api.auth_idx = switch
下面是完整的代码,以防任何人尝试构建相同的应用程序:

oauth_keys = [
    ["consumer_key_1", "consumer_secret_1", "access_token_1", "access_token_secret_1"], 
    ["consumer_key_2", "consumer_secret_2", "access_token_2", "access_token_secret_2"]
    ]

auths = []
for consumer_key, consumer_secret, access_key, access_secret in oauth_keys:
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_key, access_secret)
    auths.append(auth)

# api
api = tweepy.API(auths)
currentCursor = tweepy.Cursor(api.search, q = 'bitcoin', since='2017-02-01', until='2017-02-02', lang='en')
c = currentCursor.items()

switch = 0
api.auth_idx = switch
tweets = []
early_dt_val = datetime.datetime.strptime('2017-01-31 22:34:48', '%Y-%m-%d %H:%M:%S')
later_dt_val = datetime.datetime.strptime('2017-02-01 01:25:30', '%Y-%m-%d %H:%M:%S')
maxId = 0

while True:
    try:
        #for tweet in tweepy.Cursor(api.search, q='bitcoin', since=datetime.date(2017, 1, 31), lang='en').items(3000)
        for tweet in c:
            tweets.append(tweet)
            maxId = tweet.id

        for tweet in reversed(tweets):
            tweetTime = tweet.created_at
            if tweetTime < later_dt_val and tweetTime > early_dt_val:
                print('Date: ' + str(tweet.created_at))
                print('Tweet: ' + tweet.text)

    except tweepy.TweepError as e:
        print e
        print "---------------------------Rate limit exceeded.---------------------------"
        print "switching keys..."
        switch += 1
        if switch > 4:
            print "Limit reached"
            break
        else:
            api.auth_idx = switch           # naechster Key
            currentCursor = tweepy.Cursor(api.search, q='bitcoin', since='2017-02-01', until='2017-02-02', lang='en', max_id=maxId)
oauth\u键=[
[“消费者密钥1”、“消费者密钥1”、“访问令牌1”、“访问令牌密钥1”],
[“消费者密钥2”、“消费者秘密2”、“访问令牌2”、“访问令牌秘密2”]
]
auths=[]
对于用户密钥、用户密钥、访问密钥、oauth密钥中的访问密钥:
auth=tweepy.OAuthHandler(使用者密钥,使用者密钥)
授权设置访问令牌(访问密钥、访问密钥)
附加(auth)
#原料药
api=tweepy.api(auths)
currentCursor=tweepy.Cursor(api.search,q='bitcoin',自2017-02-01',至2017-02-02',lang='en')
c=currentCursor.items()
开关=0
api.auth_idx=开关
tweets=[]
early_dt_val=datetime.datetime.StrTime('2017-01-31 22:34:48','%Y-%m-%d%H:%m:%S'))
later_dt_val=datetime.datetime.strtime('2017-02-01 01:25:30','%Y-%m-%d%H:%m:%S')
maxId=0
尽管如此:
尝试:
#对于tweepy.Cursor(api.search,q='bitcoin',since=datetime.date(2017,1,31),lang='en').items(3000)中的tweet
对于c语言中的tweet:
tweets.append(tweet)
maxId=tweet.id
对于反向推文(推文):
tweetTime=tweet.created_在
如果tweetTimeearly\u dt\u val:
打印('Date:'+str(tweet.created_at))
打印('Tweet:'+Tweet.text)
除tweepy.TweepError为e外:
打印e
打印“-----------------------------超出速率限制。----------------------------”
打印“切换键…”
开关+=1
如果开关>4:
打印“已达到限制”
打破
其他:
api.auth_idx=开关#naechster键
currentCursor=tweepy.Cursor(api.search,q='bitcoin',自='2017-02-01',至='2017-02-02',lang='en',max_id=maxId)

在我看来很不错,尽管您可能只想用下面的阻塞/等待参数初始化API对象,而不是自己处理切换:
API=tweepy.API(auths,retry\u count=3,retry\u delay=5,retry\u errors=set([401404,500,503]),monitor\u rate\u limit=True,wait\u rate\u limit=True)
任何一种方法都可以。