2016-03-03 22 views
0

我正在尝试编写我的第一个Twitter机器人,而我特别希望它做的是在特定用户推文时回复。我不想搜索提到“taco”这个词的每个用户,而只想搜索一小部分人提到“taco”的时候。例如,我的机器人只搜索Bob和Sue提到的tweet,它提到'taco',但不包括来自Fred的推文。我没有找到我需要的东西。Twitter bot - 使用Tweepy回复特定用户

+0

你必须向我们展示你的代码。 –

回答

1

Tweepy文档中,您应该使用方法API.user_timeline来读取特定的用户推文。

API.user_timeline([USER_ID/SCREEN_NAME])

返回从 认证用户张贴或用户指定最近的20个状态。

参数
USER_ID - 指定用户
SCREEN_NAME的ID - 指定用户

1

你可以通过user timeline API端点做到这一点的网名;然而,取决于你想跟踪的条款和用户数量,你不得不担心速率限制(用户时间轴端点速率限制相当高,300/app auth/15 mins,150/user auth/15 mins = 450/15分钟),以及您必须在某个时间间隔手动呼叫端点的事实。

另一种方法是使用流式API端点,特别是user stream。跟随你想要回复的每个人,然后为特定的短语创建一些规则。随后用户发布推文,他们应该流到您的用户流端点。你只需要让一个监听器运行,并为被跟踪的用户/短语提供一些逻辑。

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) 
相关问题