Guest User

mrutils

a guest
Oct 24th, 2017
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 14.53 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. from connection import Connection
  3. from settings import Settings
  4. import re
  5. import sys
  6. import os
  7. import os.path
  8. sys.path.append('./API')
  9. #import odnoklassniki.api
  10. import json
  11. import vkontakte.api
  12. import time
  13. import simplejson
  14. from hashlib import md5
  15. from game_state.game_types import GameSTART, GameInfo
  16. from pymymailru import PyMyMailRu, ApiError
  17.  
  18. class MR():
  19.     def __init__(self, credentials):
  20.         self._credentials = credentials
  21.  
  22.     def getAppParams(self, app_id, session_cookies=None):
  23.         if session_cookies is None:
  24.             session_cookies = self._getSessionCookies()
  25. #        mr = Connection('http://my.mail.ru/apps/' + str(app_id))
  26. #        UrlRedirect1 = mr.sendRequestNoRedirect(None, cookies=session_cookies)
  27. #        print 'UrlRedirect 1 = ', UrlRedirect1
  28.         mr = Connection('http://auth.mail.ru/sdc')
  29.         data = {'from':'http://my.mail.ru/apps/609744'}
  30.         UrlRedirect2 = mr.sendRequestNoRedirect(data, cookies=session_cookies)
  31. #        print 'UrlRedirect 2 = ', UrlRedirect2
  32.         mr = Connection('http://my.mail.ru/sdc')
  33. #        data = {'token':UrlRedirect2[28:]}
  34.         data = {'token':UrlRedirect2.split('=')[1]}
  35. #        print 'data-token = ', data
  36. #        self.__tokenMR = UrlRedirect2.split('=')[1]
  37.         session_cookies3 = mr.sendRequestNoRedirect(data, cookies=session_cookies, getCookies=True)              
  38. #        print 'session_cookies3 = ', session_cookies3
  39.        
  40.         session_cookies_sdc = (session_cookies3.output(attrs=[],
  41.                                                   header='', sep=';'))
  42. #        print 'session_cookies_sdc = ', session_cookies_sdc
  43.         session_cookies += ('; ' + session_cookies_sdc)
  44.         self.__session_cookies = session_cookies
  45. #        self._credentials.setSessionCookies(session_cookies)
  46.        
  47.         mr = Connection('http://my.mail.ru/apps/' + str(app_id))
  48.         html = mr.sendRequest(None, cookies=session_cookies)        
  49.         params = None
  50.         if html:
  51.             #open('html.txt', 'a').write(html.encode('utf-8'))
  52.             matcher = re.compile('.*zombiefarm.html\?(.*?)"')
  53.             for line in html.split('\n'):
  54.                 match = matcher.match(line)
  55.                 if match is not None:
  56.                     params = match.group(1)
  57.                     break
  58.             if params is not None:
  59.                 pairs = params.split('&')
  60.                 params = {}
  61.                 for pair in pairs:
  62.                     key = pair.split('=')[0]
  63.                     value = pair.split('=')[1]
  64.                     params[key] = value
  65.                     #print key, value
  66.         return params
  67.  
  68.     def get_game_params(self):
  69.         params = self.getAppParams('609744')
  70.         #print 'params1 = ', params
  71.         params['ext_perm']=params['ext_perm'].replace('%2C',',')
  72.         self.__game_api_user_id = params['oid']
  73.         game_auth_key = params['sig']
  74.         self.__game_auth_key = params['sig']
  75.         self.__auth_key = params['authentication_key']
  76.         self.__api_access_token = params['session_key']
  77.         self.__window_id = params['window_id']
  78.         game_url = 'http://jmr.shadowlands.ru/zombiemr/go'
  79.         connection = Connection(game_url)
  80.         self.__params = params
  81.         #print 'params = ', params
  82.         #return (self.__game_api_user_id, game_auth_key, params, connection)
  83.         return (self.__game_api_user_id, game_auth_key, params, connection)
  84.  
  85.     def get_time_key(self):
  86.         #print self.__params
  87.         del self.__params['sig']
  88.         return '&'.join([k + '=' + v for k, v in self.__params.iteritems()])
  89.  
  90.     def create_start_command(self,server_time, client_time):
  91.         command = GameSTART(lang=u'en', info=self._getUserInfo(),
  92.                       ad=u'search', serverTime=server_time,
  93.                       clientTime=client_time)
  94.         # получаем список друзей общий
  95.         #self._getFriendsAllMR0()
  96.        
  97.         # получаем список друзей общий ПОЛНАя инфа
  98.         self._getFriendsAllMR1()
  99.        
  100.         # получаем список друзей с ЗФ
  101.         self.friendsid = self._getFriendsListMR2()
  102.         #print 'friendsid = ', self.friendsid
  103.         print (u'Всего друзей в списке: %s'%str(len(self.friendsid))).encode('cp866')
  104.         #print 'START', command
  105.         uid = self.__game_api_user_id
  106.         #return command, self.friendsid
  107.         return command, self.friendsid, uid
  108.  
  109.     def _getUserInfo(self):
  110.         '''
  111.        TODO returns user info using mailru api
  112.        '''
  113.         return GameInfo()
  114.  
  115.     def _getFriendsListMR(self):  # MR
  116.         """
  117.        friendsid = []
  118.        xfile = open('ID Frends.txt', 'r')
  119.        for line in xfile.readlines():
  120.            if line != '':
  121.                if line[-1] == '\n':
  122.                    friendsid.append(line[:-1])
  123.                else: friendsid.append(line)    
  124.        xfile.close()
  125.        """
  126.         friendsid = eval(open('ID Frends.txt').read())  
  127.         return friendsid #, uid
  128.        
  129.     def _getFriendsListMR2(self):  # MR
  130.         friendsid = []
  131.         #return friendsid
  132.         print u'Загружаем список друзей...'
  133.         offset = 0
  134.         ex_fr = 0
  135.         while ex_fr == 0:
  136.             post = {
  137.                 'method': 'friends.getAppUsers',
  138.                 'app_id': '609744',
  139.                 'offset' : str(offset),
  140.                 'session_key': self.__api_access_token
  141.                 }
  142.             post_keys = sorted(post.keys())
  143.             param_str = "".join(["%s=%s" % (str(key), vkontakte.api._encode(post[key])) for key in post_keys])
  144.             param_str = self.__game_api_user_id + param_str + u'5cbd867117243d62af914948498eb3de'
  145.             sign = md5(param_str).hexdigest().lower()
  146.             post.update({'sig': sign})
  147.             BASE_URL = Connection('http://www.appsmail.ru/platform/api')
  148.                
  149.             resp_fr = BASE_URL.sendRequest(post, cookies=self.__session_cookies)
  150.             while resp_fr == None:
  151.                 print u'Друзья заедают... попробуем ещё раз'
  152.                 time.sleep(0.5)
  153.                 resp_fr = BASE_URL.sendRequest(post, cookies=self.__session_cookies)
  154.             add = eval(resp_fr)
  155.             #add = eval(BASE_URL.sendRequest(post, cookies=self.__session_cookies))
  156.             print 'load ', len(add)
  157.  
  158.  
  159.             if len(add) == 0:
  160.                 ex_fr = 1
  161.             else:
  162.                 offset +=1000
  163.                 friendsid.extend(add)
  164.         #print 'friendsid = ', friendsid
  165.         #print 'All = ', len(friendsid)            
  166.         #return friendsid
  167.         finalFriends=[]
  168.         for friend in friendsid:
  169.             if not friend in finalFriends:finalFriends.append(friend)
  170.         #print 'All = ', len(finalFriends)        
  171.         return finalFriends
  172.  
  173.            
  174.            
  175.        
  176.     def _getFriendsAllMR0(self):  # All MR
  177.         friends_all_id = []
  178.         #return friends_all_id
  179.         offset = 0
  180.         ex_fr = 0
  181.         while ex_fr == 0:
  182.             post = {
  183.                 'method': 'friends.get',
  184.                 'app_id': '609744',
  185.                 'offset' : str(offset),
  186.                 'session_key': self.__api_access_token
  187.                 }
  188.             post_keys = sorted(post.keys())
  189.             param_str = "".join(["%s=%s" % (str(key), vkontakte.api._encode(post[key])) for key in post_keys])
  190.             param_str = self.__game_api_user_id + param_str + u'5cbd867117243d62af914948498eb3de'
  191.             sign = md5(param_str).hexdigest().lower()
  192.             post.update({'sig': sign})
  193.             BASE_URL = Connection('http://www.appsmail.ru/platform/api')
  194.                
  195.             resp_fr = BASE_URL.sendRequest(post, cookies=self.__session_cookies)
  196.             while resp_fr == None:
  197.                 print u'Друзья заедают... попробуем ещё раз'
  198.                 time.sleep(0.5)
  199.                 resp_fr = BASE_URL.sendRequest(post, cookies=self.__session_cookies)
  200.             add = eval(resp_fr)
  201.             print 'load MR', len(add)
  202.             if len(add) == 0:
  203.                 ex_fr = 1
  204.             else:
  205.                 offset +=1000
  206.                 friends_all_id.extend(add)
  207.         print (u'Друзей в Моём Мире: %s'%str(len(friends_all_id))).encode('cp866')
  208.         with open('friends_all.txt', 'w') as f:
  209.             f.write(friends_all_id.encode("UTF-8", "ignore"))
  210.         return friends_all_id
  211.        
  212.     def _getFriendsAllMR1(self):  # All MR
  213.         friends_all_id = {}
  214.         #return friends_all_id
  215.         null = '0'
  216.         offset = 0
  217.         ex_fr = 0
  218.         while ex_fr == 0:
  219.             post = {
  220.                 'ext':'1',
  221.                 'method': 'friends.get',
  222.                 'app_id': '609744',
  223.                 'offset' : str(offset),
  224.                 'session_key': self.__api_access_token
  225.                 }
  226.             post_keys = sorted(post.keys())
  227.             param_str = "".join(["%s=%s" % (str(key), vkontakte.api._encode(post[key])) for key in post_keys])
  228.             param_str = self.__game_api_user_id + param_str + u'5cbd867117243d62af914948498eb3de'
  229.             sign = md5(param_str).hexdigest().lower()
  230.             post.update({'sig': sign})
  231.             BASE_URL = Connection('http://www.appsmail.ru/platform/api')
  232.                
  233.             resp_fr = BASE_URL.sendRequest(post, cookies=self.__session_cookies)
  234.             while resp_fr == None:
  235.                 print u'Друзья заедают... попробуем ещё раз'
  236.                 time.sleep(0.5)
  237.                 resp_fr = BASE_URL.sendRequest(post, cookies=self.__session_cookies)
  238.             # with open('response.txt', 'w') as f:
  239.                 # f.write(resp_fr.encode("UTF-8", "ignore"))
  240.             add = eval(resp_fr)
  241.             print 'load MR', len(add)
  242.             if len(add) == 0:
  243.                 ex_fr = 1
  244.             else:
  245.                 offset +=1000
  246.                 #friends_all_id.extend(add)
  247.                 for us in add:  
  248.                     new = {u"link":us["link"], u"first_name":self._correct(us["first_name"]), u"last_name":self._correct(us["last_name"]), u"nick":self._correct(us["nick"]), u"app_installed":us["app_installed"], u"last_visit":us["last_visit"]}
  249.                     friends_all_id[us["uid"]] = new
  250.         print (u'Друзей в Моём Мире: %s'%str(len(friends_all_id))).encode('cp866')
  251.         with open('friends_all_info.txt', 'w') as f:
  252.             #f.write(unicode(friends_all_id))
  253.             text = simplejson.dumps(friends_all_id, ensure_ascii=False)
  254.             f.write(text.encode("UTF-8", "ignore"))
  255.         return friends_all_id
  256.  
  257.     def _correct(self, name_):
  258.         # print 'type name_', type(name_)
  259.         # print 'name_',  name_
  260.         while '{' in name_ or '}' in name_ or '[' in name_ or ']' in name_ or '^' in name_:
  261.             for l in '{}[]^':
  262.                 name_ = name_.replace(l, '')
  263.         if '\u0456' in name_:
  264.             name_ = name_.replace('\u0456', u'i')
  265.         return name_        
  266.        
  267.     def _getFriendsId(self): # VK
  268.         api = vkontakte.api.API(token=self.__api_access_token)
  269.         info = api.friends.getAppUsers(format='json')
  270.         return info    
  271.        
  272.     def _getFriendsListOK(self): # OK
  273.         post = {
  274.             'new_sig': 1,
  275.             'session_key': self.__params['session_key'],
  276.             'application_key': self.__params['application_key'],
  277.             'format': 'Json'
  278.             }
  279.         post_keys = sorted(post.keys())
  280.         param_str = "".join(["%s=%s" % (str(key), vkontakte.api._encode(post[key])) for key in post_keys])
  281.         param_str += self.__params['session_secret_key']
  282.         sign = md5(param_str).hexdigest().lower()
  283.         post.update({'sig': sign})
  284.         info = requests.post('http://api.odnoklassniki.ru/api/friends/getAppUsers', data=post, cookies=self.str2dict(self._credentials.getSessionCookies())).json()['uids']
  285.         #print(info)
  286.         return info
  287.  
  288.     def _validateSessionCookies0000(self, session_cookies):
  289.         valid = False
  290.         if session_cookies is not None:
  291.             valid = self.getAppParams(609744,session_cookies) is not None
  292.         return valid
  293.        
  294.     def _validateSessionCookies(self, session_cookies):
  295.         valid = False
  296.         if session_cookies is not None:
  297.             mr = Connection('http://my.mail.ru/apps/609744')
  298.             html = mr.sendRequest(None, cookies=session_cookies)        
  299.             params = None
  300.             if html:
  301.                 #open('html.txt', 'a').write(html.encode('utf-8'))
  302.                 matcher = re.compile('.*zombiefarm.html\?(.*?)"')
  303.                 for line in html.split('\n'):
  304.                     match = matcher.match(line)
  305.                     if match is not None:
  306.                         params = match.group(1)
  307.                         break
  308.                 if params is not None:
  309.                     pairs = params.split('&')
  310.                     params = {}
  311.                     for pair in pairs:
  312.                         key = pair.split('=')[0]
  313.                         value = pair.split('=')[1]
  314.                         params[key] = value
  315.                         #print key, value
  316.             valid = params is not None
  317.         return valid
  318.  
  319.     def _getSessionCookies(self):
  320.         session_cookies = self._credentials.getSessionCookies()
  321.         cookies_are_valid = self._validateSessionCookies(session_cookies)
  322.         #print 'cookies_are_valid = ', cookies_are_valid
  323.         if not cookies_are_valid:
  324.             username = self._credentials.getUserEmail()
  325.             password = self._credentials.getUserPassword()
  326.             print 'New login!'
  327.             post = {
  328.                     'Login': username.split('@')[0],
  329.                     'Domain': username.split('@')[1],
  330.                     'Password': password}
  331.             mr = Connection('https://auth.mail.ru/cgi-bin/auth')
  332.             session_cookies = mr.sendRequestNoRedirect(post, getCookies=True)
  333.             #session_cookies = mr.sendRequestNoRedirect(post, getCookies=True)
  334.             #print 'session_cookies1 = ', session_cookies
  335.             #open('remont_log.txt', 'a').write('session_cookies1 = '+str(session_cookies)+"\n"+"\n")
  336.             session_cookies = (
  337.                                session_cookies.output(attrs=[],
  338.                                                       header='', sep=';'))
  339.             self._credentials.setSessionCookies(session_cookies)
  340.         return session_cookies
Add Comment
Please, Sign In to add comment