2016-08-19 61 views
0

我正在尋找一種方法來阻止我的Twitter機器人HappyBot回覆每個用戶的推文,並且只會回覆自上次代碼後的新推文被運行。例如,如果我在13:00推送機器人,它會在13:00回覆,但如果我在14:00再次發送推文,它會回覆13:00和14:00的推文。我當前運行的代碼:Tweepy twitter bot回覆新請求

twts = api.search(q="@1happybot make me happy") 

t = ['@1happybot make me happy', 
    '@1happybot Make me happy!', 
    '@1happybot make me happy.', 
    'Make me happy @1happybot', 
    'make me happy @1happybot'] 

for s in twts: 
    for i in t: 
     if i == s.text: 
      sn = s.user.screen_name 
      m = "@%s Don't worry, be happy!" % (sn) 
      s = api.update_status(m, s.id) 
      print ('yes') 

任何解決方案,想法或跳點都將不勝感激。希望一切都清楚。

+0

我不認爲有一種方式來獲得提及使用tweepy除了使用搜索就像你做的,[基於搜索可能違反Twitter的服務條款自動回覆(HTTPS://support.twitter .COM /用品/ 76915#回覆-提到)。你應該確認他們的支持,可以這樣做(他們可能會說是)。 –

回答

0

您正在使用哪個庫?我最好的猜測是,無論你使用什麼,都會暴露twitter返回的JSON響應。在這種情況下,您可以嘗試檢索推文的創建日期。見https://dev.twitter.com/rest/reference/get/search/tweets

s.created_at 

這應該給你的日期時間字符串。你的代碼也可能更加pythonic。看一看:

TRIGGERS = ('@1happybot make me happy', 
      '@1happybot Make me happy!', 
      '@1happybot make me happy.', 
      'Make me happy @1happybot', 
      'make me happy @1happybot') 

for tweet in tweets: 
    if tweet.text in TRIGGERS: 
     sn = tweet.user.screen_name 
     status_msg = '@{} Don't worry, be happy!'.format(sn) 
     api.update_status(status_msg, s.id) 
     print ('yes') 

命名的東西很辛苦,但我們應該盡我們所能,是描述性的,而不過於冗長。變量名稱應該表達他們的意圖。使用像「列表中的元素」的約定,而不是遍歷列表來查看元素是否在其中。在使用引號時保持一致。單引號用於您的字符串列表,但不是您設置的狀態信息。選擇一個,堅持下去。

TRIGGERS中的值是否會改變?如果是這種情況,請使用非易變類型(如元組),並通過使用全部大寫來傳達將其保持爲靜態的意圖。很多小東西。強烈建議您閱讀 - >http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html

0

我在這裏提供的解決方案是快速&髒,但它應該工作。基本上,它會將您回覆的最後一條推文的值存儲在文本文件中,以確保代碼停止時的持久性,並在您的代碼被調用時重新加載它。使用「自」選項時,它只會查找比您已經回覆的更早的推文,因此不會再發兩次推文。

f = open("lastTweet.txt","r") 
lastTweet = int(f.readline()) 
f.close() 

twts = api.search("@1happybot make me happy since:"+str(lastTweet)) 

t = ['@1happybot make me happy', 
    '@1happybot Make me happy!', 
    '@1happybot make me happy.', 
    'Make me happy @1happybot', 
    'make me happy @1happybot'] 

for s in twts: 
    for i in t: 
     if i == s.text: 
      sn = s.user.screen_name 
      m = "@%s Don't worry, be happy!" % (sn) 
      s = api.update_status(m, s.id) 
      print ('yes') 
      if s.id > lastId: 
       lastId = s.id 
       f = open("lastTweet.txt","w") 
       f.write(lastId) 
       f.close() 
+0

這很有趣,謝謝。我沒有想到這樣的解決方案。它運行良好,因爲它假定代碼將停止並開始,它會。我可以使用cron每隔幾分鐘給它打電話 – user3576482

+0

如果我的答案解決了您的問題,請點擊大複選框接受它? – Efferalgan