Twitter-бот с Tweepy - Python - PullRequest
       47

Twitter-бот с Tweepy - Python

0 голосов
/ 15 сентября 2018

Я работал над ботом Twitter, который отвечает людям с "im" в их сообщении "Привет ___, я папа!".

Раньше у меня это работало, но потом мой компьютер умер и потерял все свои файлы.

Я написал оригинального бота пару лет назад, и некоторое время не смотрел на Tweepy.

Я был почти уверен, что разобрался на 100% - и никаких ошибок не появилось, но бот не работает, и я не знаю почему.

Я могу просто войти в систему, но что-то не так с фактической отвечающей частью.

Может ли кто-нибудь мне помочь?

import tweepy as tt
import time


#login credentials twitter account
consumer_key = '-NOT GOING TO PUT THE ACTUAL KEY IN-'
consumer_secret = '-NOT GOING TO PUT THE ACTUAL KEY IN-'
access_token = '-NOT GOING TO PUT THE ACTUAL KEY IN-'
access_secret = '-NOT GOING TO PUT THE ACTUAL KEY IN-'

#login
auth = tt.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)
api = tt.API(auth)
search_results = api.search("r'\bi\'?m\s+(.*)',re.IGNORECASE,text", count=100)

user = api.me()
print(user.name)


#reply
for tweet in search_results:

# answer to the hashtag tweet
    if len(reply) > 0:
        c=message.content
        c=c.replace("im ","")
        answer="@"+user+" Hi " + c + ", I'm Dad!"
        print ("Reply:",answer)
# tweet and pause not to stress twitter
        twitter.update_status(status=answer,in_reply_to_status_id=id)
        time.sleep(300) #every 5 minutes

1 Ответ

0 голосов
/ 15 сентября 2018

Если вы хотите продолжить использовать модуль r (egular) e (xpression), вам может потребоваться import re, но, насколько я знаю, а также на основе ответов других здесь, на stackoverflow, Twitter не поддерживает поиск твитов с использованием RE (на данный момент). Я могу засвидетельствовать это, так как я собираю твиты еженедельно, а повторные поиски заканчиваются неудачей.

попробуйте использовать api.update_status( ... ) вместо twitter.update_status( ... ). обратите внимание, что update_status() является методом объекта api. Также обратите внимание, что ваш id не создан или не имеет начального значения.

Вот фрагмент из моего скрипта сбора в твиттере для дальнейшего контекста, в моей реализации я сохраняю строки твитов в csv, используя csvwriter.

for tweet in tweepy.Cursor(api.search, q='twitter').items():  
    csvWriter.writerow([tweet.text.encode('utf8'),
                        tweet.user.screen_name, tweet.created_at,
                        tweet.retweet_count, tweet.favorite_count,
                        tweet.user.location.encode('utf8')], tweet.user.id)

Как и вы, я также пытался использовать RE несколько лет назад (и совсем недавно), я мог подтвердить, что RE еще не поддерживается поиском / запросами в Твиттере. (Грустно, я знаю: /). Но здесь начинается предварительная обработка данных / твитов.

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

для вашего случая я бы предложил следующий код для «поиска» ваших предполагаемых твитов, я использовал курсор tweepy для выполнения api.search, за которым следует q (uery). значение запроса в основном похоже на строку поиска в твиттере. хотя мое решение на самом деле не является вашим решением, вы можете воспользоваться моим кодом, если хотите.

import tweepy as tt
import time
import sys
reload(sys)
sys.setdefaultencoding('utf8')


#login credentials twitter account
consumer_key = '-NOT GOING TO PUT THE ACTUAL KEY IN-'
consumer_secret = '-NOT GOING TO PUT THE ACTUAL KEY IN-'
access_token = '-NOT GOING TO PUT THE ACTUAL KEY IN-'
access_secret = '-NOT GOING TO PUT THE ACTUAL KEY IN-'

#login
auth = tt.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)
api = tt.API(auth)
search_query = "hi I'm Dad"
user = api.me()
print(user.name)

max_tweets = 100

for tweet in tweepy.Cursor(api.search, q=search_query).items(max_tweets):
    c=tweet.text.encode('utf8')
    c=c.replace("im ","")
    answer="@"+tweet.user.screen_name+" Hi " + c + ", I'm Dad!"
    print ("Reply:",answer)
    api.update_status(status=answer,in_reply_to_status_id=tweet.id)
    time.sleep(300) #every 5 minutes

/ OGS

...