class PixivAPI(object): session = None access_token = None user_id = 0 def __init__(self): self.sapi = Pixiv_SAPI(self) self.papi = Pixiv_PAPI(self) def _requests_call(self, method, url, headers={}, params=None, data=None): """ requests http/https call for Pixiv API """ req_header = { 'Referer': 'http://spapi.pixiv.net/', 'User-Agent': 'PixivIOSApp/5.6.0', 'Content-Type': 'application/x-www-form-urlencoded', } # override use user headers for k,v in headers.items(): req_header[k] = v try: if (method == 'GET'): return requests.get(url, params=params, headers=req_header) elif (method == 'POST'): return requests.post(url, params=params, data=data, headers=req_header) elif (method == 'IMAGE'): return requests.get(url, params=params, headers=req_header,stream=True) except Exception, e: raise PixivError('requests %s %s error: %s' % (method, url, e)) raise PixivError('Unknow method: %s' % method)
def parse_result(self, req): try: return self.api._parse_json(req.text) except Exception, e: raise PixivError("parse_json() error: %s" % (e), header=req.headers, body=req.text)
def login(self, username, password): url = 'https://oauth.secure.pixiv.net/auth/token' headers = { 'Referer': 'http://www.pixiv.net/', } data = { 'username': username, 'password': password, 'grant_type': 'password', 'client_id': 'bYGKuGVw91e0NMfPGp44euvGt59s', 'client_secret': 'HP3RmkgAmEGro0gn1x9ioawQE8WMfvLXDz3ZqxpK', } r = self._requests_call('POST', url, headers=headers, data=data) if (not r.status_code in [200, 301, 302]): raise PixivError('[ERROR] login() failed! check username and password.\nHTTP %s: %s' % (r.status_code, r.text), header=r.headers, body=r.text) token = None try: # get access_token token = self._parse_json(r.text) self.access_token = token.response.access_token self.user_id = token.response.user.id print "AccessToken:", self.access_token except: raise PixivError('Get access_token error! Response: %s' % (token), header=r.headers, body=r.text) '''try: # get PHPSESSID raw_cookie = r.headers.get('Set-Cookie') for cookie_str in raw_cookie.split('; '): if 'PHPSESSID=' in cookie_str: self.session = cookie_str.split('=')[1] print "Session:", self.session except: raise PixivError('Get PHPSESSID error! Set-Cookie: %s' % (r.headers.get('Set-Cookie')), header=r.headers, body=r.text)''' self.session = "2198255_1e90384c2634166f21522048633fc1f6" # return auth/token response return token
def login(self, username, password): url = 'https://oauth.secure.pixiv.net/auth/token' headers = { 'Referer': 'http://www.pixiv.net/', } data = { 'username': username, 'password': password, 'grant_type': 'password', 'client_id': 'bYGKuGVw91e0NMfPGp44euvGt59s', 'client_secret': 'HP3RmkgAmEGro0gn1x9ioawQE8WMfvLXDz3ZqxpK', } r = self.requests_call('POST', url, headers=headers, data=data) if (not r.status_code in [200, 301, 302]): raise PixivError( '[ERROR] login() failed! check username and password.\nHTTP %s: %s' % (r.status_code, r.text), header=r.headers, body=r.text) token = None try: # get access_token token = self.parse_json(r.text) self.access_token = token.response.access_token self.user_id = token.response.user.id print "AccessToken:", self.access_token except: raise PixivError('Get access_token error! Response: %s' % (token), header=r.headers, body=r.text) # return auth/token response return token
class BasePixivAPI: access_token = None user_id = 0 def parse_json(self, json_str): """parse str into JsonDict""" def _obj_hook(pairs): """convert json object to python object""" o = JsonDict() for k, v in pairs.iteritems(): o[str(k)] = v return o return json.loads(json_str, object_hook=_obj_hook) def require_auth(self): if (self.access_token == None): raise PixivError( 'Authentication required! Call login() or set_auth() first!') def requests_call(self, method, url, headers={}, params=None, data=None): """ requests http/https call for Pixiv API """ req_header = { 'Referer': 'http://spapi.pixiv.net/', 'User-Agent': 'PixivIOSApp/5.8.0', } # override use user headers for k, v in headers.items(): req_header[k] = v try: if (method == 'GET'): return requests.get(url, params=params, headers=req_header) elif (method == 'POST'): return requests.post(url, params=params, data=data, headers=req_header) except Exception, e: raise PixivError('requests %s %s error: %s' % (method, url, e)) raise PixivError('Unknow method: %s' % method)
def requests_call(self, method, url, headers={}, params=None, data=None): """ requests http/https call for Pixiv API """ req_header = { 'Referer': 'http://spapi.pixiv.net/', 'User-Agent': 'PixivIOSApp/5.8.0', } # override use user headers for k, v in headers.items(): req_header[k] = v try: if (method == 'GET'): return requests.get(url, params=params, headers=req_header) elif (method == 'POST'): return requests.post(url, params=params, data=data, headers=req_header) except Exception, e: raise PixivError('requests %s %s error: %s' % (method, url, e))
def require_auth(self): if (self.access_token == None): raise PixivError( 'Authentication required! Call login() or set_auth() first!')