stuppid_bot

Untitled

Nov 16th, 2013
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.73 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. # полный список методов api можно увидеть здесь https://vk.com/dev/methods
  3. import sys
  4. import urllib
  5. import json
  6. from formdata import *
  7. import urllib2
  8.  
  9. class NeedCaptchaError(Exception):
  10.     def __init__(self, captcha_img, captcha_sid):
  11.         self.captcha_img = captcha_img
  12.         self.captcha_sid = captcha_sid
  13.  
  14. class AuthorizationError(Exception):
  15.     pass
  16.  
  17. class APICallError(Exception):
  18.     pass
  19.  
  20. class VKClient(object):
  21.     def __init__(self, client_id = '', client_secret = '', permissions = '', api_version = '', **kwargs):
  22.         self.client_id = kwargs.get('client_id', client_id)
  23.         self.client_secret = kwargs.get('client_secret', client_secret)
  24.         self.permissions = kwargs.get('permissions', permissions)
  25.         self.api_version = kwargs.get('api_version', api_version)
  26.         self.user_agent = 'VKClient (Python %s.%s.%s)' % sys.version_info[:3]
  27.         self.user_id = None
  28.         self.access_token = None
  29.  
  30.     def auth(self, username, password, captcha_sid = '', captcha_key = ''):
  31.         params = {
  32.             'username': username,
  33.             'password': password,
  34.             'captcha_sid': captcha_sid,
  35.             'captcha_key': captcha_key,
  36.             'client_id': self.client_id,
  37.             'client_secret': self.client_secret,
  38.             'scope': self.permissions,          
  39.             'v': self.api_version,
  40.             'grant_type': 'password'
  41.         }
  42.         request = urllib2.Request('https://oauth.vk.com/token?' + urllib.urlencode(params), headers = {'User-Agent': self.user_agent})
  43.         response = urllib2.urlopen(request);
  44.         content = response.read().decode('utf-8')
  45.         result = json.loads(content)
  46.         # print result
  47.         if 'error' in result:
  48.             if result['error'] == 'need_captcha':
  49.                 raise NeedCaptchaError(result['captcha_img'], result['captcha_sid'])
  50.             raise AuthorizationError(result['error'] + (': ' + result['error_description'] if 'error_description' in result else ''))
  51.         self.user_id = result['user_id']
  52.         self.access_token = result['access_token']
  53.  
  54.     def raw_api(self, rel_uri, fields = {}, files = {}, **kwargs):
  55.         fields = kwargs.get('fields', fields)
  56.         files = kwargs.get('files', files)
  57.         headers = {}
  58.         for k, v in fields.items():
  59.             if type(v) == unicode:
  60.                 fields[k] = v.encode('utf-8')
  61.         if len(files):
  62.             body, headers = encode_multipart(fields, files)
  63.         elif len(fields):
  64.             headers = {'Content-Type': 'application/x-www-form-urlencoded'}
  65.             body = urllib.urlencode(fields)
  66.         else:
  67.             body = None
  68.         # print body
  69.         headers['User-Agent'] = self.user_agent
  70.         request = urllib2.Request('https://api.vk.com/method/' + rel_uri, body, headers)
  71.         response = urllib2.urlopen(request)
  72.         content = response.read().decode('utf-8')
  73.         result = json.loads(content)
  74.         # print result
  75.         if 'error' in result:
  76.             if result['error']['error_code'] == 14:
  77.                 raise NeedCaptchaError(result['error']['captcha_img'], result['error']['captcha_sid'])
  78.             raise APICallError('%s: %s' % (result['error']['error_code'], result['error']['error_msg']))
  79.         return result['response']
  80.  
  81.     def api(self, rel_uri, fields = {}, files = {}, **kwargs):
  82.         fields = kwargs.get('fields', fields)
  83.         files = kwargs.get('files', files)
  84.         # автоматически добавляем к запросу токен и версию
  85.         fields['access_token'] = self.access_token
  86.         fields['v'] = self.api_version
  87.         return self.raw_api(rel_uri, fields, files)
Advertisement
Add Comment
Please, Sign In to add comment