【问题标题】:Twitter Bot with Tweepy - PythonTwitter Bot 与 Tweepy - Python
【发布时间】:2019-02-19 17:23:46
【问题描述】:

我一直在开发一个 Twitter Bot,它会在消息中回复带有“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

【问题讨论】:

  • 你没有使用 tweet 对象。您在定义之前引用了“回复”。
  • 我用 api.update_status() 试过了,但它给了我一个错误

标签: python bots tweepy


【解决方案1】:

如果您希望继续使用 r(egular)e(xpression) 模块,您可能想要import re,但据我所知,并且基于其他人在 stackoverflow 上的回答,Twitter 不支持使用 RE 搜索推文(目前)。我可以证明这一点,因为我每周都会收集推文,并且重新搜索失败。

尝试使用api.update_status( ... ) 而不是twitter.update_status( ... )。注意update_status()api 对象的一个​​方法。另外,请注意您的 id 未实例化或没有初始值。

这是我的 twitter 收集脚本中的一个 sn-p,用于进一步的上下文,在我的实现中,我使用 csvwriter 将推文行保存在 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。 (很遗憾我知道:/)。但这就是数据/推文预处理的用武之地。

我想说的另一点是,您无法检索推文获得的回复总数(我假设您像我一样使用标准 api(不是高级或企业级).. 见这个link 了解有关reply_count 推文功能的上下文。

对于您的情况,我建议使用以下代码来“搜索”您想要的推文,我使用 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

【讨论】:

  • 谢谢!现在我收到一个错误,文件“C:\Python27\twitterbotdad.py”,第 26 行,在 answer="@"+tweet.user.screen_name+" Hi" + c +",我爸爸!” UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 33: ordinal not in range(128) # 我应该如何解决这个问题?
  • 嗨@I.Ochsner 为迟到的回复道歉.. 我在标题部分添加了三行。这基本上将脚本的默认编码设置为 utf8。起初我不确定你为什么会收到这个错误,因为我在处理表情符号时通常会收到这个 UnicodeDecodeError ......但我注意到你的 c=tweet.text.encode('utf8') 行......等等,我包括了那 3 行.. 试试看.. :) /ogs
猜你喜欢
  • 2017-10-13
  • 1970-01-01
  • 2016-12-26
  • 2016-06-16
  • 2019-10-06
  • 2017-08-22
  • 1970-01-01
  • 2020-11-17
  • 2015-12-31
相关资源
最近更新 更多