Advertisement
stuppid_bot

Рабочий прототип приложения

Jul 18th, 2014
284
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.69 KB | None | 0 0
  1. # -*- coding: u8 -*-
  2. import re
  3. import json
  4. import urllib2 as ul2
  5. from time import sleep
  6. from urllib import urlencode
  7.  
  8. class CmdServer(object):
  9.     def __init__(self):
  10.         self.URL = 'http://localhost/site/vk/cmd.php'
  11.         self.PHPSESSID = None
  12.  
  13.     def get(self, cmd, data=None):
  14.         u"""Метод передает данные в формате JSON!"""
  15.         url =  self.URL + '?action=' + cmd
  16.         headers = {}
  17.         if self.PHPSESSID:
  18.             headers['Cookie'] = 'PHPSESSID=' + self.PHPSESSID
  19.         if data:
  20.             data = json.dumps(data)
  21.         r = ul2.Request(url, data, headers)
  22.         u = ul2.urlopen(r)
  23.         c = u.info().get('set-cookie')
  24.         try:
  25.             m = re.search('PHPSESSID=([^;]+)', c)
  26.             self.PHPSESSID = m.group(1)
  27.         except:
  28.             pass
  29.         res = u.read()
  30.         print res
  31.         res = json.loads(res)
  32.         if 'error' in res:
  33.             raise RuntimeError('Application server error: ' + res['error'])
  34.         return res
  35.  
  36. class VKClient(object):
  37.     def __init__(self, username, password):
  38.         query_params = {
  39.             'username': username,
  40.             'password': password,
  41.             'client_id': 3140623,
  42.             'client_secret': 'VeWdmVclDCtn6ihuP1nt',
  43.             'grant_type': 'password',
  44.         }
  45.         query_params = self._encode_params(query_params)
  46.         r = self.get_json('https://oauth.vk.com/token?' + query_params)
  47.         # ! необходимо обрабатывать капчу и валидацию
  48.         if 'error' in r:
  49.             raise RuntimeError('VK Auth failed: ' + r['error_description'])
  50.         self.access_token = r['access_token']
  51.         self.user_id = r['user_id']
  52.  
  53.     def api(self, method, params={}):
  54.         params = dict(params)
  55.         params['access_token'] = self.access_token
  56.         payload = self._encode_params(params)
  57.         headers =  {'Content-Type': 'application/x-www-form-urlencoded'}
  58.         r = self.get_json('https://api.vk.com/method/' + method, payload, headers)
  59.         # ! необходимо обрабатывать капчу и валидацию
  60.         if 'error' in r:
  61.             raise RuntimeError('VK Api Error: [{error_code}] {error_msg}'.format(**r['error']))
  62.         return r['response']
  63.  
  64.     def get_json(self, url, data=None, headers={}):
  65.         r = ul2.Request(url, data, headers)
  66.         try:
  67.             u = ul2.urlopen(r)
  68.         except ul2.HTTPError as u:
  69.             pass
  70.         c = u.read()
  71.         return json.loads(c)
  72.  
  73.     def _encode_params(self, params):
  74.         for k, v in params.items():
  75.             if type(v) == unicode:
  76.                 params[k] = v.encode('u8')
  77.         return urlencode(params)
  78.  
  79. def run(login, password):
  80.     vk = VKClient(login, password)
  81.     cmd = CmdServer()
  82.     data = {'user_id': vk.user_id}
  83.     while 1:
  84.         print data
  85.         r = cmd.get('change_likes', data)
  86.         print r
  87.         if 'success' in r:
  88.             # начата новая сессия, необходимо отправить настройки
  89.             continue
  90.         results = []
  91.         for command in r['commands']:
  92.             result = vk.api(command['method'], command['params'])
  93.             print result
  94.             # время задержки между вызовами методов api должно устанавливаться приложение
  95.             results.append({'command': command['name'], 'result': result})
  96.             sleep(5)
  97.         if 'wait' in r:
  98.             print 'wait %s' % r['wait']
  99.             sleep(r['wait'])
  100.         data = {'user_id': vk.user_id, 'report': results}
  101.  
  102. if __name__ == '__main__':
  103.     run('email', 'pass')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement