问题描述
我一直在开发一个Twitter Bot,该机器人在邮件中用“嗨___,我是爸爸!”回复“ im”的人。
我以前曾经让它工作,但是后来我的电脑死了,丢失了所有文件。
几年前,我写了原始的bot,但有一段时间没看过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楼
如果您希望继续使用r(egular)e(xpression)模块,则可能要import re
但据我所知,并且根据其他有关stackoverflow的回答,Twitter不支持使用来搜索推文RE(目前)。
我可以证明这一点,因为我每周都收集推文,而重新搜索失败。
尝试使用api.update_status( ... )
代替twitter.update_status( ... )
。
请注意, update_status()
是api
对象的方法。
另外,请注意,您的id
未实例化或没有初始值。
这是我的Twitter收集脚本的一个片段,用于进一步的上下文,在我的实现中,我使用csvwriter将几行tweet保存在一个csv中。
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,我可以确认Twitter搜索/查询尚不支持RE。 (很遗憾,我知道:/)。 但这就是数据/ tweet预处理的来源。
我想提出的另一点是,你不能检索回复鸣叫得到的总数(我假设你像我一样正在使用标准的API(没有溢价或企业)..看到这个了有关reply_count tweet功能的上下文。
对于您的情况,我建议使用以下代码“搜索”您想要的推文,我使用tweepy的光标执行api.search,然后输入q(uery)。 查询值基本上类似于Twitter的“搜索”栏。 尽管我的解决方案实际上不是您的解决方案,但是您可以根据需要从我的代码中进行学习。
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