def mulRefreshToken(isHost): global counts print("[nkBot]>开始获取Refresh Token") account = MySqlDao() res = account.exec("SELECT * FROM nikeaccount where refreshToken is NULL") for re in res: refreshToken(re[0], re[1], re[2])
def getEntryResults1(limit = ''): orders = MySqlDao() if limit != '': list = orders.rows("SELECT * FROM `nikeorder` where results is null limit "+limit) else: list = orders.rows("SELECT * FROM `nikeorder` where results is null limit ") while 1: if len(list) == 0: break for re in list: if (re[2]): headers = {"authorization": "Bearer " + re[2]} try: response = requests.get("https://api.nike.com/launch/entries/v2/" + re[1], headers=headers).json() except: print ("ban ip") try: if response["waitingReason"]=="OUT_OF_STOCK": print ("NonWinner") orders.exec("UPDATE `nikeorder` SET `results`='fail' WHERE orderid = '"+re[1]+"'") print (response["waitingReason"]) except Exception: print (response) try: result = response["result"] except: continue if result["status"] == "WINNER": print ("[nkBot]Draw Enrty username:"******"UPDATE `nikeorder` SET `results`='success' WHERE orderid = '"+re[1]+"'") elif result["status"] == "NON_WINNER": print ("NonWinner") orders.exec("UPDATE `nikeorder` SET `results`='fail' WHERE orderid = '"+re[1]+"'")
def mulLaunchEntry(nikeitems, useHost=False, limit=''): account = MySqlDao() if limit != '': res = account.rows( "select * from nikeaccount where `token` is not null ORDER BY accessTime DESC limit " + limit) else: res = account.rows( "select * from nikeaccount where `token` is not null ORDER BY accessTime DESC " ) # res = account.rows("select * from nikeaccount where `id` = 101 ORDER BY accessTime DESC") print("[nkBot]System>Start Entry") print("[nkBot]System>This Task have " + str(len(res)) + " accouts") if useHost: host = getProxy() else: host = '0.0.0.0' data = [] for re in res: nikeaccount = NikeAccount(re[1], re[2], host, re[5]) if nikeaccount: nikeitem = choice(nikeitems) data.append((nikeaccount, nikeitem)) pool = ThreadPoolExecutor() responseList = list(pool.map(launchEntrie, data)) return responseList
def registerFromExcel(): f = xlrd.open_workbook('account.xlsx') table = f.sheet_by_index(0) nrows = table.nrows sqlite = MySqlDao() print (nrows) for i in range(nrows): email = table.cell(i,0).value pwd = table.cell(i,1).value sql = "INSERT INTO `nikeaccount`(`email`, `password`) VALUES ('"+email+"','"+pwd+"')" sqlite.exec(sql)
def registerFromTxt(): f = open("account.txt","r") line = f.readline() count = 0 while line: line = line.split(':') email = line[0] pwd = line[1] sql = "INSERT INTO `nikeaccount`(`email`, `password`) VALUES ('"+email+"','"+pwd+"')" mysql = MySqlDao() mysql.exec(sql) count+=1 line = f.readline() f.close()
def registerFromTxtWithRefreshToken(): rootPath = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) f = open(rootPath+os.sep+"account-token.txt","r") line = f.readline() count = 0 while line: line = line.split(',') email = line[0] pwd = line[1] phone = '' token = line[3] clientId = line[2] sql = "insert into nikeaccount (email, password, phone, refreshToken, clientId) VALUES ('"+email+"','"+pwd+"','"+phone+"','"+token+"','"+clientId+"')" mysql = MySqlDao() mysql.exec(sql) count+=1 print("[nkBot]>Import "+str(count)+"st Account") line = f.readline() f.close()
def mulAcToken(isHost, limit=''): print(time.strftime('%Y/%m/%d %H:%M:%S', time.localtime(time.time()))) logger = Logger('AccessToken') account = MySqlDao() # res = account.rows("select * from nikeaccount where id >50 and id <= 100") if limit != '': res = account.rows("select * from nikeaccount limit " + limit) else: res = account.rows("select * from nikeaccount") print("[nkBot]>get " + str(len(res)) + " accounts Access Token") data = [] for re in res: if re[4] and re[8]: data.append((re[0], re[4], re[8], isHost)) if len(data): pool = ThreadPoolExecutor() res = list(pool.map(accessToken, data)) logger.write(res) else: pass
def accessToken(tup): id, token, client_id, isHost = tup url = 'https://api.nike.com/idn/shim/oauth/2.0/token' data = { # 'client_id':'HlHa2Cje3ctlaOqnxvgZXNaAs7T9nAuH', 'client_id': client_id, 'grant_type': 'refresh_token', 'ux_id': 'com.nike.commerce.snkrs.ios', 'refresh_token': token } try: if isHost: a = httpRequest.Post(url=url, data=data, proxy=True, timeout=TimeOut) # a = requests.post('https://api.nike.com/idn/shim/oauth/2.0/token',json=data,verify=False,proxies=proxies, timeout=TimeOut) else: a = requests.post('https://api.nike.com/idn/shim/oauth/2.0/token', json=data, verify=False, timeout=TimeOut) except Exception: return "[nkBot]" + str(id) + ">代理连接失败!" try: access_token = a.json()['access_token'] except Exception: account = MySqlDao() account.exec( "UPDATE `nikeaccount` SET `token`= 'fail',`accessTime`='" + str(time.time()) + "' WHERE id = " + str(id)) return "[nkBot]" + str(id) + ">Update Access Token Fail:" + str( a.json()) account = MySqlDao() account.exec("UPDATE `nikeaccount` SET `token`= '" + access_token + "',`accessTime`='" + str(time.time()) + "' WHERE id = " + str(id)) return "[nkBot]" + str(id) + ">Update Access Token Success!"
def refreshToken(accountId, username, password, host='0.0.0.0'): global counts account = MySqlDao() try: print("username" + username) token = getTokenEmail('refresh_token', username, password, host) except Exception: counts -= 1 account.exec("UPDATE `nikeaccount` SET `time`='failOnce' WHERE id = " + str(accountId)) print('[nkBot]>update fail') return account.exec("UPDATE `nikeaccount` SET `refreshToken`= '" + token + "',`time`='" + time.asctime(time.localtime(time.time())) + "' WHERE id = " + str(accountId)) print("[nkBot]Update " + username + "-" + password + " token.") counts -= 1 return
except Exception: print (response) try: result = response["result"] except: continue if result["status"] == "WINNER": print ("[nkBot]Draw Enrty username:"******"UPDATE `nikeorder` SET `results`='success' WHERE orderid = '"+re[1]+"'") elif result["status"] == "NON_WINNER": print ("NonWinner") orders.exec("UPDATE `nikeorder` SET `results`='fail' WHERE orderid = '"+re[1]+"'") orders = MySqlDao() def getEntryResults(): orderList = orders.rows("SELECT * FROM `nikeorder` where results is null ") entryLoop(orderList) def updateOrders(ids,result): id = ",".join(ids) orders.exec("UPDATE `nikeorder` SET `results`='" +result+ "' WHERE id in (" + id + ")") def entryLoop(orderList): if len(orderList) == 0: return 0 if len(orderList) == 0: return 0 data = []
def launchEntrie(tup): account, item = tup global EntryList pTOKEN = getPaymentToken(account, item) setCheckoutId(account, item) PCS = getPriceChecksum(account) proxies = {'http': account.host, 'https': account.host} url = "https://api.nike.com/launch/entries/v2" deviceId = generatefingerprint() headers = { "Authorization": "Bearer " + account.access_token, "Content-Type": "application/json", 'x-acf-sensor-data': XAcfSensorData, "x-nike-caller-id": xNikeCaller, "User-Agent": UserAgent, "X-NewRelic-ID": "VQYGVF5SCBADUVBRBgAGVg==" } data = { "deviceId": deviceId, "postpayLink": item.postpayLink, "checkoutId": account.checkoutId, "currency": "CNY", "paymentToken": pTOKEN, "shipping": { "recipient": account.launchRecipient, "method": "GROUND_SERVICE", "address": account.launchAddress }, "skuId": item.skuId, "channel": "SNKRS", "launchId": item.launchId, "priceChecksum": PCS, "locale": "zh_CN" } if account.host == '0.0.0.0': try: response = requests.post(url, headers=headers, json=data).json() except requests.exceptions.Timeout: print("[nkBot]Error>noHost>Timeout>Connect Entry Fail!") return except Exception: print("[nkBot]Error>noHost>Connect Entry Fail!") return else: try: response = requests.post(url, headers=headers, json=data, proxies=proxies).json() except requests.exceptions.Timeout: print("[nkBot]Error>Host>Timeout>Connect Entry Fail!") return except Exception: print("[nkBot]Error>Host>Connect Entry Fail!") return try: na = MySqlDao() sql = "INSERT INTO nikeorder( orderid, accessToken, accountName) VALUES ('" + response[ 'id'] + "','" + account.access_token + "','" + account.username + "');" na.exec(sql) print("[nkBot]" + account.username + ">Entry Success!") except Exception: print("[nkBot]Error>" + account.username + ">Entry Fail!" + str(response)) na = MySqlDao() sql = "INSERT INTO nikeorder (accountName) VALUES ('fail');" na.exec(sql) return response