我正在尝试编写我的第一个twitter机器人,我特别希望它能在特定用户发布推文时进行回复。我不想搜索每个提到“taco”这个词的用户,我只想在一小部分人提到“taco”的时候搜索。例如,我的机器人只查找Bob和Sue的tweet,而不是Fred的tweet。我找不到我需要的东西。
发布于 2016-03-03 19:20:28
在Tweepy文档中,您可能应该使用API.user_timeline方法来读取特定用户的tweet。
API.user_timeline(user_id/screen_name)
返回从身份验证用户或指定用户发布的最新20个状态。
参数:
user_id -指定用户的ID
screen_name -指定用户的屏幕名称
发布于 2016-03-03 21:22:15
您可以通过user timeline应用编程接口端点来实现这一点;但是,根据您想要跟踪的术语和用户的数量,您必须担心速率限制(用户时间线端点速率限制非常高,300/app auth/15分钟,150/user auth/15 mins = 450/15分钟),以及您必须在某个时间间隔手动调用端点的事实。
另一种方法是使用流API端点,具体地说就是user stream。关注你想回复的每个人,然后为特定的短语创建一些规则。当关注的用户发布tweet时,他们应该流到您的用户流端点。你只需要有一个正在运行的监听器,并为被跟踪的用户/短语提供一些逻辑。
track = {
'taco': ['Bob', 'Sue'],
'salsa': ['John', 'Steve'],
'guacamole': ['Mary', 'Fred']
}你会子类化Tweepy的StreamListener
class TacoListener(tweepy.StreamListener):
def on_status(self, status):
# Note, I rolled my own Twitter API wrapper, and just had a glance at the Tweepy docs, so some of this syntax might be incorrect, change it as required
# I think Tweepy has syntax like: status.text; I'll just refer to the fields as they appear in the Twitter JSON payload
for k, v in track.items():
if k in status.get('text') and status.get('screen_name') in v:
tweet = ""
for name in v:
tweet += "@" + name
tweet += " are talking about " + k + "! Yum."
api.update_status(status=tweet)https://stackoverflow.com/questions/35770175
复制相似问题