stuppid_bot

Untitled

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