-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathtest.py
104 lines (80 loc) · 3.11 KB
/
test.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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import re
import tweepy
import json
from secrets import *
from tweepy import OAuthHandler
from textblob import TextBlob
class TwitterClient(object):
'''
Generic Twitter Class for sentiment analysis.
'''
def __init__(self):
'''
Class constructor or initialization method.
'''
# keys and tokens from the Twitter Dev Console
consumer_key = TWITTER_CONSUMER_KEY
consumer_secret = TWITTER_CONSUMER_SECRET
access_token = TWITTER_ACCESS_TOKEN
access_token_secret = TWITTER_ACCESS_TOKEN_SECRET
# attempt authentication
try:
# create OAuthHandler object
self.auth = OAuthHandler(consumer_key, consumer_secret)
# set access token and secret
self.auth.set_access_token(access_token, access_token_secret)
# create tweepy API object to fetch tweets
self.api = tweepy.API(self.auth)
except:
print("Error: Authentication Failed")
def clean_tweet(self, tweet):
'''
Utility function to clean tweet text by removing links, special
characters using simple regex statements.
'''
return ' '.join(re.sub("(@[A-Za-z0-9]+)|([^0-9A-Za-z \t]) |" +\
"(\w+:\/\/\S+)", " ", tweet).split())
def get_tweet_sentiment(self, tweet):
'''
Utility function to classify sentiment of passed tweet
using textblob's sentiment method
'''
# create TextBlob object of passed tweet text
analysis = TextBlob(self.clean_tweet(tweet))
# set sentiment
if analysis.sentiment.polarity > 0:
return analysis.sentiment.polarity
elif analysis.sentiment.polarity == 0:
return analysis.sentiment.polarity
else:
return analysis.sentiment.polarity
def get_tweet_polarity(self, tweet):
analysis = TextBlob(self.clean_tweet(tweet))
return analysis.sentiment.polarity
def get_tweets(self, query, lang='en', count=100):
'''
Main function to fetch tweets and parse them.
'''
# sentiment scores (+, n, -)
scores = [[0, 0], 0, [0, 0]]
try:
# call twitter api to fetch tweets
fetched_tweets = [tweet._json for tweet in
tweepy.Cursor(self.api.search, q=query,
count=count, lang=lang).items(count)]
# parsing tweets one by one and get its polarity
for tweet in fetched_tweets:
score = self.get_tweet_polarity(tweet['text'])
if score > 0:
scores[0][0] += 1 # increment positive
scores[0][1] += score # add score (+)
elif score == 0:
scores[1] += 1 # number of neutral ++
else:
scores[2][0] += 1 # increment negative
scores[2][1] += score # add score (-)
# return parsed tweets
return scores
except tweepy.TweepError as e:
# print error (if any)
print("Error : " + str(e))