Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import requests
- import md5
- import json
- import urllib
- from collections import OrderedDict
- class Textnow:
- API_URL = 'http://api.textnow.me/api2.0/'
- SIGN_KEY = 'f8ab2ceca9163724b6d126aea9620339'
- USER_AGENT = 'TextNow 5.15.0 (Android SDK built for x86; Android OS 5.1.1; en_US)'
- def __init__(self, TN_username, TN_password):
- self.TN_username = TN_username
- self.TN_password = TN_password
- self.Login = False
- self.username = None
- self.userInfo = None
- def genSignature(self, method, node, query):
- return md5.new("%s%s%s%s"%(self.SIGN_KEY, method, node, str(query).replace("\\\\", "\\"))).hexdigest() # Signature Pattern in GITHUB README
- def genJson(self, data):
- return json.dumps(data, sort_keys=False, separators=(',', ':'))
- def sendReq(self, method, url, sign, data=None):
- url = "%s%s"%(url, "&signature=" + sign)
- if method == "POST":
- if data == None:
- return requests.post(url, headers={'User-Agent':self.USER_AGENT}).json()
- return requests.post(url, data={'json':str(data).replace("\\\\", "\\")}, headers={'User-Agent':self.USER_AGENT}).json()
- if method == "PATCH":
- return requests.patch(url, data={'json':str(data).replace("\\\\", "\\")}, headers={'User-Agent':self.USER_AGENT}).text
- if method == "GET":
- return requests.get(url, headers={'User-Agent':self.USER_AGENT}).json()
- def login(self):
- # return if logged in
- if self.Login != False:
- return True
- node = "sessions"
- query = "?client_type=TN_ANDROID"
- loginData = OrderedDict([
- ('password', self.TN_password),
- ('username', self.TN_username),
- ('esn', '00000000000000'),
- ('os_version', '22'),
- ('app_version', '5.15.0'),
- ('iccid', '89014103211118510720')
- ])
- jsonData = self.genJson(loginData)
- sign = self.genSignature("POST", node, query + jsonData)
- req = self.sendReq("POST", "%s%s%s"%(self.API_URL, node, query), sign, jsonData)
- if 'id' in req:
- self.Login = req['id'] # id like AUTH_KEY
- self.username = req['username']
- self.userInfo = self.getInfoAboutUser()
- return True
- else:
- return False
- def getInfoAboutUser(self):
- if self.Login == False:
- return False
- node = 'users/%s'%(self.username)
- query = '?client_type=TN_ANDROID&client_id=%s'%(self.Login)
- sign = self.genSignature("GET", node, query)
- req = self.sendReq("GET", "%s%s%s"%(self.API_URL, node, query), sign)
- return req
- def getMessages(self, start_message_id = 1, page_size = 30, get_all = 1):
- if self.Login == False:
- return False
- node = 'users/%s/messages'%(self.username)
- 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)
- sign = self.genSignature("GET", node, query)
- req = self.sendReq("GET", "%s%s%s"%(self.API_URL, node, query), sign)
- return req
- def getWallet(self):
- if self.Login == False:
- return False
- node = 'users/%s/wallet'%(self.username)
- query = '?client_type=TN_ANDROID&client_id=%s'%(self.Login)
- sign = self.genSignature("GET", node, query)
- req = self.sendReq("GET", "%s%s%s"%(self.API_URL, node, query), sign)
- return req
- def sendMessage(self, number, msg):
- # return if logged in
- if self.Login == False:
- return False
- node = 'users/%s/messages'%(self.username)
- query = '?client_type=TN_ANDROID&client_id=%s'%(self.Login)
- msgData = OrderedDict([
- ('from_name', self.userInfo['first_name']),
- ('contact_type', '2'),
- ('contact_value', '+%s'%(number)),
- ('message', msg.replace("/", "\/")),
- ('to_name', '')
- ])
- jsonData = self.genJson(msgData)
- sign = self.genSignature("POST", node, query + jsonData)
- req = self.sendReq("POST", "%s%s%s"%(self.API_URL, node, query), sign, jsonData)
- return req['id']
- def changeFullName(self, first_name, last_name):
- # return if logged in
- if self.Login == False:
- return False
- node = 'users/%s'%(self.username)
- query = '?client_type=TN_ANDROID&client_id=%s'%(self.Login)
- msgData = OrderedDict([
- ('first_name', first_name),
- ('last_name', last_name)
- ])
- jsonData = self.genJson(msgData)
- sign = self.genSignature("PATCH", node, query + jsonData)
- req = self.sendReq("PATCH", "%s%s%s"%(self.API_URL, node, query), sign, jsonData)
- if req == "[]":
- return True
- else:
- return False
- def changeEmail(self, email):
- # return if logged in
- if self.Login == False:
- return False
- node = 'users/%s'%(self.username)
- query = '?client_type=TN_ANDROID&client_id=%s'%(self.Login)
- msgData = OrderedDict([
- ('email', email)
- ])
- jsonData = self.genJson(msgData)
- sign = self.genSignature("PATCH", node, query + jsonData)
- req = self.sendReq("PATCH", "%s%s%s"%(self.API_URL, node, query), sign, jsonData)
- if req == "[]":
- return True
- else:
- return False
- def changePassword(self, old_password, new_password):
- # return if logged in
- if self.Login == False:
- return False
- node = 'users/%s'%(self.username)
- query = '?client_type=TN_ANDROID&client_id=%s'%(self.Login)
- msgData = OrderedDict([
- ('old_password', old_password),
- ('password', new_password)
- ])
- jsonData = self.genJson(msgData)
- sign = self.genSignature("PATCH", node, query + jsonData)
- req = self.sendReq("PATCH", "%s%s%s"%(self.API_URL, node, query), sign, jsonData)
- if req == "[]":
- return True
- else:
- return False
- def resendVerifyEmail(self):
- # return if logged in
- if self.Login == False:
- return False
- node = 'users/%s/email'%(self.username)
- query = '?client_type=TN_ANDROID&client_id=%s'%(self.Login)
- sign = self.genSignature("POST", node, query)
- req = self.sendReq("POST", "%s%s%s"%(self.API_URL, node, query), sign)
- return req
- EMAIL = "pjssm622@gmail.com" # Textnow Account EMAIL
- PASSWORD = "Aa120477491" # Textnow Account PASSWORD
- TN = Textnow(EMAIL, PASSWORD)
- TN.login()
- msgSend = TN.sendMessage("17328583016", "Message")
- if msgSend != False: # Send Message
- print "Message sent. ID: %s"%(msgSend)
- # print TN.userInfo
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement