2016-03-03 46 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) 
相關問題