X-Git-Url: https://projects.mako.cc/source/mw/blobdiff_plain/f5846ccc4228fab747eebc991ea97fd3238aea39..1d1aafa5f78d4db3df784026af179409e914e3d0:/src/mw/api.py diff --git a/src/mw/api.py b/src/mw/api.py index 88dee80..6aec91c 100644 --- a/src/mw/api.py +++ b/src/mw/api.py @@ -19,6 +19,9 @@ import cookielib import gzip import json +import mw +import mw.metadir +import os from StringIO import StringIO import urllib import urllib2 @@ -26,25 +29,38 @@ import urllib2 class API(object): - def __init__(self, api_url): + def __init__(self, api_url, metadir): self.api_url = api_url - self.cookiejar = cookielib.CookieJar() + self.metadir = metadir + self.cookiejar = cookielib.MozillaCookieJar(os.path.join( + self.metadir.location, 'cookies')) + try: + self.cookiejar.load() + except IOError: + self.cookiejar.save() + self.cookiejar.load() self.opener = urllib2.build_opener( urllib2.HTTPCookieProcessor(self.cookiejar)) self._high_limits = None def call(self, data): data['format'] = 'json' - request = urllib2.Request(self.api_url, urllib.urlencode(data)) + user_agent = 'mw/%s +http://github.com/ianweller/mw' % mw.version + request = urllib2.Request(self.api_url, urllib.urlencode(data), + {'User-Agent': user_agent}) request.add_header('Accept-encoding', 'gzip') response = self.opener.open(request) + self.cookiejar.save() if response.headers.get('Content-Encoding') == 'gzip': compressed = StringIO(response.read()) gzipper = gzip.GzipFile(fileobj=compressed) data = gzipper.read() else: data = response.read() - return json.loads(data) + the_data = json.loads(data) + if 'error' in the_data.keys(): + raise APIError(the_data['error']['info']) + return the_data def limits(self, low, high): if self._high_limits == None: @@ -59,6 +75,15 @@ class API(object): return low +class APIError(Exception): + + def __init__(self, info): + self.info = info + + def __str__(self): + return self.info + + def pagename_to_filename(name): name = name.replace(' ', '_') name = name.replace('/', '!')