get_order_history.py 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. Created on Mon May 18 13:13:00 2020
  5. @author: chencong
  6. """
  7. import requests
  8. import hashlib
  9. import pandas as pd
  10. import time
  11. from urllib import parse
  12. import datetime
  13. import csv
  14. import math
  15. import pymysql
  16. from apscheduler.schedulers.blocking import BlockingScheduler
  17. def md5value(s):
  18. md5 = hashlib.md5()
  19. md5.update(s.encode("utf-8"))
  20. return md5.hexdigest()
  21. def get_yuewen_order(st,et):
  22. url = 'https://open.yuewen.com/cpapi/wxRecharge/querychargelog'
  23. version = 1
  24. secert_list = [['mqud82950@163.com','74ca754515fa253c8ab790603cebc2ee'],['guangzhouliuqi2@sina.com','10ce1dd6ccb330a82b73701d1e78f518']]
  25. for secert in secert_list:
  26. start_time = st
  27. email= secert[0]
  28. appsecert = secert[1]
  29. for i in range(int((et-st)/86400+1)):
  30. t =()
  31. end_time = min(start_time+86400,et)
  32. timestamp = int(time.time())
  33. s=''
  34. page = 1
  35. order_status = 2
  36. data = {'email':email,
  37. 'version':version,
  38. 'timestamp':timestamp,
  39. 'start_time':start_time,
  40. 'end_time':end_time,
  41. 'page':page,
  42. 'order_status':order_status}
  43. #'last_min_id':last_min_id,
  44. #'last_max_id':last_max_id,
  45. #'total_count':total_count,
  46. #'last_page':last_page}
  47. sorted_data = sorted(data.items())
  48. for k,v in sorted_data:
  49. s = s+str(k)+str(v)
  50. sign = md5value(appsecert+s).upper()
  51. data1 = {'email':email,
  52. 'version':version,
  53. 'timestamp':timestamp,
  54. 'start_time':start_time,
  55. 'end_time':end_time,
  56. 'page':page,
  57. 'order_status':order_status,
  58. 'sign':sign}
  59. list1 = requests.get(url=url,params=data1)
  60. #print(list1.json())
  61. total_count = list1.json()['data']['total_count']
  62. last_min_id = list1.json()['data']['min_id']
  63. last_max_id = list1.json()['data']['max_id']
  64. last_page = list1.json()['data']['page']
  65. if total_count>0:
  66. for x in list1.json()['data']['list']:
  67. y={}
  68. dtime = datetime.datetime.strptime(x['order_time'],"%Y-%m-%d %H:%M:%S")
  69. y['date']= ((int(time.mktime(dtime.timetuple()))+8*3600)//86400)*86400-8*3600
  70. y['platform'] = '阅文'
  71. y['channel'] = x['app_name']
  72. y['from_novel'] = x['book_name']
  73. y['user_id'] = x['openid']
  74. y['stage'] = ''
  75. y['channel_id']= 0
  76. y['order_time']=x['order_time']
  77. y['amount']=x['amount']
  78. y['reg_time']=x['reg_time']
  79. y['order_id']=x['order_id']
  80. """
  81. del x['app_name']
  82. del x['order_status']
  83. del x['order_type']
  84. del x['openid']
  85. del x['user_name']
  86. del x['sex']
  87. del x['channel_name']
  88. del x['book_id']
  89. del x['book_name']
  90. del x['report_status']
  91. """
  92. y= sorted(y.items(), key=lambda item:item[0])
  93. y = dict(y)
  94. y = tuple(y.values())
  95. t = t+((y),)
  96. if total_count>100:
  97. for page in range(2,math.ceil(total_count/100)+1):
  98. data = {'email':email,
  99. 'version':version,
  100. 'timestamp':timestamp,
  101. 'start_time':start_time,
  102. 'end_time':end_time,
  103. 'page':page,
  104. 'last_min_id':last_min_id,
  105. 'last_max_id':last_max_id,
  106. 'total_count':total_count,
  107. 'last_page':last_page,
  108. 'order_status':order_status}
  109. sorted_data = sorted(data.items())
  110. s1 = ''
  111. for k,v in sorted_data:
  112. s1 = s1 + str(k)+str(v)
  113. sign = md5value(appsecert+s1).upper()
  114. data2 = {'email':email,
  115. 'version':version,
  116. 'timestamp':timestamp,
  117. 'start_time':start_time,
  118. 'end_time':end_time,
  119. 'page':page,
  120. 'last_min_id':last_min_id,
  121. 'last_max_id':last_max_id,
  122. 'total_count':total_count,
  123. 'last_page':last_page,
  124. 'order_status':order_status,
  125. 'sign':sign}
  126. list2 = requests.get(url=url,params=data2)
  127. for x in list2.json()['data']['list']:
  128. y={}
  129. dtime = datetime.datetime.strptime(x['order_time'],"%Y-%m-%d %H:%M:%S")
  130. y['date']= ((int(time.mktime(dtime.timetuple()))+8*3600)//86400)*86400-8*3600
  131. y['platform'] = '阅文'
  132. y['channel'] = x['app_name']
  133. y['from_novel'] = x['book_name']
  134. y['user_id'] = x['openid']
  135. y['stage'] = ''
  136. y['channel_id']= 0
  137. y['order_time']=x['order_time']
  138. y['amount']=x['amount']
  139. y['reg_time']=x['reg_time']
  140. y['order_id']=x['order_id']
  141. """
  142. del x['app_name']
  143. del x['order_status']
  144. del x['order_type']
  145. del x['openid']
  146. del x['user_name']
  147. del x['sex']
  148. del x['channel_name']
  149. del x['book_id']
  150. del x['book_name']
  151. del x['report_status']
  152. """
  153. y= sorted(y.items(), key=lambda item:item[0])
  154. y = dict(y)
  155. y = tuple(y.values())
  156. t = t+((y),)
  157. total_count = list2.json()['data']['total_count']
  158. last_min_id = list2.json()['data']['min_id']
  159. last_max_id = list2.json()['data']['max_id']
  160. last_page = list2.json()['data']['page']
  161. print(email,start_time,len(t))
  162. start_time=start_time+86400
  163. if len(t)>0:
  164. mysql_insert_order(t)
  165. def get_zzy_order(st,et):
  166. API_list = [
  167. ['vip-songyi','098f17cc73cc4a74861ff4a87e3b526c',''],
  168. ['vip-wanger','aefabe89dfb84227bf7dae8ef0a59c89',''],
  169. ['vip-kuangwu','de5157d0e778400d84b2730626bd5787',''],
  170. ['vip-guangzhou500','ecce5c8566c24d63b8c829a10deb8601',''],
  171. ['vip-zhousi','b226af5f3cb243638b4a29d1a343d10d',''],
  172. ['vip-diwu1','7f2a1f03e53742c4acc49814b536ff59',''],
  173. ['vip-toutiao100','10ea6f1132084d86940c9b8b56fc5dad',''],
  174. ['vip-guangzhou3000','bac6f3c5d58244559b244c52bd1696b2',''],
  175. ['vip-guangzhou600','71873a3750bf49cdabb7a10441742950',''],
  176. ['vip-guangzhou3','385c7fadd05649e689a6bf272f3d59a7',''],
  177. ['vip-guangzhou5004','b8737034f23b4e5b9fa6256166faea57',''],
  178. ['vip-guangzhou5','5c65fd4b632a401097b6ca524eab551f',''],
  179. ['vip-guangzhou6','0939540ca8f34401b20b36e6c5409031',''],
  180. ['vip-guangzhoujiuqi','a7ede742affe457e8da4da181eb643d3',''],
  181. ['vip-guangzhou5003','9fefdc098ae54fe283dd2c5a6019b769',''],
  182. ['vip-qucheng2','e8cee00b1c3d42a6a75810a0d90e9e6a',''],
  183. ['vip-quchengsanqi','afc1e30e72ad41bf90c21aac41cb6ee1',''],
  184. ['vip-qucheng7qi','f8e7b801e63e43218111c1d8a5faf857',''],
  185. ['vip-qucheng8qi','17838a8f9ea64f809a88a5cd872c7375',''],
  186. ['vip-quchengjiuqi','80034ad8e7874ab99242ccce30ac1861',''],
  187. ['vip-ccsq','d8100098bf0d4fdb85e62150bb15a0b9',''],
  188. ['vip-qucheng11qi','e274b5bb5245444f806bc36b688f7a44',''],
  189. ['vip-qucheng12qi','b9de5355acbd414cb12f97786efe0376',''],
  190. ['vip-qucheng13qi','c8c91b7fdb8e476d81160c865f9bbf7b',''],
  191. ['vip-qucheng14qi','c9c27f53e40b4372a2bfe83dbd8fde03',''],
  192. ['vip-qucheng15qi','81909093d1db4374b5c545031380f3fe',''],
  193. ['vip-zanxiang10','04a2c53fbe3546dd8feb475592f9855c',''],
  194. ['ch-zzsw','d1a8e23df03a411a8353896e00751b23',''],
  195. ['ch-zhixiang','d0fc32aefdfb46ad959d6a09943b0d9e',''],
  196. ['ch-wenlan','520514c9c0cf46e19f0707ec28113a8b',''],
  197. ['ch-qxsww','b31211c625244e1a8123adf866a74935',''],
  198. ['ch-xixsc','25fc3c26d388410dbdb6ea5ce792fc1e',''],
  199. ['ch-zzsw5','fd5b6b28997f4880b398d0188f0fe68a',''],
  200. ['ch-yysf66','b194a98901ad4508aa0a984deedc35a5',''],
  201. ['ch-chyd','370c8494fd0c480f8c0b583d5eb3bd54',''],
  202. ['ch-xiangx5','4a196a83056d43ed82db2a9f941cd6cb',''],
  203. ['ch-shwg','d406794893de4175ab948fd028e43468',''],
  204. ['vip-diliu','0858b1566e0c4debb4cab808a0e207f7',''],
  205. ['ch-haotian2','7dd4a99a49b340a2a02822d9a83f64a8',''],
  206. ['ch-fysh6','645a6357d3ea413098f689dbf3d70c68',''],
  207. ['vip-qucheng16qi','bca1090368d44ec8a498d26e02ba06fe',''],
  208. ['vip-qucheng17qi','fd31bc211b4f42908163f68fdeabf869',''],
  209. ['vip-刘勇8','e35df1ac30b844eb81bd620674dc6937','刘勇6月'],
  210. ['110456b2078','8621335fe2f61b7afa5d8697ba7669b1','趣程21期'],
  211. ['110512df033','4768493cc3c7517f1b3fcd8bfeeb80ed','趣程22期'],
  212. ['110870010d2','fb368fe82522503d06880d19c938e10c','刘勇7月','1108701f1d6','0f9c0f8429d1a16a8a78c2306e7a4db3'],
  213. ['1109652c8b6','be5b9d099ccec53524e305b4bfd96edc','趣程23期'],
  214. ['11092522a7f','bbd92f3898a2518d3456246b8b364de5','阳光1期'],
  215. ['1109295d56c','9bb955186597882ac473e86ba4576158','趣程20期'],
  216. ['1119168245a','67d4941065fb2ce4e601fd156220c579','趣程19期'],
  217. #['106672e2105','0c3f3ab6d9a82fb515fe3dd906d4d96b','刘勇6月']
  218. ['112645ad567','67861e28b58a809ffc5af81a17e7de1f','广州10期'],
  219. ['113100128c7','adaa2b8fb53274453faaa0a70233562e','趣程25期'],
  220. ['1132659da72','de2fd503c8f0e11dc35e54d5cd1db7b5','刘勇8月']
  221. ]
  222. for x in API_list:
  223. my_key = x[0]
  224. secert = x[1]
  225. stage = x[2]
  226. my_sign=md5value(secert+'key='+my_key)
  227. url = 'https://openapi.818tu.com/partners/channel/channels/list?'
  228. parameter = 'key='+my_key+'&sign='+my_sign
  229. channel_list = requests.get(url+parameter) #获取子渠道列表
  230. if 'data' in channel_list.json().keys():
  231. items = channel_list.json()['data']['items']
  232. elif len(x)>3:
  233. print(channel_list.json())
  234. my_key=x[3]
  235. secert=x[4]
  236. my_sign=md5value(secert+'key='+my_key)
  237. url = 'https://openapi.818tu.com/partners/channel/channels/list?'
  238. parameter = 'key='+my_key+'&sign='+my_sign
  239. channel_list = requests.get(url+parameter)
  240. items = channel_list.json()['data']['items']
  241. for item in items : #获取channel_id 后逐个拉取历史orders
  242. r=()
  243. channel_id = item['id']
  244. channel = item['nickname']
  245. status = str(1)
  246. per_page = str(1000)
  247. limit_time = et
  248. get_time = st
  249. lt = parse.urlencode({'created_at[lt]':limit_time})
  250. gt = parse.urlencode({'created_at[gt]':get_time})
  251. url_1 = 'https://openapi.818tu.com/partners/channel/orders/list?'
  252. my_sign_1 = md5value(secert+'channel_id='+str(channel_id)+'&created_at[gt]='+get_time+'&created_at[lt]='+limit_time+'&key='+my_key+'&per_page='+per_page+'&status='+status)
  253. parameter_1 = 'channel_id='+str(channel_id)+'&'+gt+'&'+lt+'&per_page='+per_page+'&status='+status+'&key='+my_key+'&sign='+my_sign_1
  254. orders = requests.get(url_1+parameter_1)
  255. t = orders.json()['data']['count']//int(per_page)+1
  256. for page in range(1,t+1):
  257. my_sign_2 = md5value(secert+'channel_id='+str(channel_id)+'&created_at[gt]='+get_time+'&created_at[lt]='+limit_time+'&key='+my_key+'&page='+str(page)+'&per_page='+per_page+'&status='+status)
  258. parameter_2 ='channel_id='+str(channel_id)+'&'+gt+'&'+lt+'&page='+str(page)+'&per_page='+per_page+'&status='+status+'&key='+my_key+'&sign='+my_sign_2
  259. orders_1 = requests.get(url_1+parameter_2)
  260. b = orders_1.json()['data']['items']
  261. for a in b:
  262. c={}
  263. c['user_id']=str(a['member']['openid'])
  264. c['channel'] = channel
  265. c['reg_time']=a['member']['created_at']
  266. c['channel_id']=channel_id
  267. c['amount']= round(a['price']/100,2)
  268. c['order_id']=str(a['id'])
  269. c['order_time']=a['created_at']
  270. c['platform']='掌中云'
  271. c['stage']=stage
  272. c['amount']=a['amount']
  273. dtime = datetime.datetime.strptime(a['created_at'][0:10],"%Y-%m-%d")
  274. c['date']= ((int(time.mktime(dtime.timetuple()))+8*3600)//86400)*86400-8*3600
  275. if str(a['from_novel_id'])!='None':
  276. c['from_novel']=a['from_novel']['title']
  277. else :
  278. c['from_novel']='None'
  279. """
  280. del a['member']
  281. del a['referral_link_id']
  282. del a['id']
  283. del a['created_at']
  284. del a['paid_at']
  285. del a['border_id']
  286. del a['from_novel_id']
  287. del a['status']
  288. del a['price']
  289. del a['agent_uid']
  290. """
  291. x= sorted(c.items(), key=lambda item:item[0])
  292. x = dict(x)
  293. x = tuple(x.values())
  294. r = r+((x),)
  295. if len(r)>0:
  296. mysql_insert_order(r)
  297. print('zzy',channel,len(r))
  298. def get_zhangdu_order(st,et):
  299. secert_list = [
  300. [10015,'0125f434-7999-a4bb-77ab-28fb0a6a68ec','丹墨悦读'],
  301. [7406,'834a31ad-5533-d0d0-cb48-6f81f83919b0','九五月读'],
  302. [10497,'2e4a0bd0-e222-286b-73dc-1e6a6c8a6f28','书剑文阁'],
  303. [10507,'59babb99-9434-b1b1-7159-17afcb825cba','争锋文豪'],
  304. [9868,'320b477e-59c6-cb9f-9fb1-b0a304c3d82b','侠客书楼'],
  305. [10020,'9a914f89-f640-2ae8-34a7-c24b1f397d77','修焰文阅'],
  306. [9873,'14978692-cdae-9b8e-84cf-21d3202dd521','傲龙书社'],
  307. [10069,'ee9d7deb-8c3f-6862-31dc-779bec1cdc46','兰庭文鼎'],
  308. [9668,'88f5d175-de02-24ed-575c-0fcf6c847e02','冥影文库'],
  309. [10063,'016e69af-ce65-e5c0-34dc-47222cfb996a','冥影文海'],
  310. [10119,'a2d7196f-164b-8b58-cb6d-6d49d91fb106','冥真文轩'],
  311. [9754,'da893644-f673-42c7-65fd-f6a7ac30347a','冷锋看吧'],
  312. [7863,'ad3b06c6-c0b4-8f5f-8270-f493864f5a83','凤情书阁'],
  313. [10769,'ae1cb5cf-716c-f880-dcf2-ab041c2f849a','剑旭文海'],
  314. [7405,'862a9c69-801e-23ce-5fbd-bfcb0c1de5b0','南三月读'],
  315. [10472,'00d765f5-dd77-2b37-f0b0-bd5ac8d24a3e','南菲悦读'],
  316. [7872,'0e0915c5-ca02-3d62-b0ca-a80f41d722db','名媛书屋'],
  317. [10729,'08d04293-c004-7116-d260-53a340471306','坌腾文海'],
  318. [7865,'9ae4df81-a9c1-e7d3-50e5-62e40332dbef','夜情书房'],
  319. [9684,'db078cb4-fb45-7830-af84-736ef24912b6','大河中文网'],
  320. [9874,'4248df4a-d573-cf02-97cb-2d185d3cfb69','天降读物'],
  321. [10040,'116ef9c2-62e8-83ae-1c41-0f14d898dad8','奇汇看吧'],
  322. [9860,'bd90fa50-51f7-fce1-1523-591a041a8719','如阅墨香'],
  323. [7873,'456af16a-fc75-420c-a6ce-234cba07eb92','媚咪文馆'],
  324. [10543,'8304c660-a0a1-acfd-7ba7-3531383c9209','宸赫书楼'],
  325. [9872,'80cec896-ef46-6f77-a80e-6737954dfbaa','寻界文坊'],
  326. [9870,'f2d73b83-60e3-215c-f283-4e48a64e19e0','尊圣中文网'],
  327. [10545,'def2f148-82c2-b42c-634c-f2b557a529ce','尚凌文轩'],
  328. [9865,'41e1a151-397d-a08e-f582-f0394a59c748','巨龍悦读'],
  329. [10730,'f337c426-58fc-3865-4794-d5cb2c9ceec2','彭湃阅读'],
  330. [9685,'cb03d959-9311-f0d3-a6fb-188d79d92412','忠武文学城'],
  331. [10234,'b5e9eaea-483f-f246-5816-23ffa9309c05','悦苒看吧'],
  332. [9995,'d654d3ec-ec34-e243-6cab-5ba030fb1c8a','惊鸿文海'],
  333. [9633,'e943f5cf-8726-e7a8-6b76-d0a2d8f0a67c','慕云文库'],
  334. [10459,'781e425b-b14a-7d39-88fa-588d11d18b93','承泽文轩'],
  335. [10009,'a72aefcf-2fde-3187-90aa-09a30273cdc6','攀登文库'],
  336. [10003,'3c0bb2fa-e835-6f96-ffd2-185fd9dfd2af','新阅文轩'],
  337. [9663,'e0b49bb4-0365-ec52-e8d2-a71bf9eeb2a2','无涯文海'],
  338. [7864,'4c3ce52f-9e48-9f5a-c64f-1634dcb37d1d','日月书房'],
  339. [10030,'8674d904-c496-bacb-35ab-7a23a21b4725','旷世文海'],
  340. [10629,'a57edda1-766c-ae25-fb95-d57aaf144e7c','星烛书海'],
  341. [9847,'0ffd2d6f-aa77-67a0-fda1-510eab3ce006','昱墨文海'],
  342. [10011,'88ad507a-050a-8271-4ba4-adfd381cdaff','晨曦墨轩'],
  343. [9846,'be33e937-c791-48fb-8137-58f0d38a70b4','月落文阁'],
  344. [9689,'b6a4daa1-e9ce-0dd6-5714-21e089f327ab','林溪文苑'],
  345. [10008,'06301041-96ca-b3a1-9892-e02526a3f53e','枫林文选'],
  346. [10013,'1bfa8861-c20d-f994-b649-03bdcf40a403','桔橙文轩'],
  347. [10441,'fb13c84a-01b1-1a84-4c84-ffbc38241477','洛书文海'],
  348. [10235,'239c2e93-1c3c-05a9-ba69-4fb8c2d1553e','渲染悦轩'],
  349. [10628,'78348bef-cef1-969a-a0cf-990dab656bb5','炫轩文库'],
  350. [7890,'a1417aa5-2041-9b56-d419-4606f035d12d','烛影书屋'],
  351. [10669,'1b3a227c-c811-d1bf-9564-6cd5c22a1fb5','猛虎阅吧'],
  352. [10461,'755ef603-e734-bddf-e5b8-700e941c8c18','瑞祥文轩'],
  353. [9686,'d5964a79-2b2a-5e41-f54a-5d0304cd088b','知隐书香'],
  354. [9998,'a8d73912-364b-57aa-76e6-b38a2bb9fb7b','碧炎文海'],
  355. [10041,'4cd2ede8-8b02-2ef1-c29f-081ac5b926e0','祁苑文阅'],
  356. [10442,'62d5296b-9370-ecbf-e1b2-8e15158e3ed5','神龍悦读'],
  357. [10544,'a22e664b-0fa2-f08a-c60a-1b97d180d4a8','禹诺文阁'],
  358. [9915,'f8fe300b-eea6-9443-5a83-1b7d75ae88ad','秀丽文轩'],
  359. [9911,'7de672c4-e526-71a2-aa08-fd6012929a43','秋霞书社'],
  360. [10471,'b92c8ea0-f40c-b959-9c54-bdd42948fec4','空亭文苑'],
  361. [7887,'7271c2b9-5092-aa65-fa86-786cf3ecd528','竹枝书院'],
  362. [10460,'644d48ea-8ee3-3271-43e4-aa1e4d1eb86e','繁星书海'],
  363. [10499,'d5c5c552-34cd-55c3-e41f-44fe443cbe56','红炎文轩'],
  364. [9882,'3b4f7cca-ffea-086a-9444-5dfcd6c79794','绘色阅读'],
  365. [9876,'68e66280-c3d7-e84a-8fe1-94b1f526f5b6','若汐文海'],
  366. [10771,'982bde3b-5eb5-431e-a3f6-bac99735b759','莫宇文库'],
  367. [10067,'9bcd9dae-7718-91da-ea16-ea224e22164c','莹悦看吧'],
  368. [10473,'7864d9a8-df4b-d105-4f2e-e30179c2974a','蓝翼文海'],
  369. [10024,'1b5c7edc-038e-54ad-dad5-f30216dd8c0a','虎啸文选'],
  370. [10095,'ced46ef2-5759-6169-7e40-5624215f1f91','蛟龙书楼'],
  371. [9883,'0d525b30-997b-c727-9f03-1dea301f7ec0','西洲书舍'],
  372. [10668,'9839e7a4-5fc2-c05b-faaf-0ed5f2cdce81','豪天文轩'],
  373. [9866,'04cad8fd-c599-12e8-4d66-80cab639b050','豪金书社'],
  374. [7889,'bf0fd628-c244-52c5-ae94-d5fa0ec91f4d','踏莎小说阅读'],
  375. [10044,'6e87b452-dcb3-9c10-de65-c5919fa3d73d','追光悦读'],
  376. [10200,'81c06b81-1da5-53c4-3b4e-5f63a83f1579','锦墨书楼'],
  377. [9916,'58e354ee-5f24-f02f-ee90-5f6f0e5d97c8','锦溪书楼'],
  378. [9688,'e0a5f28c-6009-560a-6dc6-975e5e53cc74','阅欣文学'],
  379. [9910,'5e3f1ef2-b497-8560-810e-ee92882f0726','阅胜文选'],
  380. [10498,'89266631-e8fa-ea77-075e-d38d37a654c1','阳俊文海'],
  381. [10770,'e389c082-d1ca-cb2a-6d0b-915db869363a','雁风文轩'],
  382. [9900,'874d0ec8-1e85-f061-e095-d9997597bd8e','雅阁文社'],
  383. [7866,'dfb7dcdc-a6b1-e03e-2f57-9bfcb80a32c4','雨尘书阁'],
  384. [10474,'611bdc19-946c-945d-bcf8-2a64ca2919c0','雪松文库'],
  385. [9875,'b1fea7ac-4e0b-4546-e41a-9181af98515d','霄雄文学'],
  386. [10419,'8e4c73f2-50e4-dd33-3e06-63c3d8f38c04','霜华文库'],
  387. [9938,'fc61e6fd-bf13-44ea-73e9-609971b83456','青云文轩'],
  388. [10007,'8bc52ea8-64ec-32cf-3ef6-463abe469eed','青峰悦读'],
  389. [8939,'b016dcab-c002-ae71-f8ad-d5ffd35d3bbc','青葱看吧'],
  390. [10014,'4d5441a4-da30-15e4-0186-aa2aea21b286','青霞文苑'],
  391. [10418,'e3a32b05-ac1c-f518-af33-3c0d3883307b','飞鸿文海'],
  392. [9971,'5c625d14-8452-847e-09bd-33d30126ed31','魅力书楼'],
  393. [9922,'d1e77bc9-3875-ad44-2253-4201f70e0bb4','鹿鸣文库'],
  394. [10012,'90e4a5fc-4625-9710-6ab1-561ce0de0270','麒麟墨选'],
  395. [10199,'16abc367-31e0-f0aa-4cd4-9cc64e891d8a','鼎月文苑'],
  396. [10475,'f50879de-036f-7ec7-39dc-44ecda037dea','鼎盛文海'],
  397. [10901,'8135ee68-4255-8da3-9b35-cef2b942f6a2','孤风书楼'],
  398. [10899,'a8425c20-ee9a-b6ad-b8da-e6b74621be5c','冷雁文海'],
  399. [10896,'b24bca0d-3d31-0127-04e0-b2254ebb27e9','南烟书楼'],
  400. [10840,'e69ab01b-3725-4e70-670b-408b82860fe3','鹤鸣看吧'],
  401. [10841,'dc577efd-aa90-4dd6-f8ab-c42b38f84faa','深洋书楼'],
  402. [10842,'4cc12af5-2c86-2217-e5e1-ce1b28fa4758','航远文阁'],
  403. [10843,'ca5920b0-59cb-a55e-9fd9-e5095a29c04f','神武文轩'],
  404. [10845,'cfc93bd7-723e-0341-c6ef-c25253a8caa6','茗垣文轩'],
  405. [10995,'2e537d2a-6b5c-a862-2cf0-30aa46bcad6e','耀杰书海'],
  406. [10997,'d458def2-35c0-c577-d5a3-259225b9b76b','锦凌文选'],
  407. [10996,'b1bde6ca-c518-ea3c-cf5f-5d30286b34b4','清涛文海'],
  408. [10998,'b2b056ee-26a6-5868-874b-ab36f372900c','墨景文轩'],
  409. [10999,'630fda00-13ff-f625-05aa-8d1862d385da','炫熙书馆'],
  410. [11021,'90a1e372-8ce8-cd8f-e8c5-e9f603f0f9ba','狂涛文轩'],
  411. [11020,'73445fa0-6145-149f-58eb-772eb7c78481','展宸书楼'],
  412. [11011,'6fd7df66-8dc0-8939-759e-8e34d759e34a','阳曜文海'],
  413. [11009,'f1d96f4a-2a3c-b24b-1f36-2398cebc19ad','高韵书楼'],
  414. [11008,'d0a3a898-9e87-6adf-00ed-86b68040ecb0','成弘书楼'],
  415. [10963,'3cf33177-fd73-68a5-6095-0d8b36083a9c','旋锋文轩'],
  416. [10962,'c3f38863-6a7e-33aa-a44e-04b901ee1f04','赤虹文海'],
  417. [10961,'11306f81-cfea-ab8f-f0a0-2da8f0acdea5','飘霜书海'],
  418. [10942,'1235a146-7a1d-3a68-9f79-ede48cb8442c','月瑶看书'],
  419. [10941,'3fd1d09f-c66c-bee7-021d-41510a673339','婉婉阅读'],
  420. [10908,'2994b1bb-b51b-acd3-cad5-0055cf28104c','君浩文阅'],
  421. [10906,'a419c6fd-9e10-c9d9-ed9a-02814014fdc3','星汉文海'],
  422. [10879,'617a71dc-9ae0-3d5e-d373-ee833edc25df','华晖文轩'],
  423. [10878,'d76b661f-75d5-60e7-f596-26d61054348e','承载书楼'],
  424. [10877,'fe3c50c4-5fe7-36a1-6dc5-40ca27b3f671','鸿振书馆'],
  425. [11076,'9a9bfeaf-2abc-495b-83f5-5f00d36cc54b','正德书楼'],
  426. [11075,'1ab64fb6-aab3-f13a-d2f9-e079fb17d66e','泽宇文海'],
  427. [11074,'c45b1a56-44e3-384e-25cf-63b987d6a297','吉本书海'],
  428. [11073,'e0bf65b9-f592-1a1a-aac0-fbf710e40847','高岑文轩'],
  429. [11044,'0cdea0ed-7a09-36f0-750e-61b75652bc87','烈风文海'],
  430. [11043,'b605a351-81b8-910d-b0a8-66c9dc59374d','霸皇书楼'],
  431. [11042,'35902525-03d5-e99b-ea69-d5ed1c716da1','辰宇书馆'],
  432. [11039,'5abdd0ec-408e-ded3-d725-ac08e93eae90','吹雪文库'],
  433. [11038,'d364471e-963b-e8a7-e89b-06568c831500','飞羽书楼'],
  434. [10900,'e9136409-133f-37e1-7585-3f4f1675d20f','琦玉文库'],
  435. [10998,'b2b056ee-26a6-5868-874b-ab36f372900c','墨景文轩'],
  436. [10996,'b1bde6ca-c518-ea3c-cf5f-5d30286b34b4','清涛文海']
  437. ]
  438. url = 'https://api.zhangdu520.com/channel/getorder'
  439. for item in secert_list: #分渠道
  440. t=()
  441. uid = item[0]
  442. appsecert = item[1]
  443. channel = item[2]
  444. timestamp = int(time.time())
  445. sign = md5value(str(uid)+'&'+appsecert+'&'+str(timestamp))
  446. page =1
  447. starttime = st
  448. timespace = 90*3600*24
  449. endtime = min(et,st+timespace)
  450. for x in range((et-st)//timespace+1): #分时段
  451. Params = {'uid':uid,
  452. 'timestamp':timestamp,
  453. 'sign':sign,
  454. 'starttime':starttime,
  455. 'endtime':endtime
  456. }
  457. list1=requests.get(url=url,params=Params)
  458. pageCount= list1.json()['data']['pageCount']
  459. if pageCount>0 :
  460. for a in range(1,pageCount+1): #分页
  461. page = a
  462. Params = {'uid':uid,
  463. 'timestamp':timestamp,
  464. 'sign':sign,
  465. 'starttime':starttime,
  466. 'endtime':endtime,
  467. 'page':page
  468. }
  469. list2=requests.get(url=url,params=Params).json()
  470. if 'data' in list2.keys():
  471. for b in list2['data']['list']:
  472. c={}
  473. c['amount']=b['amount']
  474. c['channel_id']=uid
  475. c['order_id']=str(b['orderno'])
  476. c['order_time']=b['ctime']
  477. c['user_id']=b['openid']
  478. c['platform'] = '掌读'
  479. c['channel'] = channel
  480. c['reg_time']=b['regtime']
  481. c['from_novel']=''
  482. c['stage']=''
  483. c['date']= ((int(b['ctime'])+8*3600)//86400)*86400-8*3600
  484. """
  485. del b['openid']
  486. del b['regtime']
  487. del b['ip']
  488. del b['ua']
  489. del b['id']
  490. del b['ctime']
  491. del b['userid']
  492. del b['orderno']
  493. del b['source']
  494. del b['sourceid']
  495. """
  496. if b['status']=='1':
  497. del b['status']
  498. x= sorted(c.items(), key=lambda item:item[0])
  499. x = dict(x)
  500. x = tuple(x.values())
  501. t = t+((x),)
  502. else:
  503. print(list2)
  504. starttime =starttime+timespace
  505. endtime = min(et,starttime+timespace)
  506. if len(t)>0:
  507. mysql_insert_order(t)
  508. print('掌读',channel,len(t))
  509. def get_huasheng_order(st,et):
  510. apikey_list = [
  511. ['259900','72b49bebb7fc8df83feac8c4ed5c541b','趣程16期'],
  512. ['269900','65e6d003b58ee73b5406e6cc472ebf3e','趣程14期'],
  513. ['249900','f4f1475f604c4185a3e031e961dee637','趣程17期'],
  514. ['4040635','c8bf5346e35f51c7ce228cff4d4a3678','趣程19期'],
  515. ['2828976','20c0fb1d20964c2c42a725c72cac8863','刘勇6月'],
  516. ['4747764','f350d7edd89bb7f6170b970f071ecb36','趣程20期'],
  517. ['3737140','e786e59b87ebf239fdb43bf267ef4ee2','趣程13期'],
  518. ['4848597','fab68fe238a8df12073295373f9e0ff7','趣程22期'],
  519. ['5353590','50fefc21c7dd90cf9b584fe571f1bb64','趣程21期'],
  520. ['4545355','968ba35e79d8219c47ca356d19192c6f','趣程9期'],
  521. ['5858936','508c03b7f22059f1fa811c1774dbff89','阳光1期'],
  522. ['6464295','20ebdb167b8ed58fc406f05cd2b78802','趣程15期'],
  523. ['6666592','998aa35d1ed17635484eae5486e750db','趣程23期'],
  524. ['8282535','d61b2231e589571cf2328a7855df335e','陈冲1期'],
  525. ['104104493','957ad78e53a7fc2e751d36e6ec5329d5','广州10期'],
  526. ['102102605','50126233532d2e4e1796a16e1247d7dc','趣程24期'],
  527. ['127127862','b0af6b9ba284bd6b10b932cdeae96b74','趣程25期']]
  528. url = 'https://vip.rlcps.cn/api/getMerchants'
  529. for key in apikey_list: #获取每个vip账号下的channel_id
  530. apiKEY=key[0]
  531. apiSecurity=key[1]
  532. stage = key[2]
  533. timestamp = str(int(time.time()))
  534. sign = md5value(apiKEY+timestamp+apiSecurity).upper()
  535. data = {'apiKey':apiKEY,
  536. 'apiSecurity':apiSecurity,
  537. 'timestamp':timestamp,
  538. 'sign':sign
  539. }
  540. list0 = requests.post(url,data).json()
  541. t = ()
  542. for merchant in list0['data']:
  543. merchant_id = merchant['merchant_id']
  544. merchant_name = merchant['merchant_name']
  545. url1 = 'https://vip.rlcps.cn/api/orderList'
  546. start_time = st
  547. for i in range((et-st)//86400+1):
  548. page = 1
  549. date = time.strftime("%Y-%m-%d",time.localtime(start_time))
  550. sign = md5value(apiKEY+date+str(merchant_id)+timestamp+apiSecurity).upper()
  551. data1 = {'apiKey':apiKEY,
  552. 'apiSecurity':apiSecurity,
  553. 'timestamp':timestamp,
  554. 'date':date,
  555. 'merchant_id':merchant_id,
  556. 'sign':sign,
  557. 'page':page}
  558. list1 = requests.post(url1,data1).json()
  559. if 'data' in list1.keys() and len(list1['data'])>0 :
  560. for i in range(int(math.ceil(list1['count']/500))):
  561. data2= {'apiKey':apiKEY,
  562. 'apiSecurity':apiSecurity,
  563. 'timestamp':timestamp,
  564. 'date':date,
  565. 'merchant_id':merchant_id,
  566. 'sign':sign,
  567. 'page':page}
  568. list2 = requests.post(url1,data2).json()
  569. for x in list2['data']:
  570. if x['order_status']==1:
  571. y={}
  572. y['user_id'] = x['openid']
  573. y['order_id']=x['trans_id']
  574. y['order_time'] = x['pay_at']
  575. y['reg_time'] = x['join_at']
  576. y['date'] = start_time
  577. y['channel'] = merchant_name
  578. y['channel_id'] = merchant_id
  579. y['platform'] = '花生'
  580. y['stage'] = stage
  581. y['from_novel'] = x['book_name']
  582. y['amount']=x['amount']
  583. """
  584. del x['order_num']
  585. del x['book_name']
  586. del x['trans_id']
  587. del x['pay_at']
  588. del x['join_at']
  589. del x['subscribe_at']
  590. del x['openid']
  591. del x['charge_count']
  592. del x['book_id']
  593. del x['order_status']
  594. del x['user_name']
  595. del x['spread_name']
  596. del x['request_at']
  597. """
  598. y= sorted(y.items(), key=lambda item:item[0])
  599. y = dict(y)
  600. y = tuple(y.values())
  601. t = t+((y),)
  602. page=page+1
  603. else:
  604. print(list1)
  605. start_time = start_time+86400
  606. if len(t)>0:
  607. mysql_insert_order(t)
  608. print(stage,merchant_name,len(t))
  609. def get_ysg_order(st,et):
  610. key_list =[['趣程23期',10659,'T3A3LQZVZXN80M1A7OPVYYWT6Q2XPAJX','修明书楼','趣程23期'],
  611. ['趣程23期',10660,'T3A3LQZVZXN80M1A7OPVYYWT6Q2XPAJX','绍晖文海','趣程23期'],
  612. ['趣程21期',10656,'KXYIOQT29FDH80NUWRV9XUUK4QIOEIAB','赤凰文阁','趣程21期'],
  613. ['趣程21期',10678,'KXYIOQT29FDH80NUWRV9XUUK4QIOEIAB','千月书楼','趣程21期'],
  614. ['趣程yangg1',10672,'ZR7PM1YA5DQ6JCMVTH3G5TLHI47DG1GF','舒言文海','阳光1期'],
  615. ['趣程yangg1',10704,'ZR7PM1YA5DQ6JCMVTH3G5TLHI47DG1GF','向阳文海','阳光1期'],
  616. ['趣程清勇6',10675,'B6FK1HFW1V9ZPD6WX0FGBX3WP73E6M5V','璃月文楼','刘勇7月'],
  617. ['趣程清勇6',10676,'B6FK1HFW1V9ZPD6WX0FGBX3WP73E6M5V','璃月颂书','刘勇7月'],
  618. ['趣程清勇6',10677,'B6FK1HFW1V9ZPD6WX0FGBX3WP73E6M5V','璃月阅读','刘勇7月'],
  619. ['趣程15期',10696,'8OC7SNCL46ZEI7JBACXFDM8CP5JM1FSL','盛德文苑','趣程15期'],
  620. ['趣程15期',10697,'8OC7SNCL46ZEI7JBACXFDM8CP5JM1FSL','博涉文海','趣程15期'],
  621. ['趣程15期',10698,'8OC7SNCL46ZEI7JBACXFDM8CP5JM1FSL','高岑文轩','趣程15期']
  622. ]
  623. url='https://novel.youshuge.com/v2/open/orders'
  624. o = ()
  625. for key in key_list:
  626. host_name=key[0]
  627. channel_id = key[1]
  628. secert_key = key[2]
  629. channel = key[3]
  630. stage = key[4]
  631. timestamp = int(time.time())
  632. start_date=time.strftime("%Y-%m-%d",time.localtime(st))
  633. end_date=time.strftime("%Y-%m-%d",time.localtime(et))
  634. page=1
  635. str1 = 'channel_id='+str(channel_id)+'&end_date='+end_date+'&host_name='+host_name+'&page='+str(page)+'&pay_status=1'+'&start_date='+start_date+'&time='+str(timestamp)+'&key='+secert_key
  636. sign = md5value(str1).upper()
  637. data = {'sign':sign,
  638. 'host_name':host_name,
  639. 'time':timestamp,
  640. 'channel_id':channel_id,
  641. 'page':page,
  642. 'pay_status':1,
  643. 'start_date':start_date,
  644. 'end_date':end_date
  645. }
  646. r =requests.post(url,data).json()
  647. if 'data' in r.keys():
  648. if len(r['data'])>0:
  649. for i in range((r['data'][0]['count']-1)//100+1):
  650. timestamp = int(time.time())
  651. str1 = 'channel_id='+str(channel_id)+'&end_date='+end_date+'&host_name='+host_name+'&page='+str(page)+'&pay_status=1'+'&start_date='+start_date+'&time='+str(timestamp)+'&key='+secert_key
  652. sign = md5value(str1).upper()
  653. data2= {'sign':sign,
  654. 'host_name':host_name,
  655. 'time':timestamp,
  656. 'channel_id':channel_id,
  657. 'page':page,
  658. 'pay_status':1,
  659. 'start_date':start_date,
  660. 'end_date':end_date
  661. }
  662. r2 = requests.post(url,data2).json()
  663. if 'data' in r2.keys():
  664. if len(r2['data'])>0:
  665. for x in r2['data']:
  666. y={}
  667. y['order_id']=x['order_num']
  668. y['amount']=round(int(x['price'])/100,2)
  669. y['order_time']=x['create_time']
  670. y['channel']=channel
  671. y['from_novel']=x['book_name']
  672. y['stage']=stage
  673. y['user_id']=x['openid']
  674. y['channel_id']=channel_id
  675. dtime = datetime.datetime.strptime(x['create_time'][0:10],"%Y-%m-%d")
  676. y['date']= ((int(time.mktime(dtime.timetuple()))+8*3600)//86400)*86400-8*3600
  677. y['platform']='悠书阁'
  678. y['reg_time']=x['reg_time']
  679. y= sorted(y.items(), key=lambda item:item[0])
  680. y = dict(y)
  681. y = tuple(y.values())
  682. o = o+((y),)
  683. page=page+1
  684. if len(o)>0:
  685. mysql_insert_order(o)
  686. def mysql_insert_order(data):
  687. db = pymysql.connect('rm-bp1c9cj79872tx3aaro.mysql.rds.aliyuncs.com','superc','Cc719199895','quchen_text')
  688. cursor = db.cursor()
  689. sql = 'insert ignore into quchen_text.order(amount,channel,channel_id,date,from_novel,order_id,order_time,platform,reg_time,stage,user_id) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'
  690. #sql = "update quchen_text.order set amount =%s where platform='掌中云' and order_id =%s"
  691. try:
  692. cursor.executemany(sql,data)
  693. db.commit()
  694. print('access insert order',len(data))
  695. except:
  696. db.rollback()
  697. print('defeat')
  698. def start_all_job():
  699. st_unix = 1599062400
  700. et_unix = 1599408000
  701. et_unix = et_unix - 1
  702. st_dt = time.strftime("%Y-%m-%dT%H:%M:%S",time.localtime(st_unix))+'+08:00'
  703. et_dt = time.strftime("%Y-%m-%dT%H:%M:%S",time.localtime(et_unix))+'+08:00'
  704. get_yuewen_order(st_unix,et_unix)
  705. #get_zzy_order(st_dt,et_dt)
  706. #get_zhangdu_order(st_unix,et_unix)
  707. #get_huasheng_order(st_unix,et_unix)
  708. #get_ysg_order(st_unix,et_unix)
  709. start_all_job()
  710. """
  711. start_job_time = '2020-07-08 00:30:00'
  712. if __name__ == '__main__':
  713. scheduler = BlockingScheduler()
  714. scheduler.add_job(start_all_job, 'interval',days=1,start_date=start_job_time)
  715. scheduler.start()
  716. """