예제 #1
0
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)
예제 #2
0
 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)
예제 #3
0
	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
예제 #4
0
    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
예제 #5
0
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)
예제 #6
0
    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))
예제 #7
0
 def require_auth(self):
     if (self.access_token == None):
         raise PixivError(
             'Authentication required! Call login() or set_auth() first!')