Advertisement
Guest User

Untitled

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