Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- # полный список методов api можно увидеть здесь https://vk.com/dev/methods
- import sys
- import urllib
- import json
- from formdata import *
- import urllib2
- class NeedCaptchaError(Exception):
- def __init__(self, captcha_img, captcha_sid):
- self.captcha_img = captcha_img
- self.captcha_sid = captcha_sid
- class AuthorizationError(Exception):
- pass
- class APICallError(Exception):
- pass
- class VKClient(object):
- def __init__(self, client_id = '', client_secret = '', permissions = '', api_version = '', **kwargs):
- self.client_id = kwargs.get('client_id', client_id)
- self.client_secret = kwargs.get('client_secret', client_secret)
- self.permissions = kwargs.get('permissions', permissions)
- self.api_version = kwargs.get('api_version', api_version)
- self.user_agent = 'VKClient (Python %s.%s.%s)' % sys.version_info[:3]
- self.user_id = None
- self.access_token = None
- def auth(self, username, password, captcha_sid = '', captcha_key = ''):
- params = {
- 'username': username,
- 'password': password,
- 'captcha_sid': captcha_sid,
- 'captcha_key': captcha_key,
- 'client_id': self.client_id,
- 'client_secret': self.client_secret,
- 'scope': self.permissions,
- 'v': self.api_version,
- 'grant_type': 'password'
- }
- request = urllib2.Request('https://oauth.vk.com/token?' + urllib.urlencode(params), headers = {'User-Agent': self.user_agent})
- response = urllib2.urlopen(request);
- content = response.read().decode('utf-8')
- result = json.loads(content)
- # print result
- if 'error' in result:
- if result['error'] == 'need_captcha':
- raise NeedCaptchaError(result['captcha_img'], result['captcha_sid'])
- raise AuthorizationError(result['error'] + (': ' + result['error_description'] if 'error_description' in result else ''))
- self.user_id = result['user_id']
- self.access_token = result['access_token']
- def raw_api(self, rel_uri, fields = {}, files = {}, **kwargs):
- fields = kwargs.get('fields', fields)
- files = kwargs.get('files', files)
- headers = {}
- for k, v in fields.items():
- if type(v) == unicode:
- fields[k] = v.encode('utf-8')
- if len(files):
- body, headers = encode_multipart(fields, files)
- elif len(fields):
- headers = {'Content-Type': 'application/x-www-form-urlencoded'}
- body = urllib.urlencode(fields)
- else:
- body = None
- # print body
- headers['User-Agent'] = self.user_agent
- request = urllib2.Request('https://api.vk.com/method/' + rel_uri, body, headers)
- response = urllib2.urlopen(request)
- content = response.read().decode('utf-8')
- result = json.loads(content)
- # print result
- if 'error' in result:
- if result['error']['error_code'] == 14:
- raise NeedCaptchaError(result['error']['captcha_img'], result['error']['captcha_sid'])
- raise APICallError('%s: %s' % (result['error']['error_code'], result['error']['error_msg']))
- return result['response']
- def api(self, rel_uri, fields = {}, files = {}, **kwargs):
- fields = kwargs.get('fields', fields)
- files = kwargs.get('files', files)
- # автоматически добавляем к запросу токен и версию
- fields['access_token'] = self.access_token
- fields['v'] = self.api_version
- return self.raw_api(rel_uri, fields, files)
Advertisement
Add Comment
Please, Sign In to add comment