-
Notifications
You must be signed in to change notification settings - Fork 21
/
Copy pathcrpapi.py
109 lines (87 loc) · 3.11 KB
/
crpapi.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
"""
Python library for interacting with the CRP API.
The CRP API (http://www.opensecrets.org/action/api_doc.php) provides campaign
finance and other data from the Center for Responsive Politics.
See README.rst for methods and usage
"""
__author__ = "James Turk ([email protected])"
__version__ = "0.1.0"
__copyright__ = "Copyright (c) 2009 Sunlight Labs"
__license__ = "BSD"
import urllib, urllib2
try:
import json
except ImportError:
import simplejson as json
class CRPApiError(Exception):
""" Exception for CRP API errors """
# results #
class CRPApiObject(object):
def __init__(self, d):
self.__dict__ = d
# namespaces #
class CRP(object):
apikey = None
@staticmethod
def _apicall(func, params):
if CRP.apikey is None:
raise CRPApiError('Missing CRP apikey')
url = 'http://api.opensecrets.org/?method=%s&output=json&apikey=%s&%s' % \
(func, CRP.apikey, urllib.urlencode(params))
try:
response = urllib2.urlopen(url).read()
return json.loads(response)['response']
except urllib2.HTTPError, e:
raise CRPApiError(e.read())
except (ValueError, KeyError), e:
raise CRPApiError('Invalid Response')
class getLegislators(object):
@staticmethod
def get(**kwargs):
results = CRP._apicall('getLegislators', kwargs)['legislator']
return results
class memPFDprofile(object):
@staticmethod
def get(**kwargs):
results = CRP._apicall('memPFDprofile', kwargs)['member_profile']
return results
class candSummary(object):
@staticmethod
def get(**kwargs):
result = CRP._apicall('candSummary', kwargs)['summary']
return result['@attributes']
class candContrib(object):
@staticmethod
def get(**kwargs):
results = CRP._apicall('candContrib', kwargs)['contributors']['contributor']
return results
class candIndustry(object):
@staticmethod
def get(**kwargs):
results = CRP._apicall('candIndustry', kwargs)['industries']['industry']
return results
class candSector(object):
@staticmethod
def get(**kwargs):
results = CRP._apicall('candSector', kwargs)['sectors']['sector']
return results
class candIndByInd(object):
@staticmethod
def get(**kwargs):
result = CRP._apicall('CandIndByInd', kwargs)['candIndus']
return result['@attributes']
class getOrgs(object):
@staticmethod
def get(**kwargs):
results = CRP._apicall('getOrgs', kwargs)['organization']
return results
class orgSummary(object):
@staticmethod
def get(**kwargs):
results = CRP._apicall('orgSummary', kwargs)['organization']
return results
class congCmteIndus(object):
@staticmethod
def get(**kwargs):
results = CRP._apicall('congCmteIndus', kwargs)['committee']['member']
return results