2015-11-21 3 views
0

Итак, этот следующий код - это то, что я сделал, но он отвечает только на существующие твиты, я пытался запустить его в цикле, но он очень быстро ударил ограничения api, я мог бы задерживать время, но я хочу что-то более эффективное и быстро, я слышал о работе с потоком твитов, я не понимаю, как это работает я новичок в кодировании, anyawy вот код, который попадает предел апи очень быстроКак автоматически отвечать на живые твиты, содержащие ключевое слово в tweepy?

import tweepy 
from random import randint 
from time import sleep 

CONSUMER_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxx' 
CONSUMER_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxx' 
ACCESS_TOKEN = 'xxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' 
ACCESS_TOKEN_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxx' 
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) 
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET) 
api = tweepy.API(auth) 

num=0 
count=0 
temp=0 

while (count < 100): 

    firstTweet = api.search("dogs")[0] 
    if firstTweet.id==temp: 
     sleep(randint(10,20)) 
     continue 

    rid=firstTweet.id 
    rsn=firstTweet.user.screen_name 

    m="@%s If you love dogs, follow us" % (rsn) 
    api.update_status(status=m, in_reply_to_status_id=rid) 
    count=count+1 
    print(count) 
    temp = firstTweet.id 

в основном он ищет твит о собаках, берет верхнюю часть твита, отвечает на нее и сохраняет твитовую идентификатор в temp, поэтому цикл продолжает работать, и если верхний твит все тот же, он не будет отвечать после его изменения (то есть есть новый твит) он ответит, но этот код работает только 5 минут, а затем предел предел есть ли другой способ сделать это?

ответ

0

Если вы делали поисковые запросы, вам было бы лучше использовать проверку подлинности приложения (oauth2), что позволит вам 450 поисковых запросов за 15 минут.

Однако вы также делаете запросы о статусе обновлений, требующие аутентификации с использованием аутентификации пользователя (oauth1), как вы это делаете в своем примере. Это позволяет делать 180 поисковых запросов за 15 минут.

Но, большая проблема - это запрос статуса обновления. Twitter не публикует лимит ставок для этого запроса, потому что это облегчило бы спамерам делать свою работу.

Ваш единственный референт должен проверить, возвращает ли Twitter ошибку 403, что означает, что вы достигли своего предела. Затем подождите 15 минут, прежде чем повторять попытку. Вы должны быть осторожны, слишком часто превышая этот предел; в противном случае Twitter будет считать, что вы спам.

0

В вашем ответе вы найдете пару ошибок. Прежде всего, если вы используете заявление

firstTweet = api.search("dogs")[0] 

вы, по сути делаете вызов API, но в конечном итоге экономии только первый твит возвращенный поиск API. Если вы проверяете документацию по API Twitter (https://dev.twitter.com/rest/reference/get/search/tweets), при каждом вызове api.search() возвращается по умолчанию 15 твитов. Вот почему вы исчерпали свои пределы.

Теперь исправить было бы использование tweepy Cursor. Пример того же можно найти here. Кроме того, убедитесь, что вы используете параметры since_idв запросе API поиска, чтобы получить новый набор твитов при следующем вызове search. Кроме того, в каждом вызове вы получите одинаковый набор твитов. Это очень хорошо объясняется в разделе комментариев указанной ссылки.