StormFalcon32

TwitterBot

Jul 24th, 2019
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.21 KB | None | 0 0
  1. import tweepy
  2. import csv
  3. import datetime
  4.  
  5. c_key = "X"
  6. c_secret = "X"
  7.  
  8. auth = tweepy.AppAuthHandler(c_key, c_secret)
  9. api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)
  10.  
  11. num_tweets = 1
  12. prev_num = 1
  13. file_num = -1
  14.  
  15.  
  16. class Listener(tweepy.StreamListener):
  17.  
  18. def on_status(self, status):
  19. full_status = ""
  20. if hasattr(status, "retweeted_status"):
  21. if hasattr(status.retweeted_status, "extended_tweet"):
  22. full_status = status.retweeted_status.extended_tweet['full_text']
  23. else:
  24. full_status = status.retweeted_status.text
  25. elif hasattr(status, "extended_tweet"):
  26. full_status = status.extended_tweet["full_text"]
  27. else:
  28. full_status = status.text
  29. output_file([status.id, status.user.id, str(status.created_at), full_status])
  30.  
  31. def on_error(self, status_code):
  32. debug_out(str(status_code))
  33. return True
  34.  
  35.  
  36. def stream_tweets(keywords):
  37. stream_listener = Listener()
  38. stream = tweepy.Stream(auth=api.auth, listener=stream_listener, tweet_mode="extended")
  39. stream.filter(track=keywords, languages=['en'])
  40.  
  41.  
  42. def search_tweets(keywords):
  43. prev_ids = {}
  44. for keyword in keywords:
  45. prev_ids[keyword] = -1
  46. while True:
  47. statuses_left = False
  48. for keyword in keywords:
  49. statuses = None
  50. if prev_ids[keyword] >= 0:
  51. statuses = api.search(q=keyword, tweet_mode="extended", count="100", max_id=str(prev_ids[keyword] - 1))
  52. else:
  53. statuses = api.search(q=keyword, tweet_mode="extended", count="100")
  54. if statuses:
  55. for status in statuses:
  56. full_status = ""
  57. if hasattr(status, "retweeted_status"):
  58. full_status = status.retweeted_status.full_text
  59. else:
  60. full_status = status.full_text
  61. output_file([status.id, status.user.id, status.created_at, full_status])
  62. prev_ids[keyword] = status.id
  63. statuses_left = True
  64. if not statuses_left:
  65. break
  66.  
  67.  
  68. def get_user_tweets(username):
  69. page = 1
  70. while True:
  71. statuses = api.user_timeline(id=username, tweet_mode="extended", count="200", page=page)
  72. if statuses:
  73. for status in statuses:
  74. full_status = ""
  75. if hasattr(status, "retweeted_status"):
  76. full_status = status.retweeted_status.full_text
  77. else:
  78. full_status = status.full_text
  79. output_file([status.id, status.user.id, status.created_at, full_status])
  80. else:
  81. break
  82. page += 1
  83.  
  84.  
  85. def debug_out(value):
  86. with open("Debug.txt", "w") as debug_out:
  87. debug_out.write(value + " NumTweets: " + str(num_tweets))
  88. print(value + " NumTweets: " + str(num_tweets))
  89.  
  90.  
  91. def output_file(values):
  92. global num_tweets
  93. global prev_num
  94. global file_num
  95. new_file = False
  96. if file_num == -1:
  97. new_file = True
  98. file_num = 0
  99. if num_tweets >= (prev_num + 100000):
  100. file_num += 1
  101. prev_num = num_tweets
  102. new_file = True
  103. with open("Data" + str(file_num) + ".csv", "a", encoding="utf-8", newline="") as csv_out:
  104. writer = csv.writer(csv_out, delimiter=",", quotechar='"', quoting=csv.QUOTE_MINIMAL)
  105. if new_file:
  106. writer.writerow(["id", "user_id", "date", "text"])
  107. writer.writerow(values)
  108. debug_out(str(datetime.datetime.now()))
  109. num_tweets += 1
  110. new_file = False
  111.  
  112.  
  113. def reader(number):
  114. for x in range(number):
  115. with open("Data" + str(x) + ".csv", "r", encoding="utf-8") as csv_in:
  116. reader = csv.DictReader(csv_in)
  117. for line in reader:
  118. print(str(line["id"]))
  119. print(str(line["user_id"]))
  120. print(line["date"])
  121. print(line["text"])
  122. print()
  123.  
  124.  
  125. if __name__ == '__main__':
  126. keywords = ["gaming", "video games"]
  127. search_tweets(keywords)
  128. stream_tweets(keywords)
Advertisement
Add Comment
Please, Sign In to add comment