-
Notifications
You must be signed in to change notification settings - Fork 2
/
twitter_api.py
77 lines (60 loc) · 2.86 KB
/
twitter_api.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import tweepy
import sys
import jsonpickle
import os
import datetime
class TwitterApi:
def __init__(self):
self.consumer_key = ""
self.consumer_secret = ""
self.access_token = ""
self.access_token_secret = ""
self.LoadCredentials()
def LoadCredentials(self):
# Read twitter credentials
with open('.credentials/twitter-credentials') as tw_api_credentials:
lines = tw_api_credentials.readlines();
self.consumer_key = lines[0].split(':')[1].strip()
self.consumer_secret = lines[1].split(':')[1].strip()
self.access_token = lines[2].split(':')[1].strip()
self.access_token_secret = lines[3].split(':')[1].strip()
auth = tweepy.OAuthHandler(self.consumer_key, self.consumer_secret)
auth.set_access_token(self.access_token, self.access_token_secret)
self.api = tweepy.API(auth, wait_on_rate_limit = True, wait_on_rate_limit_notify = True)
if (not self.api):
print("Authentication failed")
sys.exit(-1)
def SearchTweets(self, query, language, count, storeFetchedTweets):
public_tweets = []
maxTweets = count
if count < 101:
tweetsPerQuery = count
else:
tweetsPerQuery = 100
fileName = 'tweets-' + str(datetime.datetime.now().strftime("%Y-%m-%d %H:%M")) + '.json' # We will store tweets in this file and retrieve all of them after we collect them all
tweetCount = 0 # Number of tweets we retrieved
max_id = -1L
with open(fileName, 'w') as f:
while tweetCount < maxTweets:
new_tweets = []
if maxTweets - tweetCount < 100:
tweetsPerQuery = maxTweets - tweetCount
try:
new_tweets = self.api.search(q=query, lang=language, count=tweetsPerQuery)
if not new_tweets:
print("No more tweets found.")
break
for tweet in new_tweets:
if storeFetchedTweets:
f.write(jsonpickle.encode(tweet._json, unpicklable=False) + '\n')
public_tweets.append(tweet)
tweetCount += len(new_tweets)
max_id = new_tweets[-1].id
print("Fetched " + str(len(public_tweets)) + " tweets in total.")
except (tweepy.error.TweepError):
if (len(public_tweets) > 0):
print("ERROR: Twitter API limit was reached.")
else:
print("Please verify your Twitter API keys, it seems they're wrong.")
sys.exit(-1)
return public_tweets