-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathxpenser.py
More file actions
51 lines (45 loc) · 1.82 KB
/
Copy pathxpenser.py
File metadata and controls
51 lines (45 loc) · 1.82 KB
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
import urllib, urllib2
from django.utils import simplejson
class Xpenser:
BASE_URL = 'https://www.xpenser.com/api/v1.0/'
def __init__(self, username, passwd):
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_mgr.add_password(None, self.BASE_URL, username, passwd)
handler = urllib2.HTTPBasicAuthHandler(password_mgr)
opener = urllib2.build_opener(handler)
urllib2.install_opener(opener)
def _request(self, request, params=None):
print "Hello: _request", request, params
try:
req = urllib2.Request(self.BASE_URL + request, params)
conn = urllib2.urlopen(req)
print "Response ", conn.code, conn.msg
response = conn.read()
except Exception, e:
print "Unable to make request: [%s]: [%s]" % (str(e), e.read())
raise
try:
result = simplejson.loads(response)
except Exception, e:
print "Unable to process response: [%s]" % (str(e), )
print response
raise
return result
def get_expenses(self, params=""):
''' '''
try:
result = self._request('expenses/?' + params)
except Exception, e:
print "Unable to get expenses:", str(e)
return False
return result
if __name__ == "__main__":
xp = Xpenser('username@something.com', 'password')
expenses = xp.get_expenses()
print "Here are your expenses:"
for expense in expenses:
print expense['type'], expense['amount'], expense['date']
print "Expenses modified since 2010-09-28 in any report"
new_expenses = xp.get_expenses('modified=2010-09-28+00:00:00&modified_op=gt&report=*')
for expense in new_expenses:
print expense['type'], expense['amount'], expense['date']