Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: u8 -*-
- import sys
- import re
- import json
- import urllib2 as ul2
- from time import sleep
- from urllib import urlencode
- class PR(object):
- def __init__(self):
- self.URL = 'http://x9a.ru/vk/pr.php'
- self.PHPSESSID = None
- def call(self, query, data=None):
- u"""Метод передает данные в формате JSON!"""
- url = self.URL + '?' + urlencode(query)
- print url
- headers = {}
- if self.PHPSESSID:
- headers['Cookie'] = 'PHPSESSID=' + self.PHPSESSID
- if data:
- data = json.dumps(data)
- r = ul2.Request(url, data, headers)
- u = ul2.urlopen(r)
- c = u.info().get('set-cookie')
- try:
- m = re.search('PHPSESSID=([^;]+)', c)
- self.PHPSESSID = m.group(1)
- except:
- pass
- res = u.read()
- print res
- if 'error' in res:
- raise RuntimeError('Application server error: ' + res['error'])
- if 'fail' in res:
- # время жизни сессии истекло, необходимо заново ее начать
- raise RuntimeError('Session failed.')
- res = json.loads(res)
- return res
- class VKClient(object):
- def __init__(self, username, password):
- query_params = {
- 'username': username,
- 'password': password,
- 'client_id': 3140623,
- 'client_secret': 'VeWdmVclDCtn6ihuP1nt',
- 'grant_type': 'password',
- }
- query_params = self._encode_params(query_params)
- r = self.get_json('https://oauth.vk.com/token?' + query_params)
- # ! необходимо обрабатывать капчу и валидацию
- if 'error' in r:
- raise RuntimeError('VK Auth failed: ' + r['error_description'])
- self.access_token = r['access_token']
- self.user_id = r['user_id']
- def api(self, method, params={}):
- print method
- print params
- params = dict(params)
- params['access_token'] = self.access_token
- payload = self._encode_params(params)
- headers = {'Content-Type': 'application/x-www-form-urlencoded'}
- r = self.get_json('https://api.vk.com/method/' + method, payload, headers)
- # ! необходимо обрабатывать капчу и валидацию
- if 'error' in r:
- raise RuntimeError('VK Api Error: [{error_code}] {error_msg}'.format(**r['error']))
- return r['response']
- def get_json(self, url, data=None, headers={}):
- r = ul2.Request(url, data, headers)
- try:
- u = ul2.urlopen(r)
- except ul2.HTTPError as u:
- pass
- c = u.read()
- return json.loads(c)
- def _encode_params(self, params):
- for k, v in params.items():
- if type(v) == unicode:
- params[k] = v.encode('u8')
- return urlencode(params)
- def run(login, password):
- vk = VKClient(login, password)
- pr = PR()
- # начинаем сессию
- # единственный обязательный параметр это user_id
- # http://<HOST>/vk/pr.php?action=start&user_id=<USER_ID>&like_profile=1
- r = pr.call({'action': 'start', 'user_id': vk.user_id, 'like_profile': 1})
- if not 'success' in r or not r['success']:
- raise RuntimeError('Something wrong.')
- payload = None
- while 1:
- print payload
- # http://<HOST>/vk/pr.php?action=cmd
- r = pr.call({'action': 'cmd'}, payload)
- results = []
- for command in r['commands']:
- r1 = vk.api(command['method'], command['params'])
- print r1
- results.append({'command': command['name'], 'result': r1})
- # время задержки между вызовами методов api должно устанавливаться приложение
- sleep(5)
- if 'wait' in r:
- print 'wait %s' % r['wait']
- sleep(r['wait'])
- payload = {'report': results}
- if __name__ == '__main__':
- run('%username%', '%password%')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement