-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtwitterstats.py
executable file
·109 lines (95 loc) · 3.59 KB
/
twitterstats.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
105
106
107
108
109
#!/usr/bin/env python
import tweepy
import sys
import os
from urllib2 import HTTPError,Request,urlopen,URLError
from urllib import urlencode
from simplejson import load
def check_twitter_stats(key,secret,token,token_secret,u_id):
if not (key and secret and token and token_secret and (u_id > 0)):
logger('error', "empty parameter, key: %s , secret: %s , token: %s , token_secret: %s" % (key, secret, token, token_secret))
else:
auth = tweepy.OAuthHandler(key, secret)
auth.set_access_token(token, token_secret)
api = tweepy.API(auth)
twitterStats = {}
twitterStats['name'] = api.get_user(user_id=u_id).name
twitterStats['followers'] = api.get_user(user_id=u_id).followers_count
return twitterStats
def check_twitter_counter(u_id,twcounterkey):
if not ((u_id > 0) and twcounterkey):
logger('error', "empty parameter,ID: %s , KEY: %s " % (u_id,twcounterkey))
data = load(urlopen(('http://api.twittercounter.com/?'+urlencode({
'apikey':twcounterkey,
'twitter_id':u_id
}))))
if 'Error' in data:
logger('error', "Error in Accessing TwitterCounter API: %s" % (data['Error']))
return data
try:
import collectd
global consumer_key, consumer_secret, access_token, access_token_secret, u_id, VERBOSE_LOGGING
NAME = "twitterstats"
VERBOSE_LOGGING = False
consumer_key = ""
consumer_secret = ""
access_token = ""
access_token_secret = ""
u_id = ""
def config_callback(conf):
for node in conf.children:
logger('verb', "Node key: %s and value %s" % (node.key, node.values[0]))
if node.key == "ConsumerKey":
consumer_key = node.values[0]
elif node.key == "ConsumerSecret":
consumer_secret = node.values[0]
elif node.key == "AccessToken":
access_token = node.values[0]
elif node.key == "AccessTokenSecret":
access_token_secret = node.values[0]
elif node.key == "TwitterID":
u_id = node.values[0]
elif node.key == "Verbose":
VERBOSE_LOGGING = bool(node.values[0])
else:
logger('warn', "unknown config key in puppet module: %s" % node.key)
def read_callback():
logger('verb', "consumer_key: %s" % consumer_key)
twitter_stats = check_twitter_stats(consumer_key,
consumer_secret,
access_token,
access_token_secret,
u_id
)
val = collectd.Values(plugin=NAME, type="gauge")
val.plugin_instance = twitter_stats['name']
val.values = [twitter_stats['followers'] ]
logger('verb', "followers count: %s" % twitter_stats['followers'])
val.type_instance = "followers"
val.type = "gauge"
val.dispatch()
# logging function
def logger(t, msg):
if t == 'err':
collectd.error('%s: %s' % (NAME, msg))
elif t == 'warn':
collectd.warning('%s: %s' % (NAME, msg))
elif t == 'verb':
if VERBOSE_LOGGING:
collectd.info('%s: %s' % (NAME, msg))
else:
collectd.notice('%s: %s' % (NAME, msg))
collectd.register_config(config_callback)
collectd.register_read(read_callback)
except ImportError:
## we're not running inside collectd
## it's ok
pass
if __name__ == "__main__":
consumer_Key = sys.argv[1]
consumer_Secret = sys.argv[2]
access_Token = sys.argv[3]
access_Token_Secret= sys.argv[4]
u_ID = sys.argv[5]
stats = check_twitter_stats(consumer_Key, consumer_Secret, access_Token, access_Token_Secret, u_ID)
print "Twitter followers count of %s: %s" % (stats['name'], stats['followers'])