Advertisement
Guest User

Untitled

a guest
Oct 19th, 2018
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.63 KB | None | 0 0
  1. import json
  2. import os
  3. import sys
  4. import uuid
  5. from itertools import cycle
  6.  
  7. import logging
  8. import random
  9. import string
  10. import time
  11. import requests
  12. import hashlib
  13.  
  14. # from convert_msg_access_token import convert_to_msg_token
  15. # from login import FBClient
  16.  
  17. logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s %(module)s: %(message)s",
  18. datefmt='%Y-%m-%d %H:%M:%S')
  19. logger = logging.getLogger(__name__)
  20.  
  21. class TokenManager:
  22. TOKEN_MANAGER_API = "http://35.196.221.1:1001/api/db"
  23.  
  24. @classmethod
  25. def get_token(cls):
  26. res = requests.get(cls.TOKEN_MANAGER_API, timeout=10).json()
  27. uid = res["uid"]
  28. access_token = res["access_token"]
  29. return uid, access_token
  30.  
  31. @classmethod
  32. def push_token(cls, username, password, uid, access_token):
  33. res = requests.post(cls.TOKEN_MANAGER_API,
  34. data={"username": username, "password": password, "uid": uid, "access_token": access_token},
  35. timeout=10).json()
  36. return res["success"]
  37.  
  38. @classmethod
  39. def set_token_dead(cls, uid):
  40. res = requests.patch(cls.TOKEN_MANAGER_API, data={"uid": uid, "dead": True}, timeout=10).json()
  41. return res["success"]
  42.  
  43. @classmethod
  44. def set_token_limit(cls, uid):
  45. res = requests.patch(cls.TOKEN_MANAGER_API, data={"uid": uid, "synclimit": True}, timeout=10).json()
  46. return res["success"]
  47.  
  48.  
  49. def calculate_signature(data, secret=None):
  50. api_secret = secret
  51. sig = ""
  52. for key in sorted(data.keys()):
  53. sig += "{0}={1}".format(key, data[key])
  54. data["sig"] = hashlib.md5((sig + api_secret).encode("utf-8")).hexdigest()
  55. return data["sig"]
  56.  
  57.  
  58. def renew_connection():
  59. renew_ip()
  60. # if CheckpointChecker.is_consecutive_checkpoint():
  61. # renew_ip()
  62. # else:
  63. # CheckpointChecker.failed_reg()
  64.  
  65. class FBRegister:
  66. API_URL = "https://z-m-api.facebook.com/method/user.register"
  67. HEADERS = {
  68. "User-Agent": "[FBAN/FB4A;FBAV/175.0.0.40.97;]",
  69. }
  70.  
  71. APP_ID = "350685531728"
  72. APP_SECRET = "62f8ce9f74b12f84c123cc23437a4a32"
  73.  
  74. def __init__(self, email, password, first_name="", last_name="", gender="F", birthday="", proxy=None):
  75. self.email = email
  76. self.password = password
  77. if first_name:
  78. self.first_name = first_name
  79. else:
  80. self.first_name = "Huyen"
  81. if last_name:
  82. self.last_name = last_name
  83. else:
  84. self.last_name = "Le Thi"
  85. self.gender = gender
  86. if birthday:
  87. self.birthday = birthday
  88. else:
  89. self.birthday = "1997-07-06"
  90. self.session = requests.Session()
  91. if proxy:
  92. logger.info("Use proxy {}".format(proxy))
  93. self.session.proxies = {"https": proxy}
  94. self.session.verify = False
  95.  
  96. @classmethod
  97. def send_zeroheader(cls, proxy=None):
  98. url = 'https://b-api.facebook.com/method/mobile.zeroHeaderRequest'
  99. headers = {
  100. 'x-fb-friendly-name': 'fetchZeroHeaderRequest',
  101. 'authorization': 'OAuth null'
  102. }
  103. data = {
  104. #'access_token': f'{cls.APP_ID}|{cls.APP_SECRET}',
  105. 'carrier_mcc': '310',
  106. 'carrier_mnc': '260',
  107. 'client_country_code': 'US',
  108. 'machine_id': "eZKiW2cRfI3_LfPmIn6r64H0",
  109. 'device_id': str(uuid.uuid4()),
  110. 'fb_api_caller_class': 'com.facebook.zero.service.ZeroTokenHandler',
  111. 'fb_api_req_friendly_name': 'fetchZeroHeaderRequest',
  112. 'force_refresh': 'false',
  113. 'format': 'json',
  114. 'header_usage': 'headers_cache_usage',
  115. 'interface': 'wifi',
  116. 'locale': 'en_US',
  117. 'method': 'mobile.zeroHeaderRequest',
  118. 'sim_mcc': '310',
  119. 'sim_mnc': '270'
  120. }
  121. try:
  122. response = requests.post(url, data=data, headers=headers, proxies={"https": proxy}, timeout=7)
  123. except Exception as e:
  124. print(e)
  125. else:
  126. response = json.loads(response.text)
  127. if response.get("edid"):
  128. logger.info("Sent zeroHeader request {}".format(proxy or ""))
  129. return True
  130. return False
  131.  
  132. def prepare_request_data(self):
  133. data = {"email": self.email, "firstname": self.first_name, "lastname": self.last_name, "gender": self.gender,
  134. "password": self.password, "birthday": self.birthday, "attempt_login": "true", "format": "json",
  135. "locale": "en_US", "method": "user.register",
  136. "fb_api_caller_class": "com.facebook.registration.fragment.RegistrationCreateAccountFragment",
  137. "api_key": "882a8490361da98702bf97a021ddc14d"}
  138. # data["client_country_code"] = "US"
  139. data["sig"] = calculate_signature(data, "62f8ce9f74b12f84c123cc23437a4a32")
  140. return data
  141.  
  142. def execute(self):
  143. # self.send_zeroheader()
  144. request_data = self.prepare_request_data()
  145. try:
  146. response = self.session.post(self.API_URL, data=request_data, headers=self.HEADERS, timeout=20)
  147. except Exception:
  148. return None, None
  149. else:
  150. total_time = response.elapsed.total_seconds()
  151. response = json.loads(response.text)
  152. try:
  153. session_info = response["session_info"]
  154. uid, access_token = session_info["uid"], session_info["access_token"]
  155. logger.info("Registered in {}s - {} - UID: {}".format(total_time, self.email, uid))
  156. return uid, access_token
  157. except Exception as e:
  158. error_code = response.get("error_code")
  159. if error_code == 368:
  160. logger.info("Register service is current banned")
  161. renew_connection()
  162. elif error_code == 3107:
  163. logger.info("Invalid username {}".format(self.email))
  164. elif error_code == 3125:
  165. logger.info("Invalid phone {}".format(self.email))
  166. else:
  167. logger.info(response)
  168. return None, None
  169.  
  170.  
  171. last_created = 0
  172. fail_count = 0
  173.  
  174.  
  175. class RandomFBRegister:
  176. MAIL_DOMAIN = "gmail.com"
  177. last_created = 0
  178. fail_count = 0
  179.  
  180. @classmethod
  181. def check_consecutive_checkpoint(cls):
  182. logger.info("Fail count: {}".format(cls.fail_count))
  183. if round(time.time() - cls.last_created, 2) <= 10:
  184. if cls.fail_count >= 5:
  185. logger.info("Low token quality ...")
  186. renew_connection()
  187. cls.fail_count = 0
  188. else:
  189. cls.fail_count += 1
  190. else:
  191. cls.fail_count = 0
  192.  
  193. @classmethod
  194. def create(cls, proxy=None):
  195. cls.check_consecutive_checkpoint()
  196. access_token = None
  197. while not access_token:
  198. username = ''.join(random.choice(string.ascii_lowercase) for x in range(11)) + "@" + cls.MAIL_DOMAIN
  199. # username = "038" + ''.join(random.choice(string.digits) for x in range(7))
  200. # username = "+1" + random.choice(["316", "769", "515", "228", "231", "385", "386", "231"]) + ''.join(
  201. # random.choice(string.digits) for x in range(7))
  202. password = "fbtest123"
  203. uid, access_token = FBRegister(username, password, proxy=proxy).execute()
  204. cls.last_created = time.time()
  205. return uid, access_token
  206.  
  207.  
  208. if __name__ == "__main__":
  209. uid, access_token = RandomFBRegister.create()
  210. TokenManager.push_token("teamtree", "fbtest123", uid, access_token)
  211. print(uid,access_token)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement