Brak opisu
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533
  1. import concurrent.futures
  2. import requests
  3. from concurrent.futures import ThreadPoolExecutor, as_completed
  4. from sqlalchemy import Column,String,create_engine
  5. #,event
  6. from sqlalchemy.orm import sessionmaker
  7. from sqlalchemy.ext.declarative import declarative_base
  8. import pyodbc
  9. import copy
  10. import pandas as pd
  11. import csv
  12. import requests
  13. import json
  14. import rsa
  15. import binascii
  16. import json
  17. import csv
  18. import pandas as pd
  19. import datetime
  20. import random
  21. import sys
  22. import time
  23. from bs4 import BeautifulSoup
  24. import re
  25. from PyQt5.QtCore import QThread, pyqtSignal
  26. from PyQt5.QtWidgets import (QApplication, QDialog,
  27. QProgressBar, QPushButton,QLabel)
  28. from PyQt5 import QtWidgets
  29. from PyQt5.QtCore import *
  30. from sqlalchemy import Column,String,create_engine
  31. from sqlalchemy.orm import sessionmaker
  32. from sqlalchemy.ext.declarative import declarative_base
  33. import pyodbc
  34. import os
  35. import logging
  36. import traceback
  37. import atexit
  38. FORMAT = '%(asctime)s %(levelname)s: %(message)s'
  39. logging.basicConfig(level=logging.INFO, filename='myLog.log', filemode='w', format=FORMAT)
  40. Base = declarative_base()
  41. class Logdata(Base):
  42. __tablename__ = 'LOGDB'
  43. 資料庫 = Column(String(20), primary_key=True)
  44. IP位置 = Column(String(20))
  45. 帳號 = Column(String(20))
  46. 密碼 = Column(String(20))
  47. class User(Base):
  48. __tablename__ = '客戶資料表'
  49. 客戶 = Column(String(20), primary_key=True)
  50. 資料庫 = Column(String(20))
  51. IP位置 = Column(String(20))
  52. 帳號 = Column(String(20))
  53. 密碼 = Column(String(20))
  54. class DateF(Base):
  55. __tablename__ = '查詢時間'
  56. 開始=Column(String(20), primary_key=True)
  57. 結束=Column(String(20))
  58. 是否全導=Column(String(20))
  59. class Someoneupdate(Base):
  60. __tablename__ = '自動導入判斷'
  61. 正在自動導入中= Column(String(20), primary_key=True)
  62. def loadCSV():
  63. try:
  64. with open('000.csv', newline='') as csvfile:
  65. rows = csv.reader(csvfile)
  66. csvvrow=[]
  67. for row in rows:
  68. csvvrow.append(row)
  69. coustomtxt=(csvvrow[1][0])
  70. bdtxtcrypto=(csvvrow[2][0])
  71. #====================================解密==========================
  72. PRIVATTTTT=693199020841184529005187339596013597950466957598599888793608033530271219415853952414609432155441426597962873618644988823224505129033188472492232565627111731743840442387622658441932249274048207290194890312931801018119336565101207159089093817844379836520246765598761731093447853178093855957965143730121353938159096214435813116478583463281838568325696377260624492699103838269489173425735163766515881745838239102851526971498900537039965925229366981233886305256752613857576375123305107336285923247046744901857058559811348110224118414002814652550587381981742663420856507553321403129123387307759852585845583253705194423896104474967966535066409675943348475929657759428664521337873475544406762447015072876289975051669953965932555224693025757002523361150649200905802416556626834350633483715061798581642291839762255979334372982156774414505811030453728205541010293992016524698689810201483053731487961892768615175941360043106707261541518852778287823654935902238415934276399863697899069150965902889645358960710613979521286008786269668237598187906056491031301559442316212834296436205439154886053776090316790598915161638161668892006476380622662058436463540372859165165728327478177043147902958378365406901451035507793539047616182219516942468776336379
  73. #PrivateKey
  74. A1=435136098972877768874748645248339158125703956065257805897130489515873898645785064137580564100320503666838498219287367368030775233887671705599248600291953393231454780648861079171195672717473628632853618453449217420455794237632155291175461656351373149436294485404694429947256530385791280349340495413483412113186857182441596591220416636342090069157129915377951859333634936029548424638926391232291634636038258059603109206715187896810765799441703590963590776385210580000409455669280693512175818186066741512695081131148497030784289903926969375944559780083722346620544362180693184053719440253987062360057770451705216722616373945761278697477867656454308042535057052004210508850990364826097246310462235289453838547367442863138161099765610183693493835956264409463595891562624222255540841617618186384919177648960630843478742501992844305124096538648231123014949030890404247398161443680124720970242595119682693770042136274011065565273819531541118246115073819134261046370918950429149073365625538812772489582690787721407799409054150416184648077711942774002489730938839028835996373562349388498470086161265863994312489374464512279091382150353090705188164569282723516063722137626802108564462453248942121100848000690940344201632450119420978307322308945
  75. A2=9627714051932950193134188501742994592784042206914443459734438308841410040354738469881718445461422881776007294906803790685427277699734850787185938262102876531473114260174800542552232307443022494368143100728406826855674366796656059054215802558213346170105688323652674928367680251460924362233864869984871966783909100785712414620921144535418728448391075664442600744983428543175164409720230286595771434578391588137898216407341812591598354427012529961000712417819821596260309468611766323842906019082923549785615976305556417630687246871293866806059225782724368215141401076633953519395967986211659258251543120569378038365122086876706827618666557619122782700896147
  76. A3=72000374865933143340744306653169834428832683081115110740204100237805467875781399111076588189449270231784547205065314993551385284482420372845976820023615822918370850049018336485262561074750111640775157594829249815372287322731748252778906894672575675394415480712584447066603079224388770970172603768779881242086210954654794512868330782099170594476257989194451530266257956383540560124814995186866139904562390161487741092810396910518052928540664299189962055810713116703112503213279177866017925218355080344908808970420740591501342146164000394175136511345019472809580649061686926648057
  77. bdtxtcrypto=bdtxtcrypto.encode('utf8')
  78. print(bdtxtcrypto)
  79. print(type(bdtxtcrypto))
  80. bdtxtcrypto=binascii.a2b_hex(bdtxtcrypto)
  81. mmmmm=rsa.decrypt(bdtxtcrypto,rsa.PrivateKey(PRIVATTTTT,65537,A1,A2,A3))
  82. bdtxt=(mmmmm.decode('utf8'))
  83. #====================================解密==========================
  84. return coustomtxt,bdtxt
  85. except:
  86. traceback.print_exc() # 捕捉異常,並將異常傳播資訊輸出控制檯
  87. traceback.print_exc(file=open('log.txt', 'a'))
  88. logging.debug('debug message',exc_info=True)
  89. logging.info('info message',exc_info=True)
  90. logging.warning('warning message',exc_info=True)
  91. logging.error('error message',exc_info=True)
  92. logging.critical('critical message',exc_info=True)
  93. app1 = QtWidgets.QApplication([])
  94. error_dialog = QtWidgets.QErrorMessage()
  95. error_dialog.setWindowTitle('ERROR')
  96. error_dialog.showMessage('無法取得000.csv')
  97. app1.exec_()
  98. def connectEngine(coustomtxt,engine):
  99. try:
  100. DB_session = sessionmaker(engine)
  101. db_session = DB_session()
  102. comDbUserData=db_session.query(User).filter(User.客戶.like(coustomtxt)).all()
  103. UserDbName=comDbUserData[0].資料庫
  104. UserIPName=comDbUserData[0].IP位置
  105. UserAdName=comDbUserData[0].帳號
  106. UserPdName=comDbUserData[0].密碼
  107. engine3 = create_engine('mssql+pyodbc://'+UserAdName+':'+UserPdName+'@'+UserIPName+'/'+UserDbName+'?driver=SQL+Server+Native+Client+11.0',fast_executemany=True)
  108. # engine3 = create_engine('mssql+pyodbc://'+UserAdName+':'+UserPdName+'@'+UserIPName+'/'+UserDbName+'?driver=SQL+Server+Native+Client+11.0')
  109. return engine3
  110. except:
  111. traceback.print_exc() # 捕捉異常,並將異常傳播資訊輸出控制檯
  112. traceback.print_exc(file=open('log.txt', 'a'))
  113. logging.debug('debug message',exc_info=True)
  114. logging.info('info message',exc_info=True)
  115. logging.warning('warning message',exc_info=True)
  116. logging.error('error message',exc_info=True)
  117. logging.critical('critical message',exc_info=True)
  118. app1 = QtWidgets.QApplication([])
  119. error_dialog = QtWidgets.QErrorMessage()
  120. error_dialog.setWindowTitle('ERROR')
  121. error_dialog.showMessage('資料連線失敗')
  122. app1.exec_()
  123. def DateDataLoad(engine3,db_session2):
  124. try:
  125. #engine3=connectEngine()
  126. Datefind=db_session2.query(DateF).all()
  127. startdatekey=Datefind[0].開始
  128. enddatekey=Datefind[0].結束
  129. allpart=Datefind[0].是否全導
  130. return startdatekey,enddatekey,allpart
  131. except:
  132. traceback.print_exc() # 捕捉異常,並將異常傳播資訊輸出控制檯
  133. traceback.print_exc(file=open('log.txt', 'a'))
  134. logging.debug('debug message',exc_info=True)
  135. logging.info('info message',exc_info=True)
  136. logging.warning('warning message',exc_info=True)
  137. logging.error('error message',exc_info=True)
  138. logging.critical('critical message',exc_info=True)
  139. app1 = QtWidgets.QApplication([])
  140. error_dialog = QtWidgets.QErrorMessage()
  141. error_dialog.setWindowTitle('ERROR')
  142. error_dialog.showMessage('導入日期資料失敗')
  143. app1.exec_()
  144. def LoadCustomData(engine3,allpart):
  145. try:
  146. editim = "CC1,CC2,CC3,CC4,CC5,CC6,CC7,CC8,CC9,CC10,CC11,CC12,CC13,CC14,CC15,CC16,CC17,CC18,CC19,CC20,CC21,CC22,CC23,CC24,CC25,CC26,CC27,CC28,CC29,CC30,CC31,CC32,CC33,CC34,CC35,CC36,CC37,CC38"
  147. if thisfile=="A1.txt":
  148. if (allpart=="0"):
  149. #有外埔 ca5-mfr7.cm589.net 28ss
  150. #無外補 c39-4gb93.cw8889.net top009
  151. #pos1.2b598.net
  152. #)"#
  153. #www.bb5858.net
  154. #ku01
  155. #aa8888
  156. #www.fpk357.com
  157. #wa.jar199.com
  158. #168aq
  159. text3="SELECT TOP(1000) 網址, 帳號, 密碼 ,備用網址 FROM 商客基本資料表 WHERE (上一層='0')"# and 網址='wa.jar199.com' and 帳號='168aq')"
  160. text4="SELECT TOP(1000) "+editim+" FROM 商客基本資料表 WHERE (上一層='0')"# and 網址='wa.jar199.com' and 帳號='168aq')"
  161. CA_SQL="SELECT TOP(1000) 網址, 帳號, 主帳號 ,備用網址 FROM 商客基本資料表 WHERE (上一層='1')"# and 網址='wa.jar199.com' and 帳號='168aq')"
  162. else:
  163. text3="SELECT TOP(1000) 網址, 帳號, 密碼 ,備用網址 FROM 商客資料暫存檔 WHERE (上一層='0')"# and 網址='wa.jar199.com' and 帳號='168aq')"
  164. text4="SELECT TOP(1000) "+editim+" FROM 商客基本資料表 WHERE (上一層='0')"# and 網址='wa.jar199.com' and 帳號='168aq')"
  165. CA_SQL="SELECT TOP(1000) 網址, 帳號, 主帳號 ,備用網址 FROM 商客資料暫存檔 WHERE (上一層='1')"# and 網址='wa.jar199.com' and 帳號='168aq')"
  166. elif thisfile=="A2.txt":
  167. if (allpart=="0"):
  168. text3="SELECT TOP(1000) 網址, 帳號, 密碼 ,備用網址 FROM 後台商客基本資料表 WHERE (上一層='0')"# and 網址='www.bb5858.net' and 帳號='c0000')"
  169. text4="SELECT TOP(1000) "+editim+" FROM 商客基本資料表 WHERE (上一層='0')"# and 網址='wa.jar199.com' and 帳號='168aq')"
  170. CA_SQL="SELECT TOP(1000) 網址, 帳號, 主帳號 ,備用網址 FROM 後台商客基本資料表 WHERE (上一層='1')"# and 網址='www.bb5858.net' and 帳號='c0000')"
  171. else:
  172. text3="SELECT TOP(1000) 網址, 帳號, 密碼 ,備用網址 FROM 後台商客資料暫存檔 WHERE (上一層='0')"# and 網址='www.bb5858.net' and 帳號='c0000')"
  173. text4="SELECT TOP(1000) "+editim+" FROM 商客基本資料表 WHERE (上一層='0')"# and 網址='wa.jar199.com' and 帳號='168aq')"
  174. CA_SQL="SELECT TOP(1000) 網址, 帳號, 主帳號 ,備用網址 FROM 後台商客資料暫存檔 WHERE (上一層='1')"# and 網址='www.bb5858.net' and 帳號='c0000')"
  175. loopper2=pd.read_sql(text3,engine3)
  176. childAdminLs=pd.read_sql(CA_SQL,engine3)
  177. loopper3=pd.read_sql(text4,engine3)
  178. contforloop=len(loopper2)
  179. loopper2=loopper2.values
  180. loopper3=loopper3.values
  181. childAdminLs=childAdminLs.values
  182. print(loopper2)
  183. print(len(loopper3[0]))
  184. if thisfile=="A2.txt":
  185. x=0
  186. while x != len(loopper3[0]):
  187. loopper3[0][x] = True
  188. x+=1
  189. print(loopper3)
  190. return contforloop,loopper2,childAdminLs,loopper3
  191. except:
  192. traceback.print_exc() # 捕捉異常,並將異常傳播資訊輸出控制檯
  193. traceback.print_exc(file=open('log.txt', 'a'))
  194. logging.debug('debug message',exc_info=True)
  195. logging.info('info message',exc_info=True)
  196. logging.warning('warning message',exc_info=True)
  197. logging.error('error message',exc_info=True)
  198. logging.critical('critical message',exc_info=True)
  199. app1 = QtWidgets.QApplication([])
  200. error_dialog = QtWidgets.QErrorMessage()
  201. error_dialog.setWindowTitle('ERROR')
  202. error_dialog.showMessage('無基本資料')
  203. app1.exec_()
  204. def CreateLogEngine():
  205. try:
  206. DB_session_log = sessionmaker(engine)
  207. db_session_log= DB_session_log()
  208. Log_database=db_session_log.query(Logdata).all()
  209. LogDbName=Log_database[0].資料庫
  210. LogIPName=Log_database[0].IP位置
  211. LogAdName=Log_database[0].帳號
  212. LogPdName=Log_database[0].密碼
  213. log_Engine=create_engine('mssql+pyodbc://'+LogAdName+':'+LogPdName+'@'+LogIPName+'/'+LogDbName+'?driver=SQL+Server+Native+Client+11.0')
  214. return log_Engine
  215. except:
  216. traceback.print_exc() # 捕捉異常,並將異常傳播資訊輸出控制檯
  217. traceback.print_exc(file=open('log.txt', 'a'))
  218. logging.debug('debug message',exc_info=True)
  219. logging.info('info message',exc_info=True)
  220. logging.warning('warning message',exc_info=True)
  221. logging.error('error message',exc_info=True)
  222. logging.critical('critical message',exc_info=True)
  223. app1 = QtWidgets.QApplication([])
  224. error_dialog = QtWidgets.QErrorMessage()
  225. error_dialog.setWindowTitle('ERROR')
  226. error_dialog.showMessage('記錄連線失敗')
  227. app1.exec_()
  228. def LongFirstLogin(urlkey,adminkey,passkey):
  229. try:
  230. #===========================================================網站需要的加密
  231. print(urlkey)
  232. pubkey="B0C1D0E12B47DA93A24C7422D433170A4D5B126A27CED6F3087652723562889803E2280041F02E6B24A251C928EBE5BA12501D466D63A43AD5D88A5809A09271F14FD220C0DAE272CAAF9F1CF09DAF52005272529071723C0CB87B5A6392860CA2E72B23A4652910DB87BAC31D89E4DD23B3C56AAE685D9A14C4CC89862AAA27"
  233. rsaPublickey = int(pubkey,16)
  234. key = rsa.PublicKey(rsaPublickey,65537)
  235. message='{\"Account\":\"'+adminkey+'\",\"Password\":\"'+passkey+'\"}'
  236. message=message.encode('utf8')
  237. #passwd = rsa.encrypt(message,key)
  238. passwd = binascii.b2a_hex(rsa.encrypt(message,key)).decode()
  239. #=========================================================================
  240. Loginurl="http://"+urlkey+"/api/shared/login"
  241. headers1 = {
  242. 'Content-Length': '256',
  243. 'Content-Type': 'application/x-www-form-urlencoded'
  244. }
  245. response = requests.request("POST", Loginurl, headers=headers1, data=passwd, timeout=10,verify=False)
  246. return response
  247. except:
  248. response="無法取得資料"
  249. return response
  250. def LongSecondLogin(LFLresponse):
  251. try:
  252. LFLresponseJson=json.loads(LFLresponse.text)
  253. print("LFLresponseJson:"+str(LFLresponseJson))
  254. SecondLoginUrl=LFLresponseJson['Redirect']
  255. SecondLoginData=LFLresponseJson['Data']
  256. headers2 = {
  257. 'Content-Length': '514',
  258. 'Content-Type': 'application/x-www-form-urlencoded'
  259. }
  260. print(SecondLoginUrl)#debug
  261. GatewayUrl="http:"+SecondLoginUrl
  262. print("GatewayUrl"+GatewayUrl)
  263. LoginGatewayPostData="+="+SecondLoginData
  264. response2 = requests.request("POST", GatewayUrl, headers=headers2, data=LoginGatewayPostData, timeout=10,verify=False)
  265. return SecondLoginUrl,SecondLoginData,response2
  266. except:
  267. SecondLoginUrl=""
  268. SecondLoginData=""
  269. response2=""
  270. return SecondLoginUrl,SecondLoginData,response2
  271. def LongGetData(urlkey, adminkey, passkey, startDatekey, endDatekey,backupUrl,childAdminLs):
  272. print("URLLLLLLLLLLLLLL:"+str(urlkey))
  273. try:
  274. LFLresponse=LongFirstLogin(urlkey,adminkey,passkey)#第一層登入
  275. if LFLresponse=="無法取得資料":
  276. urlkey=backupUrl#使用備用網址
  277. LFLresponse=LongFirstLogin(urlkey,adminkey,passkey)
  278. if LFLresponse=="無法取得資料":
  279. fordebugger="無法取得資料"
  280. allll=pd.DataFrame()
  281. return allll,fordebugger,urlkey,adminkey
  282. if LFLresponse.status_code==200:
  283. SecondLoginUrl,SecondLoginData,LSLresponse=LongSecondLogin(LFLresponse)#第一層登入成功 登入第2層
  284. if LSLresponse=="":
  285. print('我從這邊出去的')
  286. allll,fordebugger,urlkey,adminkey=ShortGetData(urlkey, adminkey, passkey, startDatekey, endDatekey,childAdminLs)
  287. #fordebugger="無法取得資料"
  288. #allll=pd.DataFrame()
  289. return allll,fordebugger,urlkey,adminkey
  290. else:
  291. getnameurl = "http:"+SecondLoginUrl[:-21]+"/Admin/D/D02"
  292. cookie=LSLresponse.cookies
  293. cookie=dict(cookie)['ASP.NET_SessionId']
  294. print("cookie:"+str(cookie))
  295. GetDataUrl="http:"+SecondLoginUrl[:-21]+"/api/AdminD02Report1/MainQuery"#-21=-(/Command/LoginGateway)
  296. cookstring="ASP.NET_SessionId="+cookie
  297. headers88 = {
  298. 'X-Requested-With': 'XMLHttpRequest',
  299. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36',
  300. 'Content-Type': 'application/x-www-form-urlencoded',
  301. 'Cookie': cookstring,
  302. }
  303. response4 = requests.request("GET", getnameurl, headers=headers88, timeout=10,verify=False)
  304. print(response4.status_code)
  305. if response4.status_code != 200:
  306. getnameurl = "http:"+SecondLoginUrl[:-21]+"/Front/A/A08"
  307. response4 = requests.request("GET", getnameurl, headers=headers88, timeout=10,verify=False)
  308. print(response4.status_code)
  309. #print("respons4444444"+response4.text)
  310. soup3=BeautifulSoup(response4.text,"lxml")
  311. pattern = re.compile(r'Name:"(.*?)"',re.MULTILINE|re.DOTALL)
  312. #print(pattern)
  313. script = soup3.find("script", text=pattern)
  314. #print("SCRIPTTTTT:::::"+str(script))
  315. matches = re.finditer(r'Name:"(.*?)"', script.string, re.MULTILINE)
  316. matchend=[]
  317. badmatchend= ["單碰","配比包牌","雙面包牌","連碰","柱碰","一比四","套餐","連柱碰","雙星連碰柱","三星連碰柱","雙連碰","仟XXX","X佰XX","XX拾X","XXX個",
  318. "仟佰XX","仟X拾X","仟XX個","X佰拾X","X佰X個","XX拾個","仟佰拾X","仟佰X個","仟X拾個","X佰拾個","佰XX","X拾X","XX個","佰拾X","佰X個","X拾個"]
  319. for matchNum, match in enumerate(matches, start=1):
  320. #print ("在{start}-{end}找到匹配{matchNum}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
  321. for groupNum in range(0, len(match.groups())):
  322. groupNum = groupNum + 1
  323. if match.group(groupNum) not in matchend and match.group(groupNum) not in badmatchend:
  324. matchend.append(match.group(groupNum))
  325. #print ("在{start}-{end}找到组{groupNum}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
  326. write_csv(matchend,startDatekey,endDatekey,urlkey,adminkey,"101")
  327. print(matchend)
  328. print(loopper3)
  329. getData3 = ""
  330. if len(loopper3) > 0:
  331. if '迦納彩' in matchend and loopper3[0][37] == True:
  332. getData3 += "&GameType%5B%5D=35"
  333. #if '加州彩' in matchend and loopper3[0][34] == True:
  334. # getData3 += "&GameType%5B%5D=35"
  335. if '天天樂' in matchend and loopper3[0][6] == True:
  336. getData3 += "&GameType%5B%5D=22"
  337. if '威力' in matchend and loopper3[0][5] == True:
  338. getData3 += "&GameType%5B%5D=14"
  339. if '539' in matchend and loopper3[0][4] == True:
  340. getData3 += "&GameType%5B%5D=13"
  341. if '大樂' in matchend and loopper3[0][3] == True:
  342. getData3 += "&GameType%5B%5D=12"
  343. if '六合' in matchend and loopper3[0][2] == True:
  344. getData3 += "&GameType%5B%5D=11"
  345. if '三星彩' in matchend and loopper3[0][1] == True:
  346. getData3 += "&GameType%5B%5D=3"
  347. if '四星彩' in matchend and loopper3[0][0] == True:
  348. getData3 += "&GameType%5B%5D=2"
  349. if '十二不中' in matchend and loopper3[0][24] == True:
  350. getData3 += "&GroupType%5B%5D=160"
  351. if '十一不中' in matchend and loopper3[0][23] == True:
  352. getData3 += "&GroupType%5B%5D=159"
  353. if '十不中' in matchend and loopper3[0][22] == True:
  354. getData3 += "&GroupType%5B%5D=158"
  355. if '九不中' in matchend and loopper3[0][21] == True:
  356. getData3 += "&GroupType%5B%5D=157"
  357. if '八不中' in matchend and loopper3[0][20] == True:
  358. getData3 += "&GroupType%5B%5D=156"
  359. if '七不中' in matchend and loopper3[0][19] == True:
  360. getData3 += "&GroupType%5B%5D=155"
  361. if '六不中' in matchend and loopper3[0][18] == True:
  362. getData3 += "&GroupType%5B%5D=154"
  363. if '五不中' in matchend and loopper3[0][17] == True:
  364. getData3 += "&GroupType%5B%5D=153"
  365. if '五星' in matchend and loopper3[0][16] == True:
  366. getData3 += "&GroupType%5B%5D=118"
  367. if '天碰三' in matchend and loopper3[0][15] == True:
  368. getData3 += "&GroupType%5B%5D=109"
  369. if '天碰二' in matchend and loopper3[0][14] == True:
  370. getData3 += "&GroupType%5B%5D=108"
  371. if '四星' in matchend and loopper3[0][13] == True:
  372. getData3 += "&GroupType%5B%5D=107"
  373. if '三星' in matchend and loopper3[0][12] == True:
  374. getData3 += "&GroupType%5B%5D=106"
  375. if '二星' in matchend and loopper3[0][11] == True:
  376. getData3 += "&GroupType%5B%5D=105"
  377. if '特尾三' in matchend and loopper3[0][10] == True:
  378. getData3 += "&GroupType%5B%5D=104"
  379. if '台號' in matchend and loopper3[0][9] == True:
  380. getData3 += "&GroupType%5B%5D=103"
  381. if '特碼' in matchend and loopper3[0][8] == True:
  382. getData3 += "&GroupType%5B%5D=102"
  383. if '全車' in matchend and loopper3[0][7] == True:
  384. getData3 += "&GroupType%5B%5D=101"
  385. if '合單雙' in matchend and loopper3[0][33] == True:
  386. getData3 += "&GroupType%5B%5D=9"
  387. if '四字現' in matchend and loopper3[0][32] == True:
  388. getData3 += "&GroupType%5B%5D=8"
  389. if '三字現' in matchend and loopper3[0][31] == True:
  390. getData3 += "&GroupType%5B%5D=7"
  391. if '二字現' in matchend and loopper3[0][30] == True:
  392. getData3 += "&GroupType%5B%5D=6"
  393. if '一字現' in matchend and loopper3[0][29] == True:
  394. getData3 += "&GroupType%5B%5D=5"
  395. if '四定位' in matchend and loopper3[0][28] == True:
  396. getData3 += "&GroupType%5B%5D=4"
  397. if '三定位' in matchend and loopper3[0][27] == True:
  398. getData3 += "&GroupType%5B%5D=3"
  399. if '二定位' in matchend and loopper3[0][26] == True:
  400. getData3 += "&GroupType%5B%5D=2"
  401. if '一定位' in matchend and loopper3[0][25] == True:
  402. getData3 += "&GroupType%5B%5D=1"
  403. print(getData3)
  404. print(getData3.find("GameType"))
  405. getData= "Account="+getData3+"&StartDate="+startDatekey+"&EndDate="+endDatekey+"&IsNotShowNow=true"#FPK375#jnn688
  406. #====================================種類=================================
  407. #getData="Account=&GameType%5B%5D=14&GameType%5B%5D=22&GameType%5B%5D=13&GameType%5B%5D=11&GameType%5B%5D=12&GroupType%5B%5D=160&GroupType%5B%5D=159&GroupType%5B%5D=158&GroupType%5B%5D=157&GroupType%5B%5D=156&GroupType%5B%5D=155&GroupType%5B%5D=154&GroupType%5B%5D=153&GroupType%5B%5D=118&GroupType%5B%5D=109&GroupType%5B%5D=108&GroupType%5B%5D=107&GroupType%5B%5D=106&GroupType%5B%5D=105&GroupType%5B%5D=104&GroupType%5B%5D=103&GroupType%5B%5D=102&GroupType%5B%5D=101&StartDate"+startDatekey+"&EndDate="+endDatekey+"&IsNotShowNow=true"
  408. #getData= "Account=&GameType%5B%5D=35&GameType%5B%5D=22&GameType%5B%5D=11&GameType%5B%5D=12&GameType%5B%5D=13&GroupType%5B%5D=118&GroupType%5B%5D=109&GroupType%5B%5D=108&GroupType%5B%5D=102&GroupType%5B%5D=160&GroupType%5B%5D=159&GroupType%5B%5D=158&GroupType%5B%5D=157&GroupType%5B%5D=156&GroupType%5B%5D=155&GroupType%5B%5D=154&GroupType%5B%5D=153&GroupType%5B%5D=107&GroupType%5B%5D=106&GroupType%5B%5D=105&GroupType%5B%5D=104&GroupType%5B%5D=103&GroupType%5B%5D=101&StartDate="+startDatekey+"&EndDate="+endDatekey+"&IsNotShowNow=true"#FPK375#jnn688
  409. response3 = requests.request("POST", GetDataUrl, headers=headers88, data=getData, timeout=10,verify=False)
  410. if response3.status_code!=200:
  411. GetDataUrl="http:"+SecondLoginUrl[:-21]+"/api/FrontA08Report1/MainQuery"#-21=-(/Command/LoginGateway)
  412. response3 = requests.request("POST", GetDataUrl, headers=headers88, data=getData, timeout=10,verify=False)
  413. print(response3)
  414. print("AAAAA0")
  415. if response3.status_code==200:
  416. jsondata=json.loads(response3.text)
  417. print("AAAAA1")
  418. #print(jsondata)
  419. if response3.text=="null":
  420. getData= "Account=&GameType%5B%5D=14&GameType%5B%5D=22&GameType%5B%5D=11&GameType%5B%5D=12&GameType%5B%5D=13&GroupType%5B%5D=118&GroupType%5B%5D=109&GroupType%5B%5D=108&GroupType%5B%5D=102&GroupType%5B%5D=160&GroupType%5B%5D=159&GroupType%5B%5D=158&GroupType%5B%5D=157&GroupType%5B%5D=156&GroupType%5B%5D=155&GroupType%5B%5D=154&GroupType%5B%5D=153&GroupType%5B%5D=107&GroupType%5B%5D=106&GroupType%5B%5D=105&GroupType%5B%5D=104&GroupType%5B%5D=103&GroupType%5B%5D=101&StartDate="+startDatekey+"&EndDate="+endDatekey+"&IsNotShowNow=true"#FPK375#jnn688
  421. response3 = requests.request("POST", GetDataUrl, headers=headers88, data=getData, timeout=10,verify=False)
  422. print("AAAAA7")
  423. if response3.text=="null":
  424. #getData= "Account=&GameType%5B%5D=14&GameType%5B%5D=22&GameType%5B%5D=13&GameType%5B%5D=11&GameType%5B%5D=12&GroupType%5B%5D=160&GroupType%5B%5D=159&GroupType%5B%5D=158&GroupType%5B%5D=157&GroupType%5B%5D=156&GroupType%5B%5D=155&GroupType%5B%5D=154&GroupType%5B%5D=153&GroupType%5B%5D=118&GroupType%5B%5D=109&GroupType%5B%5D=108&GroupType%5B%5D=107&GroupType%5B%5D=106&GroupType%5B%5D=105&GroupType%5B%5D=104&GroupType%5B%5D=103&GroupType%5B%5D=102&GroupType%5B%5D=101&StartDate"+startDatekey+"&EndDate="+endDatekey+"&IsNotShowNow=true"
  425. getData= "Account=&GameType%5B%5D=22&GameType%5B%5D=11&GameType%5B%5D=12&GameType%5B%5D=13&GroupType%5B%5D=118&GroupType%5B%5D=109&GroupType%5B%5D=108&GroupType%5B%5D=102&GroupType%5B%5D=160&GroupType%5B%5D=159&GroupType%5B%5D=158&GroupType%5B%5D=157&GroupType%5B%5D=156&GroupType%5B%5D=155&GroupType%5B%5D=154&GroupType%5B%5D=153&GroupType%5B%5D=107&GroupType%5B%5D=106&GroupType%5B%5D=105&GroupType%5B%5D=104&GroupType%5B%5D=103&GroupType%5B%5D=101&StartDate="+startDatekey+"&EndDate="+endDatekey+"&IsNotShowNow=true"#FPK375#jnn688
  426. response3 = requests.request("POST", GetDataUrl, headers=headers88, data=getData, timeout=10,verify=False)
  427. print("AAAAA2")
  428. if response3.text=="null":
  429. #getData= "Account=&GameType%5B%5D=22&GameType%5B%5D=11&GameType%5B%5D=12&GameType%5B%5D=13&GroupType%5B%5D=118&GroupType%5B%5D=109&GroupType%5B%5D=108&GroupType%5B%5D=102&GroupType%5B%5D=160&GroupType%5B%5D=159&GroupType%5B%5D=158&GroupType%5B%5D=157&GroupType%5B%5D=156&GroupType%5B%5D=155&GroupType%5B%5D=154&GroupType%5B%5D=153&GroupType%5B%5D=107&GroupType%5B%5D=106&GroupType%5B%5D=105&GroupType%5B%5D=104&GroupType%5B%5D=103&GroupType%5B%5D=101&StartDate="+startDatekey+"&EndDate="+endDatekey+"&IsNotShowNow=true"#FPK375#jnn688
  430. getData= "Account=&GameType%5B%5D=11&GameType%5B%5D=12&GameType%5B%5D=13&GroupType%5B%5D=109&GroupType%5B%5D=108&GroupType%5B%5D=102&GroupType%5B%5D=160&GroupType%5B%5D=159&GroupType%5B%5D=158&GroupType%5B%5D=157&GroupType%5B%5D=156&GroupType%5B%5D=155&GroupType%5B%5D=154&GroupType%5B%5D=153&GroupType%5B%5D=107&GroupType%5B%5D=106&GroupType%5B%5D=105&GroupType%5B%5D=104&GroupType%5B%5D=103&GroupType%5B%5D=101&StartDate="+startDatekey+"&EndDate="+endDatekey+"&IsNotShowNow=true"#FPK375#jnn688
  431. response3 = requests.request("POST", GetDataUrl, headers=headers88, data=getData, timeout=10,verify=False)
  432. #responsetxt=response3.text
  433. #print(responsetxt)
  434. print("AAAAA3")
  435. if response3.text=="null":
  436. getData="Account=&GameType%5B%5D=22&GameType%5B%5D=13&GroupType%5B%5D=160&GroupType%5B%5D=159&GroupType%5B%5D=158&GroupType%5B%5D=157&GroupType%5B%5D=156&GroupType%5B%5D=155&GroupType%5B%5D=154&GroupType%5B%5D=153&GroupType%5B%5D=118&GroupType%5B%5D=107&GroupType%5B%5D=106&GroupType%5B%5D=105&GroupType%5B%5D=104&GroupType%5B%5D=103&GroupType%5B%5D=101&StartDate="+startDatekey+"&EndDate="+endDatekey+"&IsNotShowNow=true"#KPC365
  437. response3 = requests.request("POST", GetDataUrl, headers=headers88, data=getData, timeout=10,verify=False)
  438. print("AAAAA4")
  439. if response3.text=="null":
  440. getData="Account=&GameType%5B%5D=13&GroupType%5B%5D=160&GroupType%5B%5D=159&GroupType%5B%5D=158&GroupType%5B%5D=157&GroupType%5B%5D=156&GroupType%5B%5D=155&GroupType%5B%5D=154&GroupType%5B%5D=153&GroupType%5B%5D=107&GroupType%5B%5D=106&GroupType%5B%5D=105&GroupType%5B%5D=104&GroupType%5B%5D=103&GroupType%5B%5D=101&StartDate="+startDatekey+"&EndDate="+endDatekey+"&IsNotShowNow=true" #UJK555
  441. response3 = requests.request("POST", GetDataUrl, headers=headers88, data=getData, timeout=10,verify=False)
  442. print("AAAAA5")
  443. if response3.text=="null":
  444. #getData="Account=&GameType%5B%5D=22&GameType%5B%5D=11&GameType%5B%5D=12&GroupType%5B%5D=160&GroupType%5B%5D=159&GroupType%5B%5D=158&GroupType%5B%5D=157&GroupType%5B%5D=156&GroupType%5B%5D=155&GroupType%5B%5D=154&GroupType%5B%5D=153&GroupType%5B%5D=110&GroupType%5B%5D=109&GroupType%5B%5D=108&GroupType%5B%5D=107&GroupType%5B%5D=106&GroupType%5B%5D=105&GroupType%5B%5D=104&GroupType%5B%5D=103&GroupType%5B%5D=102&GroupType%5B%5D=101&StartDate="+startDatekey+"&EndDate="+endDatekey+"&IsNotShowNow=true" #UJK555
  445. getData="Account="+getData3+"&StartDate="+startDatekey+"&EndDate="+endDatekey+"&IsNotShowNow=true" #UJK555
  446. response3 = requests.request("POST", GetDataUrl, headers=headers88, data=getData, timeout=10,verify=False)
  447. print("AAAAA8")
  448. jsondata=json.loads(response3.text)
  449. #print(jsondata)
  450. print("AAAAA6")
  451. #====================================種類=========================================
  452. #====================================解析資料=====================================
  453. allll=[]
  454. if len(jsondata['DataList'])>0:
  455. #print(len(jsondata['DataList']))
  456. #print(jsondata['DataList'])
  457. #print(jsondata['DataList'][0]['NickName'])
  458. for i in range(len(jsondata['DataList'])):
  459. allll.append([])
  460. allll[i].append(jsondata['DataList'][i]['NickName']+"("+jsondata['DataList'][i]['Account']+")")
  461. allll[i].append(jsondata['DataList'][i]['TotBet'])
  462. allll[i].append(jsondata['DataList'][i]['TotBetRebate'])
  463. allll[i].append(jsondata['DataList'][i]['TotBetWinLose'])
  464. allll[i].append(jsondata['DataList'][i]['SubtotalTotWinLose'])
  465. for j in range(len(jsondata['DataList'][i]['ContributionPaid'])):
  466. allll[i].append(jsondata['DataList'][i]['ContributionPaid'][j]['TotPaid'])
  467. if len(jsondata['DataList'][i]['ContributionPaid'])<7:
  468. ReAdd=7-len(jsondata['DataList'][i]['ContributionPaid'])
  469. for z in range(ReAdd):
  470. allll[i].append(None)
  471. allll[i].append(jsondata['DataList'][i]['SubtotalTotDutyWinLose'])
  472. allll[i].append(jsondata['DataList'][i]['SubtotalRebateWinLoseDifference'])
  473. allll[i].append(jsondata['DataList'][i]['TotPaid'])
  474. allll[i].append(jsondata['DataList'][i]['SubtotalSelfTotWinLose'])
  475. try:
  476. allll[i].append(jsondata['DataList'][i]['PaidContributor'])
  477. except:
  478. allll[i].append(None)
  479. allll[i].append(jsondata['DataList'][i]['TotContribution'])
  480. allll[i].append(jsondata['DataList'][i]['SubtotalContribution'])
  481. try:
  482. allll[i].append(jsondata['DataList'][i]['TotControl'])
  483. except:
  484. allll[i].append(None)
  485. try:
  486. allll[i].append(jsondata['DataList'][i]['TotControlDuty'])
  487. except:
  488. allll[i].append(None)
  489. try:
  490. allll[i].append(jsondata['DataList'][i]['SystemDuty'])
  491. except:
  492. allll[i].append(None)
  493. print(allll)
  494. allll=pd.DataFrame(allll)
  495. allll.columns =["名稱","總量","退水","中獎","輸贏","會員","代理","總代理","股東","大股東","總監","大總監","佔成輸贏","水倍差","上繳金額","自已總輸贏","上繳貢獻額","貢獻額","貢獻度","調盤退水","調退實佔","系統商"]
  496. fordebugger="OK"
  497. else:
  498. allll=pd.DataFrame()
  499. fordebugger="查詢期間無資料"
  500. #=================================解析資料=============================================
  501. #================================插入資訊==============================================
  502. WEBURLTXT=[]
  503. ADMINTXT=[]
  504. StartDATETXT=[]
  505. EndDATETXT=[]
  506. TIMERAND=[]
  507. nowTime=datetime.datetime.now().strftime("%m%d%H%M%S")
  508. randomNum=random.randint(0,10000);
  509. if randomNum<10:
  510. randomNum=str(0)+str(0)+str(0)+str(randomNum)
  511. elif randomNum>10 and randomNum<100:
  512. randomNum=str(0)+str(0)+str(randomNum)
  513. elif randomNum>100 and randomNum<1000:
  514. randomNum=str(0)+str(randomNum)
  515. uniqueNum=str(nowTime)+str(randomNum)
  516. for i in range(len(allll)):
  517. WEBURLTXT.append(urlkey)
  518. ADMINTXT.append(adminkey)
  519. StartDATETXT.append(startDatekey)
  520. EndDATETXT.append(endDatekey)
  521. TIMERAND.append(None)
  522. allll.insert(0,"開始日期",StartDATETXT)
  523. allll.insert(1,"結束日期",EndDATETXT)
  524. allll.insert(2,"網址",WEBURLTXT)
  525. allll.insert(3,"帳戶",ADMINTXT)
  526. allll.insert(4,"隨機碼",TIMERAND)
  527. print(allll)
  528. #=====================================================================================
  529. refind=pd.DataFrame(columns =["開始日期","結束日期","網址","帳戶","名稱","總量","退水","中獎","輸贏","佔成輸贏","水倍差","上繳金額","自已總輸贏","上繳貢獻額","貢獻額","貢獻度","下注明細","玩法明細","調盤退水","調退實佔","上繳","會員","代理","總代理","股東","大股東","總監","大總監","系統商","隨機碼"])
  530. #refind=pd.DataFrame(columns =["開始日期","結束日期","網址","帳戶","名稱","總量","退水","中獎","輸贏","佔成輸贏","水倍差","上繳金額","自已總輸贏","上繳貢獻額","貢獻額","貢獻度","下注明細","玩法明細","調盤退水","調退實佔","上繳","會員","代理","總代理","股東","大股東","總監","隨機碼"])
  531. allll=pd.concat([refind,allll],ignore_index = True)
  532. end = time.time()
  533. print("執行時間:%f 秒" % (end - start))
  534. #子帳號 #========================================================================================
  535. doneChild=pd.DataFrame(columns =["開始日期","結束日期","網址","帳戶","名稱","總量","退水","中獎","輸贏","佔成輸贏","水倍差","上繳金額","自已總輸贏","上繳貢獻額","貢獻額","貢獻度","下注明細","玩法明細","調盤退水","調退實佔","上繳","會員","代理","總代理","股東","大股東","總監","大總監","系統商","隨機碼"])
  536. print("childAdminLschildAdminLs:"+str(len(childAdminLs)))
  537. for i in range(len(childAdminLs)):
  538. childallll=pd.DataFrame()
  539. if (urlkey==childAdminLs[i][0] or urlkey==childAdminLs[i][3]) and adminkey== childAdminLs[i][2]:
  540. childAdmin=childAdminLs[i][1]
  541. print(childAdmin)
  542. getData= "Account="+childAdminLs[i][1]+getData3+"&StartDate="+startDatekey+"&EndDate="+endDatekey+"&IsNotShowNow=true"#FPK375#jnn688
  543. #getData= "Account="+childAdminLs[i][1]+"&GameType%5B%5D=35&GameType%5B%5D=22&GameType%5B%5D=11&GameType%5B%5D=12&GameType%5B%5D=13&GroupType%5B%5D=118&GroupType%5B%5D=109&GroupType%5B%5D=108&GroupType%5B%5D=102&GroupType%5B%5D=160&GroupType%5B%5D=159&GroupType%5B%5D=158&GroupType%5B%5D=157&GroupType%5B%5D=156&GroupType%5B%5D=155&GroupType%5B%5D=154&GroupType%5B%5D=153&GroupType%5B%5D=107&GroupType%5B%5D=106&GroupType%5B%5D=105&GroupType%5B%5D=104&GroupType%5B%5D=103&GroupType%5B%5D=101&StartDate="+startDatekey+"&EndDate="+endDatekey+"&IsNotShowNow=true"#FPK375#jnn688
  544. response3child = requests.request("POST", GetDataUrl, headers=headers88, data=getData, timeout=10,verify=False)
  545. jsondata=json.loads(response3child.text)
  546. print("chiAAAAA12")
  547. #print(jsondata)
  548. if response3child.text=="null":
  549. getData= "Account="+childAdmin+"&GameType%5B%5D=14&GameType%5B%5D=22&GameType%5B%5D=13&GameType%5B%5D=11&GameType%5B%5D=12&GroupType%5B%5D=118&GroupType%5B%5D=109&GroupType%5B%5D=108&GroupType%5B%5D=102&GroupType%5B%5D=160&GroupType%5B%5D=159&GroupType%5B%5D=158&GroupType%5B%5D=157&GroupType%5B%5D=156&GroupType%5B%5D=155&GroupType%5B%5D=154&GroupType%5B%5D=153&GroupType%5B%5D=107&GroupType%5B%5D=106&GroupType%5B%5D=105&GroupType%5B%5D=104&GroupType%5B%5D=103&GroupType%5B%5D=101&StartDate="+startDatekey+"&EndDate="+endDatekey+"&IsNotShowNow=true"#FPK375#jnn688
  550. response3child = requests.request("POST", GetDataUrl, headers=headers88, data=getData, timeout=10,verify=False)
  551. print("chiAAAAA13")
  552. if response3child.text=="null":
  553. getData= "Account="+childAdmin+"&GameType%5B%5D=22&GameType%5B%5D=11&GameType%5B%5D=12&GameType%5B%5D=13&GroupType%5B%5D=118&GroupType%5B%5D=109&GroupType%5B%5D=108&GroupType%5B%5D=102&GroupType%5B%5D=160&GroupType%5B%5D=159&GroupType%5B%5D=158&GroupType%5B%5D=157&GroupType%5B%5D=156&GroupType%5B%5D=155&GroupType%5B%5D=154&GroupType%5B%5D=153&GroupType%5B%5D=107&GroupType%5B%5D=106&GroupType%5B%5D=105&GroupType%5B%5D=104&GroupType%5B%5D=103&GroupType%5B%5D=101&StartDate="+startDatekey+"&EndDate="+endDatekey+"&IsNotShowNow=true"#FPK375#jnn688
  554. response3child = requests.request("POST", GetDataUrl, headers=headers88, data=getData, timeout=10,verify=False)
  555. print("chiAAAAA8")
  556. if response3child.text=="null":
  557. #getData= "Account=&GameType%5B%5D=22&GameType%5B%5D=11&GameType%5B%5D=12&GameType%5B%5D=13&GroupType%5B%5D=118&GroupType%5B%5D=109&GroupType%5B%5D=108&GroupType%5B%5D=102&GroupType%5B%5D=160&GroupType%5B%5D=159&GroupType%5B%5D=158&GroupType%5B%5D=157&GroupType%5B%5D=156&GroupType%5B%5D=155&GroupType%5B%5D=154&GroupType%5B%5D=153&GroupType%5B%5D=107&GroupType%5B%5D=106&GroupType%5B%5D=105&GroupType%5B%5D=104&GroupType%5B%5D=103&GroupType%5B%5D=101&StartDate="+startDatekey+"&EndDate="+endDatekey+"&IsNotShowNow=true"#FPK375#jnn688
  558. getData= "Account="+childAdmin+"&GameType%5B%5D=11&GameType%5B%5D=12&GameType%5B%5D=13&GroupType%5B%5D=109&GroupType%5B%5D=108&GroupType%5B%5D=102&GroupType%5B%5D=160&GroupType%5B%5D=159&GroupType%5B%5D=158&GroupType%5B%5D=157&GroupType%5B%5D=156&GroupType%5B%5D=155&GroupType%5B%5D=154&GroupType%5B%5D=153&GroupType%5B%5D=107&GroupType%5B%5D=106&GroupType%5B%5D=105&GroupType%5B%5D=104&GroupType%5B%5D=103&GroupType%5B%5D=101&StartDate="+startDatekey+"&EndDate="+endDatekey+"&IsNotShowNow=true"#FPK375#jnn688
  559. response3child = requests.request("POST", GetDataUrl, headers=headers88, data=getData, timeout=10,verify=False)
  560. print("chiAAAAA9")
  561. if response3child.text=="null":
  562. getData="Account="+childAdmin+"&GameType%5B%5D=22&GameType%5B%5D=13&GroupType%5B%5D=160&GroupType%5B%5D=159&GroupType%5B%5D=158&GroupType%5B%5D=157&GroupType%5B%5D=156&GroupType%5B%5D=155&GroupType%5B%5D=154&GroupType%5B%5D=153&GroupType%5B%5D=118&GroupType%5B%5D=107&GroupType%5B%5D=106&GroupType%5B%5D=105&GroupType%5B%5D=104&GroupType%5B%5D=103&GroupType%5B%5D=101&StartDate="+startDatekey+"&EndDate="+endDatekey+"&IsNotShowNow=true"#KPC365
  563. response3child = requests.request("POST", GetDataUrl, headers=headers88, data=getData, timeout=10,verify=False)
  564. print("chiAAAAA10")
  565. if response3child.text=="null":
  566. getData="Account="+childAdmin+"&GameType%5B%5D=13&GroupType%5B%5D=160&GroupType%5B%5D=159&GroupType%5B%5D=158&GroupType%5B%5D=157&GroupType%5B%5D=156&GroupType%5B%5D=155&GroupType%5B%5D=154&GroupType%5B%5D=153&GroupType%5B%5D=107&GroupType%5B%5D=106&GroupType%5B%5D=105&GroupType%5B%5D=104&GroupType%5B%5D=103&GroupType%5B%5D=101&StartDate="+startDatekey+"&EndDate="+endDatekey+"&IsNotShowNow=true" #UJK555
  567. response3child = requests.request("POST", GetDataUrl, headers=headers88, data=getData, timeout=10,verify=False)
  568. print("chiAAAAA11")
  569. if response3child.text=="null":
  570. getData="Account="+childAdmin+"&GameType%5B%5D=22&GameType%5B%5D=11&GameType%5B%5D=12&GroupType%5B%5D=160&GroupType%5B%5D=159&GroupType%5B%5D=158&GroupType%5B%5D=157&GroupType%5B%5D=156&GroupType%5B%5D=155&GroupType%5B%5D=154&GroupType%5B%5D=153&GroupType%5B%5D=110&GroupType%5B%5D=109&GroupType%5B%5D=108&GroupType%5B%5D=107&GroupType%5B%5D=106&GroupType%5B%5D=105&GroupType%5B%5D=104&GroupType%5B%5D=103&GroupType%5B%5D=102&GroupType%5B%5D=101&StartDate="+startDatekey+"&EndDate="+endDatekey+"&IsNotShowNow=true" #UJK555
  571. response3child = requests.request("POST", GetDataUrl, headers=headers88, data=getData, timeout=10,verify=False)
  572. print("chiAAAAA14")
  573. jsondata=json.loads(response3child.text)
  574. print(jsondata)
  575. childallll=[]
  576. if len(jsondata['DataList'])>0:
  577. for i in range(len(jsondata['DataList'])):
  578. childallll.append([])
  579. childallll[i].append(jsondata['DataList'][i]['NickName']+"("+jsondata['DataList'][i]['Account']+")")
  580. #
  581. childallll[i].append(jsondata['DataList'][i]['TotBet'])
  582. childallll[i].append(jsondata['DataList'][i]['TotBetRebate'])
  583. childallll[i].append(jsondata['DataList'][i]['TotBetWinLose'])
  584. childallll[i].append(jsondata['DataList'][i]['SubtotalTotWinLose'])
  585. for j in range(len(jsondata['DataList'][i]['ContributionPaid'])):
  586. childallll[i].append(jsondata['DataList'][i]['ContributionPaid'][j]['TotPaid'])
  587. if len(jsondata['DataList'][i]['ContributionPaid'])<7:
  588. ReAdd=7-len(jsondata['DataList'][i]['ContributionPaid'])
  589. for z in range(ReAdd):
  590. childallll[i].append(None)
  591. childallll[i].append(jsondata['DataList'][i]['SubtotalTotDutyWinLose'])
  592. childallll[i].append(jsondata['DataList'][i]['SubtotalRebateWinLoseDifference'])
  593. childallll[i].append(jsondata['DataList'][i]['TotPaid'])
  594. childallll[i].append(jsondata['DataList'][i]['SubtotalSelfTotWinLose'])
  595. childallll[i].append(jsondata['DataList'][i]['PaidContributor'])
  596. childallll[i].append(jsondata['DataList'][i]['TotContribution'])
  597. childallll[i].append(jsondata['DataList'][i]['SubtotalContribution'])
  598. childallll[i].append(jsondata['DataList'][i]['TotControl'])
  599. childallll[i].append(jsondata['DataList'][i]['TotControlDuty'])
  600. childallll[i].append(jsondata['DataList'][i]['SystemDuty'])
  601. print(childallll)
  602. childallll=pd.DataFrame(childallll)
  603. childallll.columns =["名稱","總量","退水","中獎","輸贏","會員","代理","總代理","股東","大股東","總監","大總監","佔成輸贏","水倍差","上繳金額","自已總輸贏","上繳貢獻額","貢獻額","貢獻度","調盤退水","調退實佔","系統商"]
  604. fordebugger="OK"
  605. else:
  606. childallll=pd.DataFrame()
  607. fordebugger="查詢期間無資料"
  608. print("FA:SSSAEL")
  609. WEBURLTXT=[]
  610. ADMINTXT=[]
  611. StartDATETXT=[]
  612. EndDATETXT=[]
  613. TIMERAND=[]
  614. nowTime=datetime.datetime.now().strftime("%m%d%H%M%S")
  615. randomNum=random.randint(0,10000);
  616. if randomNum<10:
  617. randomNum=str(0)+str(0)+str(0)+str(randomNum)
  618. elif randomNum>10 and randomNum<100:
  619. randomNum=str(0)+str(0)+str(randomNum)
  620. elif randomNum>100 and randomNum<1000:
  621. randomNum=str(0)+str(randomNum)
  622. uniqueNum=str(nowTime)+str(randomNum)
  623. for i in range(len(childallll)):
  624. WEBURLTXT.append(urlkey)
  625. ADMINTXT.append(childAdmin)
  626. StartDATETXT.append(startDatekey)
  627. EndDATETXT.append(endDatekey)
  628. TIMERAND.append(None)
  629. childallll.insert(0,"開始日期",StartDATETXT)
  630. childallll.insert(1,"結束日期",EndDATETXT)
  631. childallll.insert(2,"網址",WEBURLTXT)
  632. childallll.insert(3,"帳戶",ADMINTXT)
  633. childallll.insert(4,"隨機碼",TIMERAND)
  634. print(childallll)
  635. #=====================================================================================
  636. refind=pd.DataFrame(columns =["開始日期","結束日期","網址","帳戶","名稱","總量","退水","中獎","輸贏","佔成輸贏","水倍差","上繳金額","自已總輸贏","上繳貢獻額","貢獻額","貢獻度","下注明細","玩法明細","調盤退水","調退實佔","上繳","會員","代理","總代理","股東","大股東","總監","大總監","系統商","隨機碼"])
  637. #refind=pd.DataFrame(columns =["開始日期","結束日期","網址","帳戶","名稱","總量","退水","中獎","輸贏","佔成輸贏","水倍差","上繳金額","自已總輸贏","上繳貢獻額","貢獻額","貢獻度","下注明細","玩法明細","調盤退水","調退實佔","上繳","會員","代理","總代理","股東","大股東","總監","隨機碼"])
  638. childallll=pd.concat([refind,childallll],ignore_index = True)
  639. doneChild=pd.concat([refind,doneChild,childallll],ignore_index = True)
  640. #子帳號========================================================================================
  641. allll=pd.concat([refind,allll,doneChild],ignore_index = True)
  642. return allll,fordebugger,urlkey,adminkey
  643. print(getData3.find("GameType"))
  644. if response3.status_code!=200 and getData3.find("GameType") != -1:
  645. fordebugger="無法取得資料"
  646. allll=pd.DataFrame()
  647. return allll,fordebugger,urlkey,adminkey
  648. elif response3.status_code!=200 and getData3.find("GameType") == -1:
  649. fordebugger="查詢期間無資料"
  650. allll=pd.DataFrame()
  651. return allll,fordebugger,urlkey,adminkey
  652. else:
  653. fordebugger="查詢期間無資料"
  654. allll=pd.DataFrame()
  655. return allll,fordebugger,urlkey,adminkey
  656. if LFLresponse.status_code!=200 :
  657. allll,fordebugger,urlkey,adminkey=ShortGetData(urlkey, adminkey, passkey, startDatekey, endDatekey,childAdminLs)
  658. #print(allll)
  659. return allll,fordebugger,urlkey,adminkey
  660. except:
  661. fordebugger="無法取得資料"
  662. print("errorcode4")
  663. allll=pd.DataFrame()
  664. return allll,fordebugger,urlkey,adminkey
  665. def ShortGetData(urlkey, adminkey, passkey, startDatekey, endDatekey,childAdminLs):
  666. print("我有進ShortGetData")
  667. badmatchend= ["單碰","配比包牌","雙面包牌","連碰","柱碰","一比四","套餐","連柱碰","雙星連碰柱","三星連碰柱","雙連碰","仟XXX","X佰XX","XX拾X","XXX個","全選",
  668. "仟佰XX","仟X拾X","仟XX個","X佰拾X","X佰X個","XX拾個","仟佰拾X","仟佰X個","仟X拾個","X佰拾個","佰XX","X拾X","XX個","佰拾X","佰X個","X拾個"]
  669. try:
  670. sloginUrl = "https://"+urlkey+"/pub/SuperGateway.php?c=900%2C"+adminkey+"%2C"+passkey
  671. response = requests.request("POST", sloginUrl, timeout=10,verify=False)
  672. #jsondata=json.loads(response.text)
  673. #SIDKey=rrr[2]
  674. print(response.status_code)
  675. if response.status_code==200:#如果網站有正常回應
  676. if len(response.text)>3:#回應的是正確值
  677. SIDKey=response.text.split(',')[2]#拆分SIDKey
  678. if len(SIDKey)<5:#如果SIDKey<拆分SIDKey
  679. SIDKey=response.text.split(',')[3]
  680. print(SIDKey)
  681. AMKey=SIDKey.split('_')[0]
  682. print(AMKey)
  683. LevelUrl="https://"+urlkey+"/hp/headmenu.php?si="+SIDKey
  684. LevelUrlresponse = requests.request("GET", LevelUrl, timeout=10,verify=False)
  685. print(LevelUrlresponse.status_code)
  686. #print(LevelUrlresponse.text)
  687. soup=BeautifulSoup(LevelUrlresponse.text,"lxml")
  688. #print(len(LevelUrlresponse.text))
  689. #print("RESPONE:"+LevelUrlresponse.text)
  690. #print(soup)
  691. if len(LevelUrlresponse.text)>1:#一般種類
  692. #---------------------尋找level-------------------------
  693. try:
  694. pattern = re.compile(r'var lv(.*?)=(.*?);',re.MULTILINE|re.DOTALL )
  695. #print(pattern)
  696. script = soup.find("script", text=pattern)
  697. #print(script)
  698. print((len(pattern.search(script.string).group())))
  699. if len(pattern.search(script.string).group())==11:
  700. Level=pattern.search(script.string).group(2)[1:]
  701. elif len(pattern.search(script.string).group())==9:
  702. Level=pattern.search(script.string).group(2)
  703. #print(pattern.search(script.string).group())
  704. print("LEVELLLLL::::::::"+str(Level))
  705. geeetURL="https://"+urlkey+"/func/report/rpt_plus.php?sid="+SIDKey+"&am="+AMKey+"$l="+Level
  706. print(geeetURL)
  707. editUrlresponse = requests.request("GET", geeetURL, timeout=10,verify=False)
  708. soup4=BeautifulSoup(editUrlresponse.text,"lxml")
  709. #print(type(str(soup4)))
  710. matches = re.finditer(r'/>(.+\w)\s', str(soup4), re.MULTILINE)
  711. matchend=[]
  712. for matchNum, match in enumerate(matches, start=1):
  713. #print ("在{start}-{end}找到匹配{matchNum}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
  714. for groupNum in range(0, len(match.groups())):
  715. groupNum = groupNum + 1
  716. matchtext = match.group(groupNum).strip()
  717. #print("mat111"+matchtext)
  718. if matchtext == '加州彩':
  719. matchtext = '加洲彩'
  720. #print("mat222"+matchtext)
  721. if matchtext not in matchend and matchtext not in badmatchend:
  722. matchend.append(matchtext)
  723. #print ("在{start}-{end}找到组{groupNum}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
  724. write_csv(matchend,startDatekey,endDatekey,urlkey,adminkey,"365")
  725. print(matchend)
  726. print(loopper3)
  727. print(len(matchend))
  728. getData3=Getdata(matchend)
  729. #print(matchend[1])
  730. #print(cclist.index(matchend[1]))
  731. #print(loopper3[0][cclist.index(matchend[1])])
  732. #print("GERDATAAAAA3:"+getData3)
  733. #print(pattern.search(script.string).group(1))
  734. #Level=pattern.search(script.string).group(1)
  735. #---------------------尋找level-------------------------
  736. payload='sacco=&data1='+startDatekey+'&data2='+endDatekey+getData3+'&am='+AMKey+'&l='+Level+'&sid='+SIDKey+'&master=%20&Submit=%25E7%25A2%25BA%25E5%25AE%259A'
  737. iscommon=1
  738. except Exception as e:
  739. print(e)
  740. #一般商品種類
  741. else:
  742. geeetURL="https://"+urlkey+"/func/report/rpt_plus.php?sid="+SIDKey
  743. print(geeetURL)
  744. editUrlresponse = requests.request("GET", geeetURL, timeout=10,verify=False)
  745. soup4=BeautifulSoup(editUrlresponse.text,"lxml")
  746. #print(soup4)
  747. matches = re.finditer(r'/>(.+\w)\s', str(soup4), re.MULTILINE)
  748. matchend=[]
  749. for matchNum, match in enumerate(matches, start=1):
  750. #print ("在{start}-{end}找到匹配{matchNum}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
  751. for groupNum in range(0, len(match.groups())):
  752. groupNum = groupNum + 1
  753. matchtext = match.group(groupNum).strip()
  754. #print("mat11"+matchtext)
  755. if matchtext == "加州彩":
  756. matchtext = "加洲彩"
  757. #print("mat22"+matchtext)
  758. if matchtext not in matchend and matchtext not in badmatchend:
  759. matchend.append(matchtext)
  760. #print ("在{start}-{end}找到组{groupNum}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
  761. write_csv(matchend,startDatekey,endDatekey,urlkey,adminkey,"365")
  762. print(matchend)
  763. print(loopper3)
  764. print(len(matchend))
  765. getData3=Getdata(matchend)
  766. payload='sacco=&data1='+startDatekey+'&data2='+endDatekey+getData3+'&l=&sid='+SIDKey+'&master=yes&am='
  767. #print(payload)
  768. iscommon=0
  769. #後台用商品種類
  770. GetUrl="https://"+urlkey+"/func/report/rpt_allplus.php"
  771. GetHeaders = {
  772. 'Content-Type': 'application/x-www-form-urlencoded'
  773. }
  774. GetResponse = requests.request("POST", GetUrl, headers=GetHeaders, data=payload, timeout=10,verify=False)
  775. print(GetResponse.status_code)
  776. #print(GetResponse.text)
  777. if GetResponse.text == "您所搜尋的日期範圍並無任何期數喔" :
  778. val=pd.DataFrame()
  779. fordebugger="查詢期間無資料"
  780. else:
  781. #向網站取得資料
  782. val=pd.DataFrame(pd.read_html(GetResponse.text)[2])[:-1]
  783. print(len(val))
  784. if len(val)>0:#是否有資料
  785. val.columns = val.loc[0].values.tolist()
  786. val=val.drop([0])
  787. print(val)
  788. #================將資訊插入資料=================================
  789. WEBURLTXT=[]
  790. ADMINTXT=[]
  791. StartDATETXT=[]
  792. EndDATETXT=[]
  793. TIMERAND=[]
  794. nowTime=datetime.datetime.now().strftime("%m%d%H%M%S")
  795. randomNum=random.randint(0,10000)
  796. if randomNum<10:
  797. randomNum=str(0)+str(0)+str(0)+str(randomNum)
  798. elif randomNum>10 and randomNum<100:
  799. randomNum=str(0)+str(0)+str(randomNum)
  800. elif randomNum>100 and randomNum<1000:
  801. randomNum=str(0)+str(randomNum)
  802. uniqueNum=str(nowTime)+str(randomNum)
  803. for i in range(len(val)):
  804. WEBURLTXT.append(urlkey)
  805. ADMINTXT.append(adminkey)
  806. StartDATETXT.append(startDatekey)
  807. EndDATETXT.append(endDatekey)
  808. TIMERAND.append(None)
  809. val.insert(0,"開始日期",StartDATETXT)
  810. val.insert(1,"結束日期",EndDATETXT)
  811. val.insert(2,"網址",WEBURLTXT)
  812. val.insert(3,"帳戶",ADMINTXT)
  813. val.insert(4,"隨機碼",TIMERAND)
  814. #======================================================
  815. # refind=pd.DataFrame(columns =["開始日期","結束日期","網址","帳戶","客戶","總量","中獎","輸贏","客戶小計","代理小計","總代理小計","股東小計","大股東小計","總監小計","個人所得","水差","下注明細","查看對帳","隨機碼"])
  816. refind=pd.DataFrame(columns =["開始日期","結束日期","網址","帳戶","客戶","總量","中獎","輸贏","客戶小計","代理小計","總代理小計","股東小計","大股東小計","總監小計","個人所得","水差","下注明細","查看對帳","貢獻額","貢獻度","調盤退水","調退實佔","隨機碼"])
  817. #重整資料用
  818. val=pd.concat([refind,val],ignore_index = True)
  819. #=========================================================
  820. if len(val)>0:#如果有資料
  821. val.columns =["開始日期","結束日期","網址","帳戶","客戶s","總量s","中獎s","輸贏s","客戶小計s","代理小計s","總代理小計s","股東小計s","大股東小計s","總監小計s","個人所得s","水差s","下注明細s","查看對帳s","貢獻額s","貢獻度s","調盤退水s","調退實佔s","隨機碼"]
  822. # val.columns =["開始日期","結束日期","網址","帳戶","客戶s","總量s","中獎s","輸贏s","客戶小計s","代理小計s","總代理小計s","股東小計s","大股東小計s","總監小計s","個人所得s","水差s","下注明細s","查看對帳s","隨機碼"]
  823. fordebugger="OK"
  824. else:
  825. val=pd.DataFrame()
  826. fordebugger="查詢期間無資料"
  827. #========================================================
  828. #=================子帳號=======================================
  829. doneChildval=pd.DataFrame(columns =["開始日期","結束日期","網址","帳戶","客戶s","總量s","中獎s","輸贏s","客戶小計s","代理小計s","總代理小計s","股東小計s","大股東小計s","總監小計s","個人所得s","水差s","下注明細s","查看對帳s","貢獻額s","貢獻度s","調盤退水s","調退實佔s","隨機碼"])
  830. for i in range(len(childAdminLs)):
  831. childval=pd.DataFrame()
  832. if (urlkey==childAdminLs[i][0]or urlkey==childAdminLs[i][3])and adminkey== childAdminLs[i][2]:
  833. childAdmin=childAdminLs[i][1]
  834. if iscommon==1:
  835. payload='sacco='+childAdmin+'&data1='+startDatekey+'&data2='+endDatekey+getData3+'&am='+AMKey+'&l='+Level+'&sid='+SIDKey+'&master=%20&Submit=%25E7%25A2%25BA%25E5%25AE%259A'
  836. elif iscommon==0:
  837. payload='sacco='+childAdmin+'&data1='+startDatekey+'&data2='+endDatekey+getData3+'&l=&sid='+SIDKey+'&master=yes&am='
  838. GetResponse = requests.request("POST", GetUrl, headers=GetHeaders, data=payload, timeout=10,verify=False)
  839. childval=pd.DataFrame(pd.read_html(GetResponse.text)[2])[:-1]
  840. if len(childval)>0:#是否有資料
  841. childval.columns = childval.loc[0].values.tolist()
  842. childval=childval.drop([0])
  843. print(childval)
  844. #================將資訊插入資料=================================
  845. WEBURLTXT=[]
  846. ADMINTXT=[]
  847. StartDATETXT=[]
  848. EndDATETXT=[]
  849. TIMERAND=[]
  850. nowTime=datetime.datetime.now().strftime("%m%d%H%M%S")
  851. randomNum=random.randint(0,10000);
  852. if randomNum<10:
  853. randomNum=str(0)+str(0)+str(0)+str(randomNum)
  854. elif randomNum>10 and randomNum<100:
  855. randomNum=str(0)+str(0)+str(randomNum)
  856. elif randomNum>100 and randomNum<1000:
  857. randomNum=str(0)+str(randomNum)
  858. uniqueNum=str(nowTime)+str(randomNum)
  859. for i in range(len(childval)):
  860. WEBURLTXT.append(urlkey)
  861. ADMINTXT.append(childAdmin)
  862. StartDATETXT.append(startDatekey)
  863. EndDATETXT.append(endDatekey)
  864. TIMERAND.append(None)
  865. childval.insert(0,"開始日期",StartDATETXT)
  866. childval.insert(1,"結束日期",EndDATETXT)
  867. childval.insert(2,"網址",WEBURLTXT)
  868. childval.insert(3,"帳戶",ADMINTXT)
  869. childval.insert(4,"隨機碼",TIMERAND)
  870. refind=pd.DataFrame(columns =["開始日期","結束日期","網址","帳戶","客戶","總量","中獎","輸贏","客戶小計","代理小計","總代理小計","股東小計","大股東小計","總監小計","個人所得","水差","下注明細","查看對帳","貢獻額","貢獻度","調盤退水","調退實佔","隨機碼"])
  871. #重整資料用
  872. childval=pd.concat([refind,childval],ignore_index = True)
  873. if len(childval)>0:#如果有資料
  874. childval.columns =["開始日期","結束日期","網址","帳戶","客戶s","總量s","中獎s","輸贏s","客戶小計s","代理小計s","總代理小計s","股東小計s","大股東小計s","總監小計s","個人所得s","水差s","下注明細s","查看對帳s","貢獻額s","貢獻度s","調盤退水s","調退實佔s","隨機碼"]
  875. fordebugger="OK"
  876. else:
  877. childval=pd.DataFrame()
  878. fordebugger="查詢期間無資料"
  879. if GetResponse.text == "您所搜尋的日期範圍並無任何期數喔" :
  880. childval=pd.DataFrame()
  881. fordebugger="查詢期間無資料"
  882. doneChildval=pd.concat([doneChildval,childval],ignore_index = True)
  883. #========================================================
  884. val=pd.concat([val,doneChildval],ignore_index = True)
  885. return val,fordebugger,urlkey,adminkey
  886. else:
  887. val=pd.DataFrame()
  888. print("error 1")
  889. fordebugger="無法取得資料"
  890. return val,fordebugger,urlkey,adminkey
  891. if response.status_code!=200:
  892. val=pd.DataFrame()
  893. print("error 2")
  894. fordebugger="無法取得資料"
  895. return val,fordebugger,urlkey,adminkey
  896. except:
  897. val=pd.DataFrame()
  898. print("error 3")
  899. fordebugger="無法取得資料"
  900. return val,fordebugger,urlkey,adminkey
  901. def write_csv(matchend,startDatekey,endDatekey,urlkey,adminkey,foods):
  902. deeptitle = copy.deepcopy(matchend)
  903. deeptitle.insert(0,foods)
  904. deeptitle.insert(1,startDatekey)
  905. deeptitle.insert(2,endDatekey)
  906. deeptitle.insert(3,urlkey)
  907. deeptitle.insert(4,adminkey)
  908. print("WRITETOCSV:"+str(deeptitle))
  909. path="./webtitle.csv"
  910. with open(path,'a+',newline='',encoding='utf-8-sig') as f:
  911. csv_write = csv.writer(f)
  912. csv_write.writerow(deeptitle)
  913. print("WRITETOCSVEND")
  914. del deeptitle[0:5]
  915. def Getdata(matchend):
  916. cclist=["四星彩","三星彩","六合","大樂","539","威力","天天樂","全車","特碼","台號","特尾三","二星","三星","四星","天碰二","天碰三","五星","五不中","六不中","七不中","八不中","九不中",
  917. "十不中","十一不中","十二不中","一定位","二定位","三定位","四定位","一字現","二字現","三字現","四字現","合單雙","加洲彩","雙面","反轉樂","迦納彩"]
  918. getData3=""
  919. if len(matchend) == 15 :
  920. if matchend[0] in cclist and loopper3[0][cclist.index(matchend[0])] == True:
  921. getData3 += "&check0=yes"
  922. if matchend[1] in cclist and loopper3[0][cclist.index(matchend[1])] == True:
  923. getData3 += "&check1=yes"
  924. if matchend[2] in cclist and loopper3[0][cclist.index(matchend[2])] == True:
  925. getData3 += "&check2=yes"
  926. if matchend[3] in cclist and loopper3[0][cclist.index(matchend[3])] == True:
  927. getData3 += "&check3=yes"
  928. if matchend[4] in cclist and loopper3[0][cclist.index(matchend[4])] == True:
  929. getData3 += "&check4=yes"
  930. if matchend[5] in cclist and loopper3[0][cclist.index(matchend[5])] == True:
  931. getData3 += "&check5=yes"
  932. if matchend[6] in cclist and loopper3[0][cclist.index(matchend[6])] == True:
  933. getData3 += "&check6=yes"
  934. if matchend[7] in cclist and loopper3[0][cclist.index(matchend[7])] == True:
  935. getData3 += "&check7=yes"
  936. if matchend[8] in cclist and loopper3[0][cclist.index(matchend[8])] == True:
  937. getData3 += "&check8=yes"
  938. if matchend[9] in cclist and loopper3[0][cclist.index(matchend[9])] == True:
  939. getData3 += "&check9=yes"
  940. if matchend[10] in cclist and loopper3[0][cclist.index(matchend[10])] == True:
  941. getData3 += "&check10=yes"
  942. if matchend[11] in cclist and loopper3[0][cclist.index(matchend[11])] == True:
  943. getData3 += "&check11=yes"
  944. if matchend[12] in cclist and loopper3[0][cclist.index(matchend[12])] == True:
  945. getData3 += "&cas1=yes"
  946. if matchend[13] in cclist and loopper3[0][cclist.index(matchend[13])] == True:
  947. getData3 += "&cas2=yes"
  948. if matchend[14] in cclist and loopper3[0][cclist.index(matchend[14])] == True:
  949. getData3 += "&cas3=yes"
  950. elif len(matchend) == 16:
  951. print(matchend[0])
  952. print(loopper3[0][cclist.index(matchend[0])])
  953. if matchend[0] in cclist and loopper3[0][cclist.index(matchend[0])] == True:
  954. getData3 += "&check0=yes"
  955. if matchend[1] in cclist and loopper3[0][cclist.index(matchend[1])] == True:
  956. getData3 += "&check1=yes"
  957. if matchend[2] in cclist and loopper3[0][cclist.index(matchend[2])] == True:
  958. getData3 += "&check2=yes"
  959. if matchend[3] in cclist and loopper3[0][cclist.index(matchend[3])] == True:
  960. getData3 += "&check3=yes"
  961. if matchend[4] in cclist and loopper3[0][cclist.index(matchend[4])] == True:
  962. getData3 += "&check4=yes"
  963. if matchend[5] in cclist and loopper3[0][cclist.index(matchend[5])] == True:
  964. getData3 += "&check5=yes"
  965. if matchend[6] in cclist and loopper3[0][cclist.index(matchend[6])] == True:
  966. getData3 += "&check6=yes"
  967. if matchend[7] in cclist and loopper3[0][cclist.index(matchend[7])] == True:
  968. getData3 += "&check7=yes"
  969. if matchend[8] in cclist and loopper3[0][cclist.index(matchend[8])] == True:
  970. getData3 += "&check8=yes"
  971. if matchend[9] in cclist and loopper3[0][cclist.index(matchend[9])] == True:
  972. getData3 += "&check9=yes"
  973. if matchend[10] in cclist and loopper3[0][cclist.index(matchend[10])] == True:
  974. getData3 += "&check10=yes"
  975. if matchend[11] in cclist and loopper3[0][cclist.index(matchend[11])] == True:
  976. getData3 += "&check11=yes"
  977. if matchend[12] in cclist and loopper3[0][cclist.index(matchend[12])] == True:
  978. getData3 += "&cas1=yes"
  979. if matchend[13] in cclist and loopper3[0][cclist.index(matchend[13])] == True:
  980. getData3 += "&cas2=yes"
  981. if matchend[14] in cclist and loopper3[0][cclist.index(matchend[14])] == True:
  982. getData3 += "&cas3=yes"
  983. print(matchend[15])
  984. print(cclist.index(matchend[15]))
  985. if matchend[15] in cclist and loopper3[0][cclist.index(matchend[15])] == True:
  986. getData3 += "&cas4=yes"
  987. print(getData3)
  988. return getData3
  989. def OutbetGetData(urlkey,adminkey,passkey, startDatekey, endDatekey):
  990. print("OutbetGetData")
  991. try:
  992. sloginUrl = "https://"+urlkey+"/pub/SuperGateway.php?c=900%2C"+adminkey+"%2C"+passkey
  993. response = requests.request("POST", sloginUrl, timeout=10,verify=False)
  994. #jsondata=json.loads(response.text)
  995. #SIDKey=rrr[2]
  996. print(response.status_code)
  997. if response.status_code==200:#如果網站有正常回應
  998. if len(response.text)>3:#回應的是正確值
  999. #==================外埔==================================
  1000. payloado='data1='+startDatekey+'&data2='+endDatekey+'&checka=yes&check0=yes&check1=yes&check2=yes&check3=yes&check4=yes&check5=yes&check6=yes&check7=yes&check8=yes&check9=yes&check10=yes&check11=yes&cas1=yes&cas2=yes&cas3=yes&cas4=yes'
  1001. GetUrlo="https://"+urlkey+"/func/supply/page/report/outbet_all.php"
  1002. GetHeaderso = {
  1003. 'Content-Type': 'application/x-www-form-urlencoded'
  1004. }
  1005. GetResponseo = requests.request("POST", GetUrlo, headers=GetHeaderso, data=payloado, timeout=10,verify=False)
  1006. if len(GetResponseo.text)>5:
  1007. print("有外埔")
  1008. try:
  1009. val=pd.DataFrame(pd.read_html(GetResponseo.text)[0])[:-2]
  1010. val = val.drop(val.columns[0:3],axis=1)
  1011. print(len(val))
  1012. WEBURLTXT=[]
  1013. ADMINTXT=[]
  1014. StartDATETXT=[]
  1015. EndDATETXT=[]
  1016. for i in range(len(val)):
  1017. WEBURLTXT.append(urlkey)
  1018. ADMINTXT.append(adminkey)
  1019. StartDATETXT.append(startDatekey)
  1020. EndDATETXT.append(endDatekey)
  1021. val.insert(0,"開始日期",StartDATETXT)
  1022. val.insert(1,"結束日期",EndDATETXT)
  1023. val.insert(2,"網址",WEBURLTXT)
  1024. val.insert(3,"帳戶",ADMINTXT)
  1025. print(val)
  1026. val.columns =["開始日期","結束日期","網址","帳戶","總量","退水","中獎","小計"]
  1027. print(val)
  1028. fordebugger="OK"
  1029. except Exception as e:
  1030. print(e)
  1031. else:
  1032. val=pd.DataFrame()
  1033. fordebugger="OK"
  1034. print("無外埔")
  1035. return val,fordebugger,urlkey,adminkey
  1036. else:
  1037. val=pd.DataFrame()
  1038. print("error 1")
  1039. fordebugger="無法取得資料"
  1040. return val,fordebugger,urlkey,adminkey
  1041. if response.status_code!=200:
  1042. val=pd.DataFrame()
  1043. print("error 2")
  1044. fordebugger="無法取得資料"
  1045. return val,fordebugger,urlkey,adminkey
  1046. except:
  1047. val=pd.DataFrame()
  1048. print("error 3")
  1049. fordebugger="無法取得資料"
  1050. return val,fordebugger,urlkey,adminkey
  1051. class External(QThread):
  1052. """
  1053. Runs a counter thread.
  1054. """
  1055. countChanged = pyqtSignal(int)#介面用進度條
  1056. urlChanged=pyqtSignal(str)#介面用網址資訊
  1057. def run(self):
  1058. try:
  1059. ALLDataFrameList=[]
  1060. DebugCodeList=[]
  1061. ALLDataFrameList.append(refindlong)
  1062. ALLDataFrameList.append(refindshort)
  1063. ALLDataFrameList=pd.concat(ALLDataFrameList)
  1064. #-----------------------------------------------------------------------------------------------
  1065. #多執行續
  1066. with ThreadPoolExecutor(max_workers=10) as executor:
  1067. futures = []
  1068. test=[]
  1069. z=0
  1070. x=len(UrlList)
  1071. for urlkey,adminkey,passkey,backupUrl in zip(UrlList,AdminList,PasswordList,backupUrlList):
  1072. future=executor.submit(LongGetData,urlkey,adminkey,passkey, startDatekey, endDatekey,backupUrl,childAdminLs)
  1073. futures.append(future)#已完成的
  1074. for future in as_completed(futures):
  1075. test.append(list(future.result()))
  1076. MDF,MDC,MURL,ADMINNNNNN=list(future.result())
  1077. #MDF=pd.concat([ALLDataFrameList,MDF])
  1078. #MDF.to_sql('流水帳', con=engine3, if_exists='append')
  1079. MDCURL=MURL+"=>"+MDC
  1080. percentvalues=((z+1)/x)*100
  1081. self.countChanged.emit(percentvalues)
  1082. self.urlChanged.emit(MDCURL)
  1083. z=z+1
  1084. #-----------------------------------------------------------------------------------------------
  1085. ALLDataFrameList0,DebugCodeList,UrlDebugList,ADMINKEYLIST=zip(*test)
  1086. ALLDataFrameList0=pd.concat(ALLDataFrameList0)
  1087. neewDataFrmoe=pd.concat([ALLDataFrameList,ALLDataFrameList0])
  1088. print(neewDataFrmoe)
  1089. #-------------------------------------------------------------------------
  1090. #=============================LOGER======================================
  1091. LOGGER=[]
  1092. y=0
  1093. for UrlDebugListlog,DebugCodeListlog,ADMINKEYLISTlog in zip(UrlDebugList,DebugCodeList,ADMINKEYLIST):
  1094. if DebugCodeListlog=="OK":
  1095. print("OK")
  1096. else:
  1097. LOGGER.append([])
  1098. randomNum=random.randint(0,9)
  1099. nowTime=datetime.datetime.now().strftime("%Y-%m-%d-%H:%M:%S")
  1100. nowTime=str(nowTime)+"---"+str(randomNum)
  1101. LOGGER[y].append(coustomtxt)
  1102. LOGGER[y].append(startDatekey+"-"+endDatekey)
  1103. LOGGER[y].append(UrlDebugListlog)
  1104. LOGGER[y].append(DebugCodeListlog)
  1105. LOGGER[y].append(nowTime)
  1106. LOGGER[y].append(ADMINKEYLISTlog)
  1107. y=y+1
  1108. LOGGER=pd.DataFrame(LOGGER)
  1109. if len(LOGGER)>0:
  1110. LOGGER.columns =["客戶","查詢區間","網址","狀態","查詢時間","帳號"]
  1111. else:
  1112. print("NO LOG")
  1113. print(LOGGER)
  1114. #===================================================================================
  1115. end = time.time()
  1116. self.urlChanged.emit("已執行"+str(end - start)+"秒 處理中...")
  1117. #------------------------------------------------------------------------
  1118. #neewDataFrmoe.to_csv("M126UI.csv",encoding="utf_8_sig")#for debug
  1119. print("FILE明子...asdasdasd:"+thisfile)
  1120. #if thisfile=="A1.txt":
  1121. # neewDataFrmoe.to_sql('流水帳', con=engine3, if_exists='append')
  1122. #elif thisfile=="A2.txt" :
  1123. # neewDataFrmoe.to_sql('後台流水帳', con=engine3, if_exists='append')
  1124. LOGGER.to_sql('LOG', con=engine3, if_exists='append')
  1125. closedatalodibg=LoadingYesorNo()
  1126. end = time.time()
  1127. print("執行時間:%f 秒" % (end - start))
  1128. self.urlChanged.emit("已執行"+str(end - start)+"秒 處理完成")
  1129. print("DONE.....................100%")
  1130. #window.close()
  1131. app.quit()
  1132. except Exception:
  1133. logging.debug('debug message',exc_info=True)
  1134. logging.info('info message',exc_info=True)
  1135. logging.warning('warning message',exc_info=True)
  1136. logging.error('error message',exc_info=True)
  1137. logging.critical('critical message',exc_info=True)
  1138. app1 = QtWidgets.QApplication([])
  1139. error_dialog = QtWidgets.QErrorMessage()
  1140. error_dialog.setWindowTitle('ERROR')
  1141. error_dialog.showMessage('連線資料錯誤')
  1142. app1.exec_()
  1143. finally:
  1144. closedatalodibg=LoadingYesorNo()
  1145. class External2(QThread):
  1146. """
  1147. Runs a counter thread.
  1148. """
  1149. countChanged = pyqtSignal(int)#介面用進度條
  1150. urlChanged=pyqtSignal(str)#介面用網址資訊
  1151. def run(self):
  1152. try:
  1153. ALLDataFrameList=[]
  1154. DebugCodeList=[]
  1155. ALLDataFrameList.append(refindoutbet)
  1156. ALLDataFrameList=pd.concat(ALLDataFrameList)
  1157. #-----------------------------------------------------------------------------------------------
  1158. #多執行續
  1159. with ThreadPoolExecutor(max_workers=10) as executor:
  1160. futures = []
  1161. test=[]
  1162. z=0
  1163. x=len(UrlList)
  1164. for urlkey,adminkey,passkey,backupUrl in zip(UrlList,AdminList,PasswordList,backupUrlList):
  1165. future=executor.submit(OutbetGetData,urlkey,adminkey,passkey, startDatekey, endDatekey)
  1166. futures.append(future)#已完成的
  1167. for future in as_completed(futures):
  1168. test.append(list(future.result()))
  1169. MDF,MDC,MURL,ADMINNNNNN=list(future.result())
  1170. #MDF=pd.concat([ALLDataFrameList,MDF])
  1171. #MDF.to_sql('流水帳', con=engine3, if_exists='append')
  1172. MDCURL=MURL+"=>"+MDC
  1173. percentvalues=((z+1)/x)*100
  1174. self.countChanged.emit(percentvalues)
  1175. self.urlChanged.emit(MDCURL)
  1176. z=z+1
  1177. #-----------------------------------------------------------------------------------------------
  1178. ALLDataFrameList0,DebugCodeList,UrlDebugList,ADMINKEYLIST=zip(*test)
  1179. ALLDataFrameList0=pd.concat(ALLDataFrameList0)
  1180. neewDataFrmoe=pd.concat([ALLDataFrameList,ALLDataFrameList0])
  1181. print(neewDataFrmoe)
  1182. #-------------------------------------------------------------------------
  1183. #=============================LOGER======================================
  1184. LOGGER=[]
  1185. y=0
  1186. for UrlDebugListlog,DebugCodeListlog,ADMINKEYLISTlog in zip(UrlDebugList,DebugCodeList,ADMINKEYLIST):
  1187. if DebugCodeListlog=="OK":
  1188. print("OK")
  1189. else:
  1190. LOGGER.append([])
  1191. randomNum=random.randint(0,9)
  1192. nowTime=datetime.datetime.now().strftime("%Y-%m-%d-%H:%M:%S")
  1193. nowTime=str(nowTime)+"---"+str(randomNum)
  1194. LOGGER[y].append(coustomtxt)
  1195. LOGGER[y].append(startDatekey+"-"+endDatekey)
  1196. LOGGER[y].append(UrlDebugListlog)
  1197. LOGGER[y].append(DebugCodeListlog)
  1198. LOGGER[y].append(nowTime)
  1199. LOGGER[y].append(ADMINKEYLISTlog)
  1200. y=y+1
  1201. LOGGER=pd.DataFrame(LOGGER)
  1202. if len(LOGGER)>0:
  1203. LOGGER.columns =["客戶","查詢區間","網址","狀態","查詢時間","帳號"]
  1204. else:
  1205. print("NO LOG")
  1206. print(LOGGER)
  1207. #===================================================================================
  1208. end = time.time()
  1209. self.urlChanged.emit("已執行"+str(end - start)+"秒 處理中...")
  1210. #------------------------------------------------------------------------
  1211. #neewDataFrmoe.to_csv("M126UI.csv",encoding="utf_8_sig")#for debug
  1212. print("FILE明子...asdasdasd:"+thisfile)
  1213. #neewDataFrmoe.to_sql('後台外埔報表', con=engine3, if_exists='append')
  1214. LOGGER.to_sql('LOG', con=engine3, if_exists='append')
  1215. closedatalodibg=LoadingYesorNo()
  1216. end = time.time()
  1217. print("執行時間:%f 秒" % (end - start))
  1218. self.urlChanged.emit("已執行"+str(end - start)+"秒 處理完成")
  1219. print("DONE.....................100%")
  1220. #window.close()
  1221. app.quit()
  1222. except Exception:
  1223. logging.debug('debug message',exc_info=True)
  1224. logging.info('info message',exc_info=True)
  1225. logging.warning('warning message',exc_info=True)
  1226. logging.error('error message',exc_info=True)
  1227. logging.critical('critical message',exc_info=True)
  1228. app1 = QtWidgets.QApplication([])
  1229. error_dialog = QtWidgets.QErrorMessage()
  1230. error_dialog.setWindowTitle('ERROR')
  1231. error_dialog.showMessage('連線資料錯誤')
  1232. app1.exec_()
  1233. finally:
  1234. closedatalodibg=LoadingYesorNo()
  1235. class Actions(QDialog):
  1236. """
  1237. Simple dialog that consists of a Progress Bar and a Button.
  1238. Clicking on the button results in the start of a timer and
  1239. updates the progress bar..
  1240. """
  1241. def __init__(self):
  1242. super().__init__()
  1243. self.initUI()
  1244. def initUI(self):
  1245. self.setWindowTitle('D0128')
  1246. self.setWindowFlags(Qt.WindowStaysOnTopHint)
  1247. self.progress = QProgressBar(self)
  1248. self.progress.setGeometry(20, 20, 300, 25)
  1249. self.progress.setMaximum(100)
  1250. self.label=QLabel(self)
  1251. self.label.setGeometry(20, 50, 211, 31)
  1252. self.label.setText("- 自動導入中請勿關閉視窗 - ")
  1253. self.label2=QLabel(self)
  1254. self.label2.setGeometry(20, 70, 211, 31)
  1255. self.show()
  1256. self.calc = External()
  1257. self.calc.countChanged.connect(self.onCountChanged)
  1258. self.calc.urlChanged.connect(self.onUrlChanged)
  1259. self.calc.start()
  1260. def onCountChanged(self, value):
  1261. self.progress.setValue(value)
  1262. def onUrlChanged(self, urlstr):
  1263. self.label2.setText(urlstr)
  1264. class Actions2(QDialog):
  1265. """
  1266. Simple dialog that consists of a Progress Bar and a Button.
  1267. Clicking on the button results in the start of a timer and
  1268. updates the progress bar.
  1269. """
  1270. def __init__(self):
  1271. super().__init__()
  1272. self.initUI()
  1273. def initUI(self):
  1274. self.setWindowTitle('連線中...')
  1275. self.label=QLabel(self)
  1276. #self.label.setFont(QtGui.QFont('Arial', 12))
  1277. self.label.setGeometry(20, 20,120,30)
  1278. #self.label.setTextFormat(QtCore.Qt.AutoText)
  1279. self.label.setText("- 取得連線 請按開始 -")
  1280. self.button = QPushButton('開始', self)
  1281. self.button.move(50, 80)
  1282. self.show()
  1283. self.button.clicked.connect(self.onButtonClick)
  1284. def onButtonClick(self):
  1285. self.close()
  1286. class Actions3(QDialog):
  1287. """
  1288. Simple dialog that consists of a Progress Bar and a Button.
  1289. Clicking on the button results in the start of a timer and
  1290. updates the progress bar..
  1291. """
  1292. def __init__(self):
  1293. super().__init__()
  1294. self.initUI()
  1295. def initUI(self):
  1296. self.setWindowTitle('D0150')
  1297. self.setWindowFlags(Qt.WindowStaysOnTopHint)
  1298. self.progress = QProgressBar(self)
  1299. self.progress.setGeometry(20, 20, 300, 25)
  1300. self.progress.setMaximum(100)
  1301. self.label=QLabel(self)
  1302. self.label.setGeometry(20, 50, 211, 31)
  1303. self.label.setText("- 自動導入中請勿關閉視窗 - ")
  1304. self.label2=QLabel(self)
  1305. self.label2.setGeometry(20, 70, 211, 31)
  1306. self.show()
  1307. self.calc = External2()
  1308. self.calc.countChanged.connect(self.onCountChanged)
  1309. self.calc.urlChanged.connect(self.onUrlChanged)
  1310. self.calc.start()
  1311. def onCountChanged(self, value):
  1312. self.progress.setValue(value)
  1313. def onUrlChanged(self, urlstr):
  1314. self.label2.setText(urlstr)
  1315. try:
  1316. #app1 = QApplication(sys.argv)
  1317. #window2 = Actions2()
  1318. FIle="A1.txt"
  1319. FIle2="B.txt"
  1320. FIle3="A2.txt"
  1321. def LoadingYesorNo():
  1322. SUPDA=db_session2.query(Someoneupdate).filter_by(正在自動導入中='YES').first()
  1323. SUPDAc=db_session2.query(Someoneupdate).filter_by(正在自動導入中='YES').count()
  1324. print(SUPDAc)
  1325. if (SUPDAc==1):
  1326. SUPDA.正在自動導入中='NO'
  1327. db_session2.commit()
  1328. coustomtxt,bdtxt=loadCSV()
  1329. engine = create_engine('mssql+pyodbc://'+bdtxt+'?driver=SQL+Server+Native+Client+11.0')
  1330. print (coustomtxt)
  1331. engine3=connectEngine(coustomtxt,engine)
  1332. '''
  1333. @event.listens_for(engine3, 'before_cursor_execute')
  1334. def receive_before_cursor_execute(conn, cursor, statement, params, context, executemany):
  1335. if executemany:
  1336. cursor.fast_executemany = True
  1337. cursor.commit()
  1338. '''
  1339. DB_session2 = sessionmaker(engine3)
  1340. db_session2= DB_session2()
  1341. log_Engine=CreateLogEngine()
  1342. while True:
  1343. if os.path.isfile(FIle)==True:
  1344. thisfile="A1.txt"
  1345. os.remove(FIle)
  1346. startDatekey,endDatekey,allpart=DateDataLoad(engine3,db_session2)
  1347. contforloop,loopper2,childAdminLs,loopper3=LoadCustomData(engine3,allpart)
  1348. UrlList,AdminList,PasswordList,backupUrlList=zip(*loopper2)
  1349. #webselect="GameType%5B%5D=35&GameType%5B%5D=22&GameType%5B%5D=11&GameType%5B%5D=12&GameType%5B%5D=13&GroupType%5B%5D=118&GroupType%5B%5D=109&GroupType%5B%5D=108&GroupType%5B%5D=102&GroupType%5B%5D=160&GroupType%5B%5D=159&GroupType%5B%5D=158&GroupType%5B%5D=157&GroupType%5B%5D=156&GroupType%5B%5D=155&GroupType%5B%5D=154&GroupType%5B%5D=153&GroupType%5B%5D=107&GroupType%5B%5D=106&GroupType%5B%5D=105&GroupType%5B%5D=104&GroupType%5B%5D=103&GroupType%5B%5D=101"
  1350. print(UrlList,AdminList,PasswordList)#,webselect)
  1351. start = time.time()
  1352. # refindlong=pd.DataFrame(columns =["開始日期","結束日期","網址","帳戶","名稱","總量","退水","中獎","輸贏","佔成輸贏","水倍差","上繳金額","自已總輸贏","上繳貢獻額","貢獻額","貢獻度","下注明細","玩法明細","調盤退水","調退實佔","上繳","會員","代理","總代理","股東","大股東","總監"])
  1353. # refindshort=pd.DataFrame(columns =["開始日期","結束日期","網址","帳戶","客戶s","總量s","中獎s","輸贏s","客戶小計s","代理小計s","總代理小計s","股東小計s","大股東小計s","總監小計s","個人所得s","水差s","下注明細s","查看對帳s","隨機碼"])
  1354. refindlong=pd.DataFrame(columns =["開始日期","結束日期","網址","帳戶","名稱","總量","退水","中獎","輸贏","佔成輸贏","水倍差","上繳金額","自已總輸贏","上繳貢獻額","貢獻額","貢獻度","下注明細","玩法明細","調盤退水","調退實佔","上繳","會員","代理","總代理","股東","大股東","總監"])
  1355. refindshort=pd.DataFrame(columns =["開始日期","結束日期","網址","帳戶","客戶s","總量s","中獎s","輸贏s","客戶小計s","代理小計s","總代理小計s","股東小計s","大股東小計s","總監小計s","個人所得s","水差s","下注明細s","查看對帳s","貢獻額s","貢獻度s","調盤退水s","調退實佔s","大總監","系統商","隨機碼"])
  1356. #refindoutbet=pd.DataFrame(columns =["開始日期","結束日期","網址","帳戶","總量","退水","中獎","小計"])
  1357. #window2.close()
  1358. #app1.quit()
  1359. #app1.exec_()
  1360. app = QtWidgets.QApplication(sys.argv)
  1361. window = Actions()
  1362. app.exec_()
  1363. del app
  1364. del window
  1365. #sys.exit(app.exec_())
  1366. continue
  1367. if os.path.isfile(FIle3)==True:
  1368. thisfile="A2.txt"
  1369. os.remove(FIle3)
  1370. startDatekey,endDatekey,allpart=DateDataLoad(engine3,db_session2)
  1371. contforloop,loopper2,childAdminLs,loopper3=LoadCustomData(engine3,allpart)
  1372. UrlList,AdminList,PasswordList,backupUrlList=zip(*loopper2)
  1373. print(UrlList,AdminList,PasswordList)
  1374. start = time.time()
  1375. # refindlong=pd.DataFrame(columns =["開始日期","結束日期","網址","帳戶","名稱","總量","退水","中獎","輸贏","佔成輸贏","水倍差","上繳金額","自已總輸贏","上繳貢獻額","貢獻額","貢獻度","下注明細","玩法明細","調盤退水","調退實佔","上繳","會員","代理","總代理","股東","大股東","總監"])
  1376. # refindshort=pd.DataFrame(columns =["開始日期","結束日期","網址","帳戶","客戶s","總量s","中獎s","輸贏s","客戶小計s","代理小計s","總代理小計s","股東小計s","大股東小計s","總監小計s","個人所得s","水差s","下注明細s","查看對帳s","隨機碼"])
  1377. refindlong=pd.DataFrame(columns =["開始日期","結束日期","網址","帳戶","名稱","總量","退水","中獎","輸贏","佔成輸贏","水倍差","上繳金額","自已總輸贏","上繳貢獻額","貢獻額","貢獻度","下注明細","玩法明細","調盤退水","調退實佔","上繳","會員","代理","總代理","股東","大股東","總監"])
  1378. refindshort=pd.DataFrame(columns =["開始日期","結束日期","網址","帳戶","客戶s","總量s","中獎s","輸贏s","客戶小計s","代理小計s","總代理小計s","股東小計s","大股東小計s","總監小計s","個人所得s","水差s","下注明細s","查看對帳s","貢獻額s","貢獻度s","調盤退水s","調退實佔s","大總監","系統商","隨機碼"])
  1379. refindoutbet=pd.DataFrame(columns =["開始日期","結束日期","網址","帳戶","總量","退水","中獎","小計"])
  1380. #window2.close()
  1381. #app1.quit()
  1382. #app1.exec_()
  1383. app = QtWidgets.QApplication(sys.argv)
  1384. window = Actions()
  1385. app.exec_()
  1386. del app
  1387. del window
  1388. #sys.exit(app.exec_())
  1389. app = QtWidgets.QApplication(sys.argv)
  1390. window = Actions3()
  1391. app.exec_()
  1392. del app
  1393. del window
  1394. continue
  1395. if os.path.isfile(FIle2)==True:
  1396. os.remove(FIle2)
  1397. break
  1398. time.sleep(1)
  1399. #sys.exit()
  1400. except:
  1401. traceback.print_exc() # 捕捉異常,並將異常傳播資訊輸出控制檯
  1402. traceback.print_exc(file=open('log.txt', 'a'))
  1403. logging.debug('debug message',exc_info=True)
  1404. logging.info('info message',exc_info=True)
  1405. logging.warning('warning message',exc_info=True)
  1406. logging.error('error message',exc_info=True)
  1407. logging.critical('critical message',exc_info=True)
  1408. app2 = QtWidgets.QApplication([])
  1409. error_dialog = QtWidgets.QErrorMessage()
  1410. error_dialog.setWindowTitle('ERROR')
  1411. error_dialog.showMessage('網路DRIVER錯誤')
  1412. app2.exec_()
  1413. finally:
  1414. closedatalodibg=LoadingYesorNo()