Advertisement
dc5553

Twitter Bot for Baby name stats

Jan 14th, 2017
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.14 KB | None | 0 0
  1. import twitter
  2. import babynames #get it here http://pastebin.com/ZL0VYWV7
  3. from time import sleep, gmtime, strftime
  4.  
  5. class BabyBotError(Exception):
  6.     def __init__(self, message):
  7.         super(BabyBotError, self).__init__(message)
  8.  
  9. def main():
  10.     ckey ="ENTER YOUR OWN"
  11.     csecret ="ENTER YOUR OWN"
  12.     mytoken="ENTER YOUR OWN"
  13.     tsecret="ENTER YOUR OWN"
  14.  
  15.     bna = babynames.BabyNameAnalyzer()
  16.     api = twitter.Api(consumer_key=ckey,consumer_secret=csecret,access_token_key=token,access_token_secret=tsecret)
  17.     namecounter= {}
  18.     myfollowers = api.GetFollowers()
  19.     myfriends = api.GetFriends()
  20.    
  21.     while True:
  22.         try:
  23.             for follower in myfollowers:
  24.                 if follower.id not in [myfriend.id for myfriend in myfriends]:
  25.                     try:
  26.                         api.CreateFriendship(follower.id)                  
  27.                     except Exception as e:
  28.                         if e[0][0]["code"] == 160:
  29.                             print strftime("%Y-%m-%d %H:%M:%S", gmtime()), "Error code {}-{}".format(e[0][0]["code"], e[0][0]["message"])
  30.                             myfriends.append(follower)
  31.                             print "[?] Fixed now? ", follower in myfriends
  32.                             break
  33.             print "[Zzz] Dealing with friends can be exhausting. Time for a 15 second nap!"
  34.             sleep(15)
  35.            
  36.             for message in api.GetDirectMessages():
  37.                 try:
  38.                     if len(message.text.split(" ")) == 2 and message.text.split(" ")[1] not in namecounter:
  39.                         gender = message.text.split(" ")[0]
  40.                         name = message.text.split(" ")[1]
  41.                         namecounter[name] = 1
  42.                         bna.plotName(gender, name)
  43.                         mymessage = "@{0} Here are stats for the {1}'s name {2}.".format(message.sender.screen_name,gender,name)
  44.                         print "[-] Posting the following message: ", mymessage
  45.                         api.PostUpdate(mymessage,'{}.png'.format(name))
  46.                         api.DestroyDirectMessage(message.id)
  47.                     elif len(message.text.split(" ")) == 2 and message.text.split(" ")[1] in namecounter:
  48.                         namecounter[message.text.split(" ")[1]]+=1
  49.                         api.DestroyDirectMessage(message.id)
  50.                     else:
  51.                         api.DestroyDirectMessage(message.id)
  52.                         print strftime("%Y-%m-%d %H:%M:%S", gmtime()), "[!] Baby bot error"
  53.                         raise BabyBotError("Malformed request")
  54.                        
  55.                 except KeyError:
  56.                     try:
  57.                         api.PostUpdate("@{0} {1} was not found in the data".format(message.sender.screen_name,name))
  58.                     except Exception:
  59.                         api.DestroyDirectMessage(message.id)
  60.                    
  61.                 except Exception as e:
  62.                     try:
  63.                         print strftime("%Y-%m-%d %H:%M:%S", gmtime()), "Error code {}-{}".format(e[0][0]["code"], e[0][0]["message"])
  64.                     except:
  65.                         print strftime("%Y-%m-%d %H:%M:%S", gmtime()), e
  66.            
  67.                 print strftime("%Y-%m-%d %H:%M:%S", gmtime()),"Current names recorded are:\n    "  
  68.                 for k,v in namecounter.items():
  69.                     print "The name {} has been requested {} times".format(k, v)
  70.             print "[Zzz] Napping for 60 Seconds. Will check for new messages soon!"
  71.             sleep(60)
  72.         except Exception as e:
  73.             try:
  74.                 print strftime("%Y-%m-%d %H:%M:%S", gmtime()), "Error code {}-{}".format(e[0][0]["code"], e[0][0]["message"])
  75.                 if e[0][0]["code"] == 88:
  76.                     print "[Zzz] Twitter thinks im interfacing too often! Napping for 300 seconds"
  77.                     sleep(300)
  78.             except:
  79.                 print strftime("%Y-%m-%d %H:%M:%S", gmtime()), e
  80.                
  81.            
  82. if __name__ == "__main__":
  83.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement