Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- # @author: noname <tz4678@gmail.com>
- # @description: модуль для работы с API Вконтакте
- # полный список методов 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):
- def __init__(self, error, error_description):
- super(AuthorizationError, self).__init__('%s. Error Description: %s' % (error, error_description))
- self.error = error
- self.error_description = error_description
- class ApiError(Exception):
- def __init__(self, error_code, error_msg):
- super(ApiError, self).__init__('%s. Error Code: %s' % (error_msg, error_code))
- self.error_code = error_code
- self.error_msg = error_msg
- 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.get('error_description', ''))
- 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:
- error = result['error']
- if error['error_code'] == 14:
- raise NeedCaptchaError(error['captcha_img'], error['captcha_sid'])
- raise ApiError(error['error_code'], 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)
- if __name__ == '__main__':
- client = VkClient()
- print client.raw_api('users.get', {'user_ids': '205387401', 'fields': 'photo_50,city,verified', 'name_case': 'Nom', 'v': '5.3'})
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement