-
Notifications
You must be signed in to change notification settings - Fork 0
/
scan.py
89 lines (69 loc) · 2.36 KB
/
scan.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
#!/usr/bin/python
import pickle
import sys
import time
from votesmart import votesmart
from votesmart import VotesmartApiError
ACTIONS = {
u'Did Not Vote':0,
u'Nay':1,
u'Yea':2,
u'Co-sponsor':3,
u'Sponsor':3,
u'NA':4
}
def saveCandidates(data):
sys.setrecursionlimit(10000)
file = open('candidates.pickle', 'w')
pickle.dump(data, file)
file.flush()
file.close()
def loadCandidates():
file = open('candidates.pickle', 'r')
data = pickle.load(file)
file.close()
return data
def main():
votesmart.apikey = 'your key here'
candidates = loadCandidates()
year = time.localtime().tm_year
fedId = None
ids = votesmart.state.getStateIDs()
for id in ids:
if id.name == 'National':
fedId = id.stateId
sys.stderr.write('found National ID: %s\n' % fedId)
done = False
while ~done:
sys.stderr.write('searching %d\n' % year)
bills = votesmart.votes.getBillsByYearState(year, fedId)
sys.stderr.write('found %d bills\n' % len(bills))
for bill in bills:
bill = votesmart.votes.getBill(bill.billId)
sys.stderr.write(' found %s with %d actions\n' % ( bill.billNumber,
len(bill.actions) ))
for handle in bill.actions:
try:
votes = votesmart.votes.getBillActionVotes(handle.actionId)
sys.stderr.write(' found %d votes\n' % len(votes))
for vote in votes:
if not vote.candidateId in candidates:
candidates[vote.candidateId] = {
'id': vote.candidateId,
'name': vote.candidateName.encode('utf-8'),
'party': vote.officeParties
}
saveCandidates(candidates)
print "%d, %d: %d" % (int(handle.actionId),
int(vote.candidateId),
ACTIONS[vote.action])
except VotesmartApiError as ex:
# print repr(handle)
# print 'VOTESMARTAPIERROR: %s' % ex
pass
# play nice
time.sleep(1)
year -= 1
done = len(bills) == 0
if __name__ == "__main__":
main()