Advertisement
Guest User

Untitled

a guest
Sep 8th, 2018
377
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.98 KB | None | 0 0
  1. import requests
  2. import md5
  3. import json
  4. import urllib
  5. from collections import OrderedDict
  6.  
  7. class Textnow:
  8.  
  9. API_URL = 'http://api.textnow.me/api2.0/'
  10. SIGN_KEY = 'f8ab2ceca9163724b6d126aea9620339'
  11. USER_AGENT = 'TextNow 5.15.0 (Android SDK built for x86; Android OS 5.1.1; en_US)'
  12.  
  13. def __init__(self, TN_username, TN_password):
  14. self.TN_username = TN_username
  15. self.TN_password = TN_password
  16. self.Login = False
  17. self.username = None
  18. self.userInfo = None
  19.  
  20. def genSignature(self, method, node, query):
  21. return md5.new("%s%s%s%s"%(self.SIGN_KEY, method, node, str(query).replace("\\\\", "\\"))).hexdigest() # Signature Pattern in GITHUB README
  22.  
  23. def genJson(self, data):
  24. return json.dumps(data, sort_keys=False, separators=(',', ':'))
  25.  
  26. def sendReq(self, method, url, sign, data=None):
  27. url = "%s%s"%(url, "&signature=" + sign)
  28. if method == "POST":
  29. if data == None:
  30. return requests.post(url, headers={'User-Agent':self.USER_AGENT}).json()
  31. return requests.post(url, data={'json':str(data).replace("\\\\", "\\")}, headers={'User-Agent':self.USER_AGENT}).json()
  32.  
  33. if method == "PATCH":
  34. return requests.patch(url, data={'json':str(data).replace("\\\\", "\\")}, headers={'User-Agent':self.USER_AGENT}).text
  35.  
  36. if method == "GET":
  37. return requests.get(url, headers={'User-Agent':self.USER_AGENT}).json()
  38.  
  39. def login(self):
  40. # return if logged in
  41. if self.Login != False:
  42. return True
  43.  
  44. node = "sessions"
  45. query = "?client_type=TN_ANDROID"
  46.  
  47. loginData = OrderedDict([
  48. ('password', self.TN_password),
  49. ('username', self.TN_username),
  50. ('esn', '00000000000000'),
  51. ('os_version', '22'),
  52. ('app_version', '5.15.0'),
  53. ('iccid', '89014103211118510720')
  54. ])
  55. jsonData = self.genJson(loginData)
  56. sign = self.genSignature("POST", node, query + jsonData)
  57. req = self.sendReq("POST", "%s%s%s"%(self.API_URL, node, query), sign, jsonData)
  58. if 'id' in req:
  59. self.Login = req['id'] # id like AUTH_KEY
  60. self.username = req['username']
  61. self.userInfo = self.getInfoAboutUser()
  62. return True
  63. else:
  64. return False
  65.  
  66. def getInfoAboutUser(self):
  67. if self.Login == False:
  68. return False
  69.  
  70. node = 'users/%s'%(self.username)
  71. query = '?client_type=TN_ANDROID&client_id=%s'%(self.Login)
  72. sign = self.genSignature("GET", node, query)
  73. req = self.sendReq("GET", "%s%s%s"%(self.API_URL, node, query), sign)
  74. return req
  75.  
  76. def getMessages(self, start_message_id = 1, page_size = 30, get_all = 1):
  77. if self.Login == False:
  78. return False
  79.  
  80. node = 'users/%s/messages'%(self.username)
  81. query = '?client_type=TN_ANDROID&client_id=%s&get_all=%s&page_size=%s&start_message_id=%s'%(self.Login, get_all, page_size, start_message_id)
  82. sign = self.genSignature("GET", node, query)
  83. req = self.sendReq("GET", "%s%s%s"%(self.API_URL, node, query), sign)
  84. return req
  85.  
  86. def getWallet(self):
  87. if self.Login == False:
  88. return False
  89.  
  90. node = 'users/%s/wallet'%(self.username)
  91. query = '?client_type=TN_ANDROID&client_id=%s'%(self.Login)
  92. sign = self.genSignature("GET", node, query)
  93. req = self.sendReq("GET", "%s%s%s"%(self.API_URL, node, query), sign)
  94. return req
  95.  
  96. def sendMessage(self, number, msg):
  97. # return if logged in
  98. if self.Login == False:
  99. return False
  100.  
  101. node = 'users/%s/messages'%(self.username)
  102. query = '?client_type=TN_ANDROID&client_id=%s'%(self.Login)
  103.  
  104. msgData = OrderedDict([
  105. ('from_name', self.userInfo['first_name']),
  106. ('contact_type', '2'),
  107. ('contact_value', '+%s'%(number)),
  108. ('message', msg.replace("/", "\/")),
  109. ('to_name', '')
  110. ])
  111. jsonData = self.genJson(msgData)
  112. sign = self.genSignature("POST", node, query + jsonData)
  113. req = self.sendReq("POST", "%s%s%s"%(self.API_URL, node, query), sign, jsonData)
  114. return req['id']
  115.  
  116. def changeFullName(self, first_name, last_name):
  117. # return if logged in
  118. if self.Login == False:
  119. return False
  120.  
  121. node = 'users/%s'%(self.username)
  122. query = '?client_type=TN_ANDROID&client_id=%s'%(self.Login)
  123.  
  124. msgData = OrderedDict([
  125. ('first_name', first_name),
  126. ('last_name', last_name)
  127. ])
  128. jsonData = self.genJson(msgData)
  129. sign = self.genSignature("PATCH", node, query + jsonData)
  130. req = self.sendReq("PATCH", "%s%s%s"%(self.API_URL, node, query), sign, jsonData)
  131. if req == "[]":
  132. return True
  133. else:
  134. return False
  135.  
  136. def changeEmail(self, email):
  137. # return if logged in
  138. if self.Login == False:
  139. return False
  140.  
  141. node = 'users/%s'%(self.username)
  142. query = '?client_type=TN_ANDROID&client_id=%s'%(self.Login)
  143.  
  144. msgData = OrderedDict([
  145. ('email', email)
  146. ])
  147. jsonData = self.genJson(msgData)
  148. sign = self.genSignature("PATCH", node, query + jsonData)
  149. req = self.sendReq("PATCH", "%s%s%s"%(self.API_URL, node, query), sign, jsonData)
  150. if req == "[]":
  151. return True
  152. else:
  153. return False
  154.  
  155. def changePassword(self, old_password, new_password):
  156. # return if logged in
  157. if self.Login == False:
  158. return False
  159.  
  160. node = 'users/%s'%(self.username)
  161. query = '?client_type=TN_ANDROID&client_id=%s'%(self.Login)
  162.  
  163. msgData = OrderedDict([
  164. ('old_password', old_password),
  165. ('password', new_password)
  166. ])
  167. jsonData = self.genJson(msgData)
  168. sign = self.genSignature("PATCH", node, query + jsonData)
  169. req = self.sendReq("PATCH", "%s%s%s"%(self.API_URL, node, query), sign, jsonData)
  170. if req == "[]":
  171. return True
  172. else:
  173. return False
  174.  
  175. def resendVerifyEmail(self):
  176. # return if logged in
  177. if self.Login == False:
  178. return False
  179.  
  180. node = 'users/%s/email'%(self.username)
  181. query = '?client_type=TN_ANDROID&client_id=%s'%(self.Login)
  182. sign = self.genSignature("POST", node, query)
  183. req = self.sendReq("POST", "%s%s%s"%(self.API_URL, node, query), sign)
  184. return req
  185.  
  186. EMAIL = "pjssm622@gmail.com" # Textnow Account EMAIL
  187. PASSWORD = "Aa120477491" # Textnow Account PASSWORD
  188.  
  189.  
  190. TN = Textnow(EMAIL, PASSWORD)
  191. TN.login()
  192. msgSend = TN.sendMessage("17328583016", "Message")
  193. if msgSend != False: # Send Message
  194. print "Message sent. ID: %s"%(msgSend)
  195. # print TN.userInfo
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement