Explorar el Código

Merge branch 'dev'

ck hace 4 años
padre
commit
49cff962b0
Se han modificado 57 ficheros con 5756 adiciones y 1912 borrados
  1. 66 6
      README.md
  2. 6 1
      dgp/get_ad_hourly.py
  3. 4 1
      dgp/get_campaign_daily.py
  4. 168 0
      dgp/get_cost_daily.py
  5. 158 158
      dgp/get_cost_history.py
  6. 158 0
      dgp/get_cost_history_bk20201117.py
  7. 21 12
      dgp/get_data_hourly.py
  8. 55 47
      dgp/get_order_daily.py
  9. 1 1
      dgp/huasheng_text.py
  10. 8 8
      dgp/repair_order_daily.py
  11. 100 587
      dgp/tests/check_order.py
  12. 130 0
      dgp/tests/check_order_bk20201110.py
  13. 22 0
      dgp/tests/conf/account/huasheng_account_config.csv
  14. 2 0
      dgp/tests/conf/account/new_account/new_huasheng.csv
  15. 2 0
      dgp/tests/conf/account/new_account/new_wending.csv
  16. 2 0
      dgp/tests/conf/account/new_account/new_yangguang.csv
  17. 2 0
      dgp/tests/conf/account/new_account/new_youshuge.csv
  18. 2 0
      dgp/tests/conf/account/new_account/new_yuewen.csv
  19. 4 0
      dgp/tests/conf/account/qiyue_account_config.csv
  20. 20 0
      dgp/tests/conf/account/wending_account_config.csv
  21. 179 0
      dgp/tests/conf/account/yangguang_account_config.csv
  22. 20 0
      dgp/tests/conf/account/youshuge_account_config.csv
  23. 2 0
      dgp/tests/conf/account/yuewen_account_config.csv
  24. 168 0
      dgp/tests/conf/account/zhangdu_account_config.csv
  25. 62 0
      dgp/tests/conf/account/zhangzhongyun_account_config.csv
  26. 0 0
      dgp/tests/conf/account_list.ini
  27. 0 35
      dgp/tests/conf/db.ini
  28. 36 0
      dgp/tests/conf/db_config.ini
  29. 4 0
      dgp/tests/demo/account_list_config.ini
  30. 82 0
      dgp/tests/demo/test.py
  31. 1 0
      dgp/tests/demo/test_pool.py
  32. 75 0
      dgp/tests/demo/test_read_ini.py
  33. 209 0
      dgp/tests/get_order_dairly_qiyue.py
  34. 337 0
      dgp/tests/get_order_dairly_wending.py
  35. 341 0
      dgp/tests/get_order_dairly_wending_bk20201110.py
  36. 252 0
      dgp/tests/get_order_dairly_yangguang.py
  37. 251 0
      dgp/tests/get_order_dairly_yangguang_bk20201110.py
  38. 62 0
      dgp/tests/get_order_history_data.py
  39. 74 0
      dgp/tests/get_order_hourly.py
  40. 69 0
      dgp/tests/get_order_hourly_bk20201110.py
  41. 0 99
      dgp/tests/test.py
  42. 0 212
      dgp/tests/test_multiprocessing.py
  43. 0 638
      dgp/tests/test_threadpool.py
  44. 0 0
      dgp/tests/util/LoggerService.py
  45. 41 42
      dgp/tests/util/MySQLConnection.py
  46. 0 0
      dgp/tests/util/QueryType.py
  47. 31 0
      dgp/tests/util/date_util.py
  48. 59 0
      dgp/tests/util/db_order_util.py
  49. 140 0
      dgp/tests/util/platform_config_util.py
  50. 668 0
      dgp/tests/util/platform_order_api_util.py
  51. 661 0
      dgp/tests/util/platform_order_api_util_bk20201110.py
  52. 0 35
      dgp/tests/util/platform_util.py
  53. 44 0
      dgp/tests/util/robust_util.py
  54. 950 5
      dgp/token_list.py
  55. 6 1
      dgp/update_ad_daily.py
  56. 1 14
      setup.py
  57. 0 10
      todo_list.md

+ 66 - 6
README.md

@@ -4,27 +4,87 @@
 Data grabbing platform(DGP)数据采集平台
 
 #### 文档结构
-
 * `dgp`为代码目录,`gpd/tests`为测试代码目录
 * `docs`为文档目录
 
 #### 安装教程
-
 * 确保已安装Python3
-* 安装项目依赖,执行 `pip install -r requirements.txt`
+* 安装项目依赖,执行 ``
 
+#### 特性
+* 数据库使用`dbutils`连接池,并独立配置mysql的配置文件`db_config.ini`
+* 平台订单数据爬取采用线程池子线程爬取,大大提升爬取速度
+* 平台账号配置(`conf/account`)使用csv配置文件存储,方便修改同步,并支持直接修改后,下次获取即可生效,无需重启脚本
 
-#### 使用说明
+#### 后续优化点
+- [x] 数据库连接需要单独配置
+- [x] 账号,token配置也需要独立成配置文件,方便实时获取最新的数据,而不需要重启脚本
+- [x] 多线程,异步获取订单数据,目前获取数据都是单线程,太慢了,掌中云2020-09-25的订单数据共12106条,执行时间为529秒,需要特别优化。
+- [ ] 业务报警,钉钉提醒,邮件?
+- [x] 异常处理
+- [ ] 日志输出
+- [ ] 全局常量配置
 
+#### 使用说明
 * 修改数据库账号配置
 * 检查account和token配置
-* 执行相关脚本:`nohup python3 -u get_data_hourly.py >output_get_data_hourly_202009251042.log 2>&1 &`
+* 执行相关脚本:`nohup python3 -u qucheng_api/get_data_hourly.py >log_py_output/output_get_data_hourly_202010111947.log 2>&1 &`
+* 每小时同步订单脚本:`nohup python3 -u get_order_hourly.py >get_order_hourly_202010111942.log 2>&1 &`
+* 凌晨同步昨日订单脚本:`nohup python3 -u check_order.py >check_order_202010111943.log 2>&1 &`
 
-#### 参与贡献
 
+#### 特别说明
+* 掌中云 订单保存时提示是实际入库记录,因为要去重,另外可能存在重复的数据(掌中云有多个账号有同一条订单数据)
+* 阅文 查询有整点订单查询不到,结束时间多加5秒可以查询,这个是阅文的bug
+* 花生 订单查询结果是按天查询的,没有按小时查询,所以每小时获取的都是小时当天的所有数据
+* 悠书阁 订单查询结果是按天查询的,没有按小时查询,且每小时查询的时候要判断结束时间要比开始时间大一天,否则查询不到数据
+
+
+#### 参与贡献
 * Fork 本仓库,拉取的是dev分支
 * 直接在dev分支上开发,添加新的依赖后请执行 `pip freeze > requirements.txt` 或 `pipreqs --force /qc-dgp`
 * 格式化代码,提交代码
 * 新建 Pull Request
 
 
+#### 改动
+###### 郑万耕 2020-10-11 改动如下:
+~~~
+同步订单的脚本今天优化了一版。 老的同步订单数据的脚本后面不用了,以后就用 tests/check_order.py, tests/get_order_hourly.py
+服务器上已经运行新的脚本。
+
+
+停止的脚本(后续也不再维护下面两个脚本):
+get_order_daily.py	
+repair_order_daily.py
+
+
+新的抓取订单脚本(tests目录):
+check_order.py       每天凌晨3-4点同步前日割平台的订单数据
+get_order_hourly.py  每小时同步各平台订单数据
+
+
+改动的脚本:
+get_data_hourly.py   这个脚本只跑消耗cost数据,不再跑订单同步数据。
+
+
+备注:order_daily表不会继续插入数据,后面不需要再观察该表与order的数据是否一致。 每天看一下check_order.py的日志,如果有错误或者异常则需要重跑数据。获取订单的各平台账号配置在:tests/conf/account 下,新脚本是支持修改账号而无需重启就能在下次调度执行生效。
+~~~
+
+
+##### 2020-11-19改动汇总如下
+~~~
+《1》对消耗数数据相关脚本,添加重载token_list.py ,避免每次添加新消耗账号,需要重新启动 (linux/root/qucheng_api/目录)
+
+《2》添加了3个新h5商城平台订单数据获取脚本(linux/root/tests/目录)
+get_order_dairly_qiyue.py      	## 七悦  平台订单数据获取(日调度)			
+get_order_dairly_wending.py		## 文鼎  平台订单数据获取(日调度)	
+get_order_dairly_yangguang.py  	## 阳光  平台订单数据获取(日调度)
+
+《3》添加各平台订单历史数据获取脚本(linux/root/tests/目录)
+get_order_history_data.py	  	## 8个平台的历史订单数据获取  
+
+备注 : 新版本脚本中,不管消耗数据,还是订单数据,都不再需要每次添加账号再重启脚本,
+    直接添加消耗账号到 linux/root/qucheng_api/token_list.py
+    直接添加订单账号到 linux/root/tests/conf/account/ 中各平台账号的csv文件
+~~~

+ 6 - 1
dgp/get_ad_hourly.py

@@ -16,6 +16,11 @@ import pymysql
 from apscheduler.schedulers.blocking import BlockingScheduler
 import token_list as tl
 
+import importlib
+importlib.reload(tl)
+
+
+
 token_list_q = tl.token_list_qq
 token_list_v = tl.token_list_vx
 
@@ -115,7 +120,7 @@ def start_all_job():
                     t2 = t2+((d),)
     mysql_insert_daily_vx(t2)
     
-start_job_time = '2020-09-24 17:30:00'
+start_job_time = '2020-11-24 18:15:00'
 
 if __name__ == '__main__':
     scheduler = BlockingScheduler()

+ 4 - 1
dgp/get_campaign_daily.py

@@ -16,6 +16,9 @@ from apscheduler.schedulers.blocking import BlockingScheduler
 import datetime
 import token_list as tl
 
+import importlib
+importlib.reload(tl)
+
 
 def adcreatives_get(access_token,account_id,fields) : #获取创意
 
@@ -674,7 +677,7 @@ def start_all_job():
 
 
 
-start_job_time = '2020-09-25 06:10:10'
+start_job_time = '2020-11-25 03:10:10'
 
 if __name__ == '__main__':
     scheduler = BlockingScheduler()

+ 168 - 0
dgp/get_cost_daily.py

@@ -0,0 +1,168 @@
+## Subject of obligation
+
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+
+import requests
+import urllib.parse 
+import time
+import json 
+import random
+import datetime
+import csv
+import pymysql
+## import token_list as ts
+from apscheduler.schedulers.blocking import BlockingScheduler
+import token_list  as tl
+
+#import importlib   importlib.reload(tl)
+from  imp  import  reload
+reload(tl)
+
+
+def getSelfDateStr(times=time.time(),date_format='%Y%m%d'):
+
+    timestamps = str(time.strftime(date_format,time.localtime(times)))
+    return timestamps
+
+
+
+def daily_reports_get(access_token,account_id,level,fields) :
+    interface = 'daily_reports/get'
+    url = 'https://api.e.qq.com/v1.1/' + interface
+
+    common_parameters = {
+        'access_token': access_token, 
+        'timestamp': int(time.time()), 
+        'nonce': str(time.time()) + str(random.randint(0, 999999)),
+    }
+
+    time_stamp = int(time.time())
+    st_date = getSelfDateStr((time_stamp-(3600*24*1)),date_format='%Y-%m-%d')
+    ed_date = getSelfDateStr(time_stamp,date_format='%Y-%m-%d')
+    #print("统计时间:",st_date,  ed_date)
+    parameters = {
+        "account_id": account_id,
+        "level":level,
+        "date_range": {   
+            ##"start_date": '2020-11-12',         ## 补数据,需求的时间段
+            ##"end_date": '2020-11-16'
+            "start_date":st_date,
+            "end_date":st_date
+        },
+        "page":1,
+        "page_size":1000,
+        "fields":fields
+    }
+
+    parameters.update(common_parameters)
+    for k in parameters:
+        if type(parameters[k]) is not str:
+            parameters[k] = json.dumps(parameters[k])
+
+    r = requests.get(url, params = parameters)
+
+    return r.json()
+
+
+def mysql_insert_daily_vx(data):
+    db = pymysql.connect('rm-bp1c9cj79872tx3aaro.mysql.rds.aliyuncs.com','superc','Cc719199895','quchen_text')
+    cursor = db.cursor() 
+    time1 = time.time()
+    
+    sql2 = 'insert ignore into daily_vx (date,cost,view_count,valid_click_count,ctr,official_account_follow_rate,order_amount,order_roi,order_count,order_rate,order_unit_price,web_order_cost,first_day_order_amount,first_day_order_count,account_id) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'
+
+    try:
+        cursor.executemany(sql2,data)
+        db.commit()
+        cost_time =round((time.time()-time1)/60,1)
+        print('insert_daily_vx access',len(data),'cost_minutes:',cost_time)
+    except:
+        db.rollback()
+        print('insert_daily_vx defeat')
+
+
+def mysql_insert_daily_qq(data):
+    db = pymysql.connect('rm-bp1c9cj79872tx3aaro.mysql.rds.aliyuncs.com','superc','Cc719199895','quchen_text')
+    cursor = db.cursor() 
+    time1 = time.time()
+    sql1 = 'insert ignore into daily_qq (date,view_count,valid_click_count,ctr,cpc,cost,web_order_count,web_order_rate,web_order_cost,follow_count,order_amount,order_roi,platform_page_view_count,web_commodity_page_view_count,from_follow_uv,account_id) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'
+    #sql2 = 'replace into daily_qq (date,view_count,valid_click_count,ctr,cpc,cost,web_order_count,web_order_rate,web_order_cost,follow_count,order_amount,order_roi,platform_page_view_count,web_commodity_page_view_count,from_follow_uv,account_id) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'     
+
+    try:
+        cursor.executemany(sql1,data)
+        db.commit()
+        cost_time =round((time.time()-time1)/60,1)
+        print('insert_daily_qq access',len(data),'cost_minutes:',cost_time)
+    except:
+        db.rollback()
+        print('insert_daily_qq defeat')
+
+
+def get_qq_cost(token_list_q):
+    t=()
+    for x in token_list_q :
+        a = daily_reports_get(x[2],x[0],"REPORT_LEVEL_ADVERTISER",('date','view_count','valid_click_count','ctr','cpc','cost','web_order_count','web_order_rate','web_order_cost','follow_count','order_amount','order_roi','platform_page_view_count','web_commodity_page_view_count','from_follow_uv'))
+        try : 
+            for b in a['data']['list']:
+                b['account_id']=x[0]
+                z = tuple(b.values())
+                t= t+((z),)
+        except Exception as e:
+            print(a)
+            continue
+                
+    mysql_insert_daily_qq(t)
+    print(len(t),x[0])
+        
+
+def get_wx_cost(token_list_v):
+    t=()
+    for y in token_list_v :
+        c = daily_reports_get(y[2],y[0],"REPORT_LEVEL_ADVERTISER_WECHAT",('date','cost','view_count','valid_click_count','ctr','official_account_follow_rate','order_amount','order_roi','order_count','order_rate','order_unit_price','web_order_cost','first_day_order_amount','first_day_order_count')) 
+        #print(y[0],c['data']['list'])
+        try : 
+            for d in c['data']['list']:
+                d['account_id']=y[0]
+                x = tuple(d.values())
+                t= t+((x),)
+        except Exception as e:
+            print(c)
+            continue
+            
+    mysql_insert_daily_vx(t)
+    print(len(t),y[0]) 
+    ## print(t) 
+        
+        
+def get_cost():
+    '''
+    token_list_q = [
+    ['18353744','','2d1c965ff2a7608aec1ad7baa6455ce0','b09e877adba47f9827e3d087ecb3d18d','乾城文海','趣程15期','董平','文鼎','仕途天骄'],
+    ['18353743','','7c27bff5464266c81929e024bb120b36','1366f89a0e55de466ed625841037c431','乾城文海','趣程15期','董平','文鼎','仕途天骄']
+    ]
+    token_list_v =[
+    ['14490987','wxd2e3b7b0c2f0ad9c','bad09cccc78b32d60ed68973bd4e62ad','71b38d5b9cf43cf0af4cd19a33331c3a','风吟书楼','清勇10月','蒋瑜','掌中云','风无痕深爱无言']
+    ]  
+    '''
+    token_list_v = tl.token_list_vx
+    token_list_q = tl.token_list_qq
+
+    get_wx_cost(token_list_v)
+    get_qq_cost(token_list_q)
+
+
+  
+#if __name__ == '__main__':
+#    get_cost()
+
+
+start_job_time = '2020-11-25 04:17:00'
+
+if __name__ == '__main__':
+    scheduler = BlockingScheduler()
+    scheduler.add_job(get_cost, 'interval',days=1,start_date=start_job_time)
+    scheduler.start()
+
+

+ 158 - 158
dgp/get_cost_history.py

@@ -1,158 +1,158 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-"""
-Created on Thu Apr 30 11:18:31 2020
-
-@author: chencong
-"""
-
-import requests
-import urllib.parse 
-import time
-import json 
-import random
-import datetime
-import csv
-import pymysql
-import token_list as ts
-from apscheduler.schedulers.blocking import BlockingScheduler
-
-"""
-header1 = ['account_id','date','view_count','valid_click_count','ctr','cpc','cost','web_order_count','web_order_rate','web_order_cost','follow_count','order_amount','cheout_fd','order_roi','cheout_fd_reward']
-header2 = ['account_id','date','cost','view_count','valid_click_count','ctr','official_account_follow_rate','order_amount','order_roi','order_count','order_rate','order_unit_price','web_order_cost','first_day_order_amount','first_day_order_count']
-
-def append_csv(path,data,header):
-    header = header
-    with open (path,'a+',newline='',encoding='utf-8') as f :
-        dictWriter = csv.DictWriter(f,fieldnames=header)
-        dictWriter.writerow(data)
-def write_header(path,header):
-    header = header
-    with open (path,'w',newline='',encoding='utf-8') as f:
-        dictWriter = csv.DictWriter(f, fieldnames=header)
-        dictWriter.writeheader()
-ad_qq = 'ad_qq_'+str(time.strftime("%Y-%m-%d", time.localtime()))+'.csv'
-ad_vx = 'ad_vx_'+str(time.strftime("%Y-%m-%d", time.localtime()))+'.csv'
-write_header(ad_qq,header1)
-write_header(ad_vx,header2)
-"""
-def daily_reports_get(access_token,account_id,level,fields) :
-    interface = 'daily_reports/get'
-    url = 'https://api.e.qq.com/v1.1/' + interface
-
-    common_parameters = {
-            'access_token': access_token, 
-            'timestamp': int(time.time()), 
-            'nonce': str(time.time()) + str(random.randint(0, 999999)),
-        }
-
-    parameters = {
-            "account_id": account_id,
-            "level":level,
-            "date_range": 
-            {   
-                "start_date": '2020-09-01',
-                "end_date": '2020-09-03'
-            },
-            "page":1,
-            "page_size":1000,
-            "fields":fields
-            }
-
-    parameters.update(common_parameters)
-    for k in parameters:
-        if type(parameters[k]) is not str:
-            parameters[k] = json.dumps(parameters[k])
-
-    r = requests.get(url, params = parameters)
-
-    return r.json()
-
-
-def mysql_insert_daily_vx(data):
-    db = pymysql.connect('rm-bp1c9cj79872tx3aaro.mysql.rds.aliyuncs.com','superc','Cc719199895','quchen_text')
-    cursor = db.cursor() 
-    time1 = time.time()
-    
-    sql2 = 'insert ignore into daily_vx (date,cost,view_count,valid_click_count,ctr,official_account_follow_rate,order_amount,order_roi,order_count,order_rate,order_unit_price,web_order_cost,first_day_order_amount,first_day_order_count,account_id) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'
-
-    try:
-        cursor.executemany(sql2,data)
-        db.commit()
-        cost_time =round((time.time()-time1)/60,1)
-        print('insert_daily_vx access',len(data),'cost_minutes:',cost_time)
-    except:
-        db.rollback()
-        print('insert_daily_vx defeat')
-
-
-def mysql_insert_daily_qq(data):
-    db = pymysql.connect('rm-bp1c9cj79872tx3aaro.mysql.rds.aliyuncs.com','superc','Cc719199895','quchen_text')
-    cursor = db.cursor() 
-    time1 = time.time()
-    sql2 = 'insert ignore into daily_qq (date,view_count,valid_click_count,ctr,cpc,cost,web_order_count,web_order_rate,web_order_cost,follow_count,order_amount,order_roi,platform_page_view_count,web_commodity_page_view_count,from_follow_uv,account_id) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'
-      
-    try:
-        cursor.executemany(sql2,data)
-        db.commit()
-        cost_time =round((time.time()-time1)/60,1)
-        print('insert_daily_qq access',len(data),'cost_minutes:',cost_time)
-    except:
-        db.rollback()
-        print('insert_daily_qq defeat')
-
-
-
-def get_cost():
-    token_list_q = [
-['17654125','','0de3e48bfcf08048d499320afb34b129','a57bff7432889e78b5ac8c80c3a06f5d','流云书楼','趣程15期','唐怡婷','文鼎','丁二狗的天梯人生'], 
-['17654126','','94aa877d937fe4a334db98fad6cdd39d','d66044d43cabe9aa555b1384b297ce8c','流云书楼','趣程15期','唐怡婷','文鼎','丁二狗的天梯人生'], 
-['17654127','','5ddf8193d5bc9bb3c9e877c85318cc31','2c55d4636ecf9b2ebb81a7432ffc6581','流云书楼','趣程15期','唐怡婷','文鼎','丁二狗的天梯人生'], 
-['17654128','','f28fbdf11e03023bf9543b4f3c12144c','5a34f508fc1842e6b32c2e726fdc515f','流云书楼','趣程15期','唐怡婷','文鼎','丁二狗的天梯人生'], 
-['17654129','','6be64129e531941596f45ea8eb5191a3','3dee118bf703bda68583a818ba300f60','流云书楼','趣程15期','唐怡婷','文鼎','丁二狗的天梯人生'], 
-['17654130','','677e17643d3a25fee022dced4b1f6531','7930c900a8d10eef8eeafe8661a23567','流云书楼','趣程15期','唐怡婷','文鼎','丁二狗的天梯人生'], 
-['17654131','','6b8e4e67a4f1719349de8c7660af3ac2','a949d39b59dc2900269c7127d092648f','流云书楼','趣程15期','唐怡婷','文鼎','丁二狗的天梯人生'], 
-['17654133','','60cce74d20a94e7885a0338288b0e752','613447e6af3cd6feaea6de7a1ba73dcb','流云书楼','趣程15期','唐怡婷','文鼎','丁二狗的天梯人生'], 
-['17654135','','002a427ab5ce1be10b21e4addee51557','59989d70361ff97c1232c0b1c6e2d975','流云书楼','趣程15期','唐怡婷','文鼎','丁二狗的天梯人生']
-]
-    token_list_v =[
-['17590000','wx1ca3d7b3e6a550d3','f3c280dd415dfa3bd913ee32be2bc234','95ef1c34e17d6aa480fd4dffffde9ada','晨潇文轩','刘勇9月','蒋瑜','掌中云','战龙无双'], 
-['17589896','wx26fd7f6e4010af01','14ebe41c578f3be8c9989210fe1aa7ac','4eb61b2f4edc024d29af18caa3a8d564','惜寒文轩','清勇','','',''], 
-['17589964','wx30b90b1671010fb4','4567a63fee668da58d07e5a90aa05c64','068695a073ddf763cabaeaabb4dade48','秋珊文典','刘勇9月','黄海军','文鼎','丁二狗的天梯人生'], 
-['17590030','wx99d65ca787bc6e80','a10f6a9407fef98e856b7a7f281febc9','cc6cd0790c78129705fe59d7c4bf52c1','凝梦文海','刘勇9月','杜广林','文鼎','丁二狗的天梯人生'], 
-['17590045','wxb0b557705f6f4c95','d9aa49ef61b572c669c67ac4a7aacd6e','867fe22448311c166693b6274e18dc06','墨年书楼','刘勇9月','杜广林','掌中云','战龙无双']
-]
-
-    
-    t=()
-    for x in token_list_q :
-        a = daily_reports_get(x[2],x[0],"REPORT_LEVEL_ADVERTISER",('date','view_count','valid_click_count','ctr','cpc','cost','web_order_count','web_order_rate','web_order_cost','follow_count','order_amount','order_roi','platform_page_view_count','web_commodity_page_view_count','from_follow_uv'))
-    
-        for b in a['data']['list']:
-            b['account_id']=x[0]
-            z = tuple(b.values())
-            t= t+((z),)
-    mysql_insert_daily_qq(t)
-    
-    t= ()
-    for y in token_list_v :
-        c = daily_reports_get(y[2],y[0],"REPORT_LEVEL_ADVERTISER_WECHAT",('date','cost','view_count','valid_click_count','ctr','official_account_follow_rate','order_amount','order_roi','order_count','order_rate','order_unit_price','web_order_cost','first_day_order_amount','first_day_order_count')) 
-        #print(y[0],c['data']['list'])
-        for d in c['data']['list']:
-            d['account_id']=y[0]
-            x = tuple(d.values())
-            t= t+((x),)
-            
-    mysql_insert_daily_vx(t)
-    print(len(t),y[0],t)  
-get_cost()
-"""
-start_job_time = '2020-07-23 17:12:00'
-
-if __name__ == '__main__':
-    scheduler = BlockingScheduler()
-    scheduler.add_job(get_cost, 'interval',minutes=1,start_date=start_job_time)
-    scheduler.start()
-
-"""   
-    
+## Subject of obligation
+
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""
+Created on Thu Apr 30 11:18:31 2020
+
+@author: chencong
+"""
+
+import requests
+import urllib.parse 
+import time
+import json 
+import random
+import datetime
+import csv
+import pymysql
+## import token_list as ts
+from apscheduler.schedulers.blocking import BlockingScheduler
+import token_list  as tl
+
+
+
+def daily_reports_get(access_token,account_id,level,fields) :
+    interface = 'daily_reports/get'
+    url = 'https://api.e.qq.com/v1.1/' + interface
+
+    common_parameters = {
+        'access_token': access_token, 
+        'timestamp': int(time.time()), 
+        'nonce': str(time.time()) + str(random.randint(0, 999999)),
+    }
+
+    parameters = {
+        "account_id": account_id,
+        "level":level,
+        "date_range": {   
+            "start_date": '2020-11-12',         ## 补数据,需求的时间段
+            "end_date": '2020-11-16'
+        },
+        "page":1,
+        "page_size":1000,
+        "fields":fields
+    }
+
+    parameters.update(common_parameters)
+    for k in parameters:
+        if type(parameters[k]) is not str:
+            parameters[k] = json.dumps(parameters[k])
+
+    r = requests.get(url, params = parameters)
+
+    return r.json()
+
+
+def mysql_insert_daily_vx(data):
+    db = pymysql.connect('rm-bp1c9cj79872tx3aaro.mysql.rds.aliyuncs.com','superc','Cc719199895','quchen_text')
+    cursor = db.cursor() 
+    time1 = time.time()
+    
+    sql2 = 'insert ignore into daily_vx (date,cost,view_count,valid_click_count,ctr,official_account_follow_rate,order_amount,order_roi,order_count,order_rate,order_unit_price,web_order_cost,first_day_order_amount,first_day_order_count,account_id) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'
+
+    try:
+        cursor.executemany(sql2,data)
+        db.commit()
+        cost_time =round((time.time()-time1)/60,1)
+        print('insert_daily_vx access',len(data),'cost_minutes:',cost_time)
+    except:
+        db.rollback()
+        print('insert_daily_vx defeat')
+
+
+def mysql_insert_daily_qq(data):
+    db = pymysql.connect('rm-bp1c9cj79872tx3aaro.mysql.rds.aliyuncs.com','superc','Cc719199895','quchen_text')
+    cursor = db.cursor() 
+    time1 = time.time()
+    sql1 = 'insert ignore into daily_qq (date,view_count,valid_click_count,ctr,cpc,cost,web_order_count,web_order_rate,web_order_cost,follow_count,order_amount,order_roi,platform_page_view_count,web_commodity_page_view_count,from_follow_uv,account_id) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'
+    #sql2 = 'replace into daily_qq (date,view_count,valid_click_count,ctr,cpc,cost,web_order_count,web_order_rate,web_order_cost,follow_count,order_amount,order_roi,platform_page_view_count,web_commodity_page_view_count,from_follow_uv,account_id) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'     
+
+    try:
+        cursor.executemany(sql1,data)
+        db.commit()
+        cost_time =round((time.time()-time1)/60,1)
+        print('insert_daily_qq access',len(data),'cost_minutes:',cost_time)
+    except:
+        db.rollback()
+        print('insert_daily_qq defeat')
+
+
+def get_qq_cost(token_list_q):
+    t=()
+    for x in token_list_q :
+        a = daily_reports_get(x[2],x[0],"REPORT_LEVEL_ADVERTISER",('date','view_count','valid_click_count','ctr','cpc','cost','web_order_count','web_order_rate','web_order_cost','follow_count','order_amount','order_roi','platform_page_view_count','web_commodity_page_view_count','from_follow_uv'))
+        try : 
+            for b in a['data']['list']:
+                b['account_id']=x[0]
+                z = tuple(b.values())
+                t= t+((z),)
+        except Exception as e:
+            print(a)
+            continue
+                
+    mysql_insert_daily_qq(t)
+    print(len(t),x[0])
+        
+
+def get_wx_cost(token_list_v):
+    t=()
+    for y in token_list_v :
+        c = daily_reports_get(y[2],y[0],"REPORT_LEVEL_ADVERTISER_WECHAT",('date','cost','view_count','valid_click_count','ctr','official_account_follow_rate','order_amount','order_roi','order_count','order_rate','order_unit_price','web_order_cost','first_day_order_amount','first_day_order_count')) 
+        #print(y[0],c['data']['list'])
+        try : 
+            for d in c['data']['list']:
+                d['account_id']=y[0]
+                x = tuple(d.values())
+                t= t+((x),)
+        except Exception as e:
+            print(c)
+            continue
+            
+    mysql_insert_daily_vx(t)
+    print(len(t),y[0]) 
+    ## print(t) 
+        
+        
+def get_cost():
+    '''
+    token_list_q = [
+    ['18353744','','2d1c965ff2a7608aec1ad7baa6455ce0','b09e877adba47f9827e3d087ecb3d18d','乾城文海','趣程15期','董平','文鼎','仕途天骄'],
+    ['18353743','','7c27bff5464266c81929e024bb120b36','1366f89a0e55de466ed625841037c431','乾城文海','趣程15期','董平','文鼎','仕途天骄']
+    ]
+    token_list_v =[
+    ['14490987','wxd2e3b7b0c2f0ad9c','bad09cccc78b32d60ed68973bd4e62ad','71b38d5b9cf43cf0af4cd19a33331c3a','风吟书楼','清勇10月','蒋瑜','掌中云','风无痕深爱无言']
+    ]  
+    '''
+
+    token_list_v = tl.token_list_vx
+    token_list_q = tl.token_list_qq
+
+    get_wx_cost(token_list_v)
+    get_qq_cost(token_list_q)
+    
+
+    
+    
+if __name__ == '__main__':
+    get_cost()
+    
+"""
+start_job_time = '2020-07-23 17:12:00'
+
+if __name__ == '__main__':
+    scheduler = BlockingScheduler()
+    scheduler.add_job(get_cost, 'interval',minutes=1,start_date=start_job_time)
+    scheduler.start()
+
+"""   

+ 158 - 0
dgp/get_cost_history_bk20201117.py

@@ -0,0 +1,158 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""
+Created on Thu Apr 30 11:18:31 2020
+
+@author: chencong
+"""
+
+import requests
+import urllib.parse 
+import time
+import json 
+import random
+import datetime
+import csv
+import pymysql
+import token_list as ts
+from apscheduler.schedulers.blocking import BlockingScheduler
+
+"""
+header1 = ['account_id','date','view_count','valid_click_count','ctr','cpc','cost','web_order_count','web_order_rate','web_order_cost','follow_count','order_amount','cheout_fd','order_roi','cheout_fd_reward']
+header2 = ['account_id','date','cost','view_count','valid_click_count','ctr','official_account_follow_rate','order_amount','order_roi','order_count','order_rate','order_unit_price','web_order_cost','first_day_order_amount','first_day_order_count']
+
+def append_csv(path,data,header):
+    header = header
+    with open (path,'a+',newline='',encoding='utf-8') as f :
+        dictWriter = csv.DictWriter(f,fieldnames=header)
+        dictWriter.writerow(data)
+def write_header(path,header):
+    header = header
+    with open (path,'w',newline='',encoding='utf-8') as f:
+        dictWriter = csv.DictWriter(f, fieldnames=header)
+        dictWriter.writeheader()
+ad_qq = 'ad_qq_'+str(time.strftime("%Y-%m-%d", time.localtime()))+'.csv'
+ad_vx = 'ad_vx_'+str(time.strftime("%Y-%m-%d", time.localtime()))+'.csv'
+write_header(ad_qq,header1)
+write_header(ad_vx,header2)
+"""
+def daily_reports_get(access_token,account_id,level,fields) :
+    interface = 'daily_reports/get'
+    url = 'https://api.e.qq.com/v1.1/' + interface
+
+    common_parameters = {
+            'access_token': access_token, 
+            'timestamp': int(time.time()), 
+            'nonce': str(time.time()) + str(random.randint(0, 999999)),
+        }
+
+    parameters = {
+            "account_id": account_id,
+            "level":level,
+            "date_range": 
+            {   
+                "start_date": '2020-09-01',
+                "end_date": '2020-09-03'
+            },
+            "page":1,
+            "page_size":1000,
+            "fields":fields
+            }
+
+    parameters.update(common_parameters)
+    for k in parameters:
+        if type(parameters[k]) is not str:
+            parameters[k] = json.dumps(parameters[k])
+
+    r = requests.get(url, params = parameters)
+
+    return r.json()
+
+
+def mysql_insert_daily_vx(data):
+    db = pymysql.connect('rm-bp1c9cj79872tx3aaro.mysql.rds.aliyuncs.com','superc','Cc719199895','quchen_text')
+    cursor = db.cursor() 
+    time1 = time.time()
+    
+    sql2 = 'insert ignore into daily_vx (date,cost,view_count,valid_click_count,ctr,official_account_follow_rate,order_amount,order_roi,order_count,order_rate,order_unit_price,web_order_cost,first_day_order_amount,first_day_order_count,account_id) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'
+
+    try:
+        cursor.executemany(sql2,data)
+        db.commit()
+        cost_time =round((time.time()-time1)/60,1)
+        print('insert_daily_vx access',len(data),'cost_minutes:',cost_time)
+    except:
+        db.rollback()
+        print('insert_daily_vx defeat')
+
+
+def mysql_insert_daily_qq(data):
+    db = pymysql.connect('rm-bp1c9cj79872tx3aaro.mysql.rds.aliyuncs.com','superc','Cc719199895','quchen_text')
+    cursor = db.cursor() 
+    time1 = time.time()
+    sql2 = 'insert ignore into daily_qq (date,view_count,valid_click_count,ctr,cpc,cost,web_order_count,web_order_rate,web_order_cost,follow_count,order_amount,order_roi,platform_page_view_count,web_commodity_page_view_count,from_follow_uv,account_id) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'
+      
+    try:
+        cursor.executemany(sql2,data)
+        db.commit()
+        cost_time =round((time.time()-time1)/60,1)
+        print('insert_daily_qq access',len(data),'cost_minutes:',cost_time)
+    except:
+        db.rollback()
+        print('insert_daily_qq defeat')
+
+
+
+def get_cost():
+    token_list_q = [
+['17654125','','0de3e48bfcf08048d499320afb34b129','a57bff7432889e78b5ac8c80c3a06f5d','流云书楼','趣程15期','唐怡婷','文鼎','丁二狗的天梯人生'], 
+['17654126','','94aa877d937fe4a334db98fad6cdd39d','d66044d43cabe9aa555b1384b297ce8c','流云书楼','趣程15期','唐怡婷','文鼎','丁二狗的天梯人生'], 
+['17654127','','5ddf8193d5bc9bb3c9e877c85318cc31','2c55d4636ecf9b2ebb81a7432ffc6581','流云书楼','趣程15期','唐怡婷','文鼎','丁二狗的天梯人生'], 
+['17654128','','f28fbdf11e03023bf9543b4f3c12144c','5a34f508fc1842e6b32c2e726fdc515f','流云书楼','趣程15期','唐怡婷','文鼎','丁二狗的天梯人生'], 
+['17654129','','6be64129e531941596f45ea8eb5191a3','3dee118bf703bda68583a818ba300f60','流云书楼','趣程15期','唐怡婷','文鼎','丁二狗的天梯人生'], 
+['17654130','','677e17643d3a25fee022dced4b1f6531','7930c900a8d10eef8eeafe8661a23567','流云书楼','趣程15期','唐怡婷','文鼎','丁二狗的天梯人生'], 
+['17654131','','6b8e4e67a4f1719349de8c7660af3ac2','a949d39b59dc2900269c7127d092648f','流云书楼','趣程15期','唐怡婷','文鼎','丁二狗的天梯人生'], 
+['17654133','','60cce74d20a94e7885a0338288b0e752','613447e6af3cd6feaea6de7a1ba73dcb','流云书楼','趣程15期','唐怡婷','文鼎','丁二狗的天梯人生'], 
+['17654135','','002a427ab5ce1be10b21e4addee51557','59989d70361ff97c1232c0b1c6e2d975','流云书楼','趣程15期','唐怡婷','文鼎','丁二狗的天梯人生']
+]
+    token_list_v =[
+['17590000','wx1ca3d7b3e6a550d3','f3c280dd415dfa3bd913ee32be2bc234','95ef1c34e17d6aa480fd4dffffde9ada','晨潇文轩','刘勇9月','蒋瑜','掌中云','战龙无双'], 
+['17589896','wx26fd7f6e4010af01','14ebe41c578f3be8c9989210fe1aa7ac','4eb61b2f4edc024d29af18caa3a8d564','惜寒文轩','清勇','','',''], 
+['17589964','wx30b90b1671010fb4','4567a63fee668da58d07e5a90aa05c64','068695a073ddf763cabaeaabb4dade48','秋珊文典','刘勇9月','黄海军','文鼎','丁二狗的天梯人生'], 
+['17590030','wx99d65ca787bc6e80','a10f6a9407fef98e856b7a7f281febc9','cc6cd0790c78129705fe59d7c4bf52c1','凝梦文海','刘勇9月','杜广林','文鼎','丁二狗的天梯人生'], 
+['17590045','wxb0b557705f6f4c95','d9aa49ef61b572c669c67ac4a7aacd6e','867fe22448311c166693b6274e18dc06','墨年书楼','刘勇9月','杜广林','掌中云','战龙无双']
+]
+
+    
+    t=()
+    for x in token_list_q :
+        a = daily_reports_get(x[2],x[0],"REPORT_LEVEL_ADVERTISER",('date','view_count','valid_click_count','ctr','cpc','cost','web_order_count','web_order_rate','web_order_cost','follow_count','order_amount','order_roi','platform_page_view_count','web_commodity_page_view_count','from_follow_uv'))
+    
+        for b in a['data']['list']:
+            b['account_id']=x[0]
+            z = tuple(b.values())
+            t= t+((z),)
+    mysql_insert_daily_qq(t)
+    
+    t= ()
+    for y in token_list_v :
+        c = daily_reports_get(y[2],y[0],"REPORT_LEVEL_ADVERTISER_WECHAT",('date','cost','view_count','valid_click_count','ctr','official_account_follow_rate','order_amount','order_roi','order_count','order_rate','order_unit_price','web_order_cost','first_day_order_amount','first_day_order_count')) 
+        #print(y[0],c['data']['list'])
+        for d in c['data']['list']:
+            d['account_id']=y[0]
+            x = tuple(d.values())
+            t= t+((x),)
+            
+    mysql_insert_daily_vx(t)
+    print(len(t),y[0],t)  
+get_cost()
+"""
+start_job_time = '2020-07-23 17:12:00'
+
+if __name__ == '__main__':
+    scheduler = BlockingScheduler()
+    scheduler.add_job(get_cost, 'interval',minutes=1,start_date=start_job_time)
+    scheduler.start()
+
+"""   
+    

+ 21 - 12
dgp/get_data_hourly.py

@@ -21,6 +21,10 @@ import token_list as tl
 import smtplib
 from email.mime.text import MIMEText
 
+import importlib
+importlib.reload(tl)
+
+
 
 def md5value(s):
 	md5 = hashlib.md5()
@@ -371,7 +375,8 @@ def get_zzy_order(st, et):
 		secert = x[1]
 		stage = x[2]
 		my_sign = md5value(secert + 'key=' + my_key)
-		url = 'https://openapi.818tu.com/partners/channel/channels/list?'
+		#url = 'https://openapi.818tu.com/partners/channel/channels/list?'
+		url = 'https://inovel.818tu.com/partners/channel/channels/list?'
 		parameter = 'key=' + my_key + '&sign=' + my_sign
 		channel_list = requests.get(url + parameter)  # 获取子渠道列表
 
@@ -381,7 +386,8 @@ def get_zzy_order(st, et):
 			my_key = x[3]
 			secert = x[4]
 			my_sign = md5value(secert + 'key=' + my_key)
-			url = 'https://openapi.818tu.com/partners/channel/channels/list?'
+			#url = 'https://openapi.818tu.com/partners/channel/channels/list?' 
+			url = 'https://inovel.818tu.com/partners/channel/channels/list?'
 			parameter = 'key=' + my_key + '&sign=' + my_sign
 			channel_list = requests.get(url + parameter)
 			items = channel_list.json()['data']['items']
@@ -399,7 +405,8 @@ def get_zzy_order(st, et):
 				get_time = st
 				lt = parse.urlencode({'created_at[lt]': limit_time})
 				gt = parse.urlencode({'created_at[gte]': get_time})
-				url_1 = 'https://openapi.818tu.com/partners/channel/orders/list?'
+				#url_1 = 'https://openapi.818tu.com/partners/channel/orders/list?'
+				url_1 = 'https://inovel.818tu.com/partners/channel/orders/list?'
 				my_sign_1 = md5value(secert + 'channel_id=' + str(
 					channel_id) + '&created_at[gte]=' + get_time + '&created_at[lt]=' + limit_time + '&key=' + my_key + '&per_page=' + per_page + '&status=' + status)
 				parameter_1 = 'channel_id=' + str(
@@ -744,23 +751,25 @@ def update_check():
 
 
 def start_order_job():
-	st_unix = int((time.time() + 8 * 3600) // 3600 * 3600 - 8 * 3600 - 3600)
-	et_unix = int((time.time() + 8 * 3600) // 3600 * 3600 - 8 * 3600)
+	st_unix_time = time.time()
+	st_unix = int((st_unix_time + 8 * 3600) // 3600 * 3600 - 8 * 3600 - 3600)
+	et_unix = int((st_unix_time + 8 * 3600) // 3600 * 3600 - 8 * 3600)
 	# et_unix = et_unix - 1
 	st_dt = time.strftime("%Y-%m-%dT%H:%M:%S", time.localtime(st_unix)) + '+08:00'
 	et_dt = time.strftime("%Y-%m-%dT%H:%M:%S", time.localtime(et_unix)) + '+08:00'
 	print(st_dt, et_dt)
-	mysql_insert_order(get_yuewen_order(st_unix, et_unix - 1))
+	mysql_insert_order(get_yuewen_order(st_unix, et_unix))
 	mysql_insert_order(get_zhangdu_order(st_unix, et_unix))
 	mysql_insert_order(get_ysg_order(st_unix, et_unix))
-	mysql_insert_order(get_zzy_order(st_dt, et_dt))
 	mysql_insert_order(get_huasheng_order(st_unix, et_unix))
+	mysql_insert_order(get_zzy_order(st_dt, et_dt))
 	update_check()
 
 
 def start_cost_job():
-	st_unix = int((time.time() + 8 * 3600) // 3600 * 3600 - 8 * 3600 - 3600)
-	et_unix = int((time.time() + 8 * 3600) // 3600 * 3600 - 8 * 3600)
+	st_unix_time = time.time()
+	st_unix = int((st_unix_time + 8 * 3600) // 3600 * 3600 - 8 * 3600 - 3600)
+	et_unix = int((st_unix_time + 8 * 3600) // 3600 * 3600 - 8 * 3600)
 	# et_unix = et_unix - 1
 	st_dt = time.strftime("%Y-%m-%dT%H:%M:%S", time.localtime(st_unix)) + '+08:00'
 	et_dt = time.strftime("%Y-%m-%dT%H:%M:%S", time.localtime(et_unix)) + '+08:00'
@@ -769,12 +778,12 @@ def start_cost_job():
 	mysql_insert_daily_qq(get_daily_qq())
 
 
-start_order_time = '2020-09-24 17:05:00'
-start_cost_time = '2020-09-24 17:35:00'
+#start_order_time = '2020-10-13 17:10:00'
+start_cost_time = '2020-11-24 18:15:00'
 
 if __name__ == '__main__':
 	scheduler = BlockingScheduler()
-	scheduler.add_job(start_order_job, 'interval', max_instances=10, hours=1, start_date=start_order_time)
+	# scheduler.add_job(start_order_job, 'interval', max_instances=10, hours=1, start_date=start_order_time)
 	scheduler.add_job(start_cost_job, 'interval', max_instances=10, hours=1, start_date=start_cost_time)
 	scheduler.start()
 

+ 55 - 47
dgp/get_order_daily.py

@@ -271,7 +271,7 @@ def get_zhangdu_order(st,et):
             endtime = min(et,starttime+timespace)
         if len(t)>0:
             mysql_insert_order(t)
-        print('掌读',channel,len(t))
+        #print('掌读',channel,len(t))
 
 
 ##《3》花生
@@ -371,7 +371,7 @@ def get_huasheng_order(st,et):
 
         if len(t)>0:
             mysql_insert_order(t)
-    print(stage,merchant_name,len(t))
+        print("huasheng",stage,merchant_name,len(t))
 
 
 ##《4》掌中云
@@ -397,7 +397,11 @@ def get_zzy_order(st,et):
             parameter = 'key='+my_key+'&sign='+my_sign
             #url = 'https://openapi.818tu.com/partners/channel/channels/list?'
             channel_list = requests.get(url+parameter)
-            items = channel_list.json()['data']['items']
+            if 'data' in channel_list.json().keys():
+                items = channel_list.json()['data']['items']
+            else:
+                print(channel_list.json())
+                items = []   
         else:
             print(channel_list.json())
             items = []       
@@ -416,52 +420,55 @@ def get_zzy_order(st,et):
             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)
             parameter_1 = 'channel_id='+str(channel_id)+'&'+gt+'&'+lt+'&per_page='+per_page+'&status='+status+'&key='+my_key+'&sign='+my_sign_1
             orders = requests.get(url_1+parameter_1)
-            t = orders.json()['data']['count']//int(per_page)+1
-            for page in range(1,t+1):
-                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)
-                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
-                orders_1 = requests.get(url_1+parameter_2)
-                b = orders_1.json()['data']['items']
-                
-                for a in b:
-                    c={}
-                    c['user_id']=str(a['member']['openid'])
-                    c['channel'] = channel
-                    c['reg_time']=a['member']['created_at']               
-                    c['channel_id']=channel_id
-                    c['amount']= round(a['price']/100,2)
-                    c['order_id']=str(a['id'])
-                    c['order_time']=a['created_at']
-                    c['platform']='掌中云'
-                    c['stage']=stage
-                    #c['amount']=a['amount']
-                    dtime = datetime.datetime.strptime(a['created_at'][0:10],"%Y-%m-%d")
-                    c['date']= ((int(time.mktime(dtime.timetuple()))+8*3600)//86400)*86400-8*3600
-                    
-                    if str(a['from_novel_id'])!='None':
-                        c['from_novel']=a['from_novel']['title']
-                    else :
-                        c['from_novel']='None'
-                    """
-                    del a['member']
-                    del a['referral_link_id']
-                    del a['id']
-                    del a['created_at']
-                    del a['paid_at']
-                    del a['border_id']
-                    del a['from_novel_id']
-                    del a['status']
-                    del a['price']
-                    del a['agent_uid']
-                    """
-                    x= sorted(c.items(), key=lambda item:item[0])
-                    x = dict(x)
-                    x = tuple(x.values())   
-                    r = r+((x),)                   
+            
+            t = int(orders.json()['data']['count'])
+            if t > 0:
+                t = orders.json()['data']['count']//int(per_page)+1
+                for page in range(1,t+1):
+                    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)
+                    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
+                    orders_1 = requests.get(url_1+parameter_2)
+                    b = orders_1.json()['data']['items']
+
+                    for a in b:
+                        c={}
+                        c['user_id']=str(a['member']['openid'])
+                        c['channel'] = channel
+                        c['reg_time']=a['member']['created_at']               
+                        c['channel_id']=channel_id
+                        c['amount']= round(a['price']/100,2)
+                        c['order_id']=str(a['id'])
+                        c['order_time']=a['created_at']
+                        c['platform']='掌中云'
+                        c['stage']=stage
+                        #c['amount']=a['amount']
+                        dtime = datetime.datetime.strptime(a['created_at'][0:10],"%Y-%m-%d")
+                        c['date']= ((int(time.mktime(dtime.timetuple()))+8*3600)//86400)*86400-8*3600
+
+                        if str(a['from_novel_id'])!='None':
+                            c['from_novel']=a['from_novel']['title']
+                        else :
+                            c['from_novel']='None'
+                        """
+                        del a['member']
+                        del a['referral_link_id']
+                        del a['id']
+                        del a['created_at']
+                        del a['paid_at']
+                        del a['border_id']
+                        del a['from_novel_id']
+                        del a['status']
+                        del a['price']
+                        del a['agent_uid']
+                        """
+                        x= sorted(c.items(), key=lambda item:item[0])
+                        x = dict(x)
+                        x = tuple(x.values())   
+                        r = r+((x),)                   
 
             if len(r)>0:
                 mysql_insert_order(r)
-                
+                    
             print('zzy',channel,len(r))
 
 
@@ -578,7 +585,7 @@ def start_all_job():
 
 
 
-start_job_time = '2020-09-27 03:05:00'
+start_job_time = '2020-09-30 00:20:00'
 
 
 if __name__ == '__main__':
@@ -586,3 +593,4 @@ if __name__ == '__main__':
     scheduler.add_job(start_all_job, 'interval',days=1,start_date=start_job_time)
     scheduler.start()
 
+

+ 1 - 1
dgp/huasheng_text.py

@@ -120,7 +120,7 @@ def start_huasheng_job():
     # et_unix = et_unix-1
     get_huasheng_order(st_unix,et_unix)
     
-start_order_time = '2020-09-15 03:30:00'
+start_order_time = '2020-09-30 03:30:00'
 
 if __name__ == '__main__':
     scheduler = BlockingScheduler()

+ 8 - 8
dgp/repair_order_daily.py

@@ -72,9 +72,9 @@ def mysql_insert_order_daily(data):
 
 
 def repair_order():
-
-    st_unix = int((time.time()+8*3600)//86400*86400-8*3600-86400)
-    et_unix = int((time.time()+8*3600)//86400*86400-8*3600)
+    repair_unix_time = time.time()
+    st_unix = int((repair_unix_time+8*3600)//86400*86400-8*3600-86400)
+    et_unix = int((repair_unix_time+8*3600)//86400*86400-8*3600)
     #et_unix = et_unix - 1
     st_dt = time.strftime("%Y-%m-%dT%H:%M:%S",time.localtime(st_unix))+'+08:00'
     et_dt = time.strftime("%Y-%m-%dT%H:%M:%S",time.localtime(et_unix))+'+08:00'
@@ -84,19 +84,19 @@ def repair_order():
         get_data_hourly.mysql_insert_order(get_data_hourly.get_zhangdu_order(st_unix,et_unix))
         get_data_hourly.mysql_insert_order(get_data_hourly.get_ysg_order(st_unix,et_unix))
         get_data_hourly.mysql_insert_order(get_data_hourly.get_zzy_order(st_dt,et_dt))
-        get_data_hourly.mysql_insert_order(get_data_hourly.get_yuewen_order(st_unix,et_unix-1))
-        ##get_data_hourly.mysql_insert_order(get_data_hourly.get_yuewen_order(st_unix,et_unix))
+        get_data_hourly.mysql_insert_order(get_data_hourly.get_yuewen_order(st_unix,et_unix))
+        ##get_data_hourly.mysql_insert_order(get_data_hourly.get_yuewen_order(st_unix,et_unix-1))
         get_data_hourly.mysql_insert_order(get_data_hourly.get_huasheng_order(st_unix,et_unix))
     if b==1 :
         mysql_insert_order_daily(get_data_hourly.get_zhangdu_order(st_unix,et_unix))
         mysql_insert_order_daily(get_data_hourly.get_ysg_order(st_unix,et_unix))
         mysql_insert_order_daily(get_data_hourly.get_zzy_order(st_dt,et_dt))
-        mysql_insert_order_daily(get_data_hourly.get_yuewen_order(st_unix,et_unix-1))
-        #mysql_insert_order_daily(get_data_hourly.get_yuewen_order(st_unix,et_unix))
+        mysql_insert_order_daily(get_data_hourly.get_yuewen_order(st_unix,et_unix))
+        #mysql_insert_order_daily(get_data_hourly.get_yuewen_order(st_unix,et_unix-1))
         mysql_insert_order_daily(get_data_hourly.get_huasheng_order(st_unix,et_unix))
 
 
-start_job_time = '2020-09-23 01:40:00'
+start_job_time = '2020-09-30 03:40:00'
 
 
 if __name__ == '__main__':

+ 100 - 587
dgp/tests/check_order.py

@@ -23,601 +23,114 @@ __title__ = '每日凌晨空闲时检查本地数据库中的订单数据是否
                   ┃┫┫  ┃┫┫
                   ┗┻┛  ┗┻┛
 """
+from apscheduler.schedulers.blocking import BlockingScheduler
 
-import datetime
-import hashlib
-import math
-import time
-from urllib import parse
+from util import platform_config_util
+from util import date_util
+from util import db_order_util
+from util import platform_order_api_util
 
-import requests
-
-import account_list as al
-from util import date_util, platform_util
-
-
-def md5value(s):
-    md5 = hashlib.md5()
-    md5.update(s.encode("utf-8"))
-    return md5.hexdigest()
-
-
-##《1》阅文
-def get_yuewen_order(st, et):
-    url = 'https://open.yuewen.com/cpapi/wxRecharge/querychargelog'
-    version = 1
-    secert_list = al.yuewen_account_list
-
-    for secert in secert_list:
-        start_time = st
-        email = secert[0]
-        appsecert = secert[1]
-
-        for i in range(int((et - st) / 86400)):
-            t = ()
-            end_time = min(start_time + 86400, et)
-            timestamp = int(time.time())
-            s = ''
-            page = 1
-            order_status = 2
-            data = {
-                'email': email,
-                'version': version,
-                'timestamp': timestamp,
-                'start_time': start_time,
-                'end_time': end_time,
-                'page': page,
-                'order_status': order_status
-                # 'last_min_id':last_min_id,
-                # 'last_max_id':last_max_id,
-                # 'total_count':total_count,
-                # 'last_page':last_page
-            }
-            sorted_data = sorted(data.items())
-            for k, v in sorted_data:
-                s = s + str(k) + str(v)
-
-            sign = md5value(appsecert + s).upper()
-
-            data1 = {
-                'email': email,
-                'version': version,
-                'timestamp': timestamp,
-                'start_time': start_time,
-                'end_time': end_time,
-                'page': page,
-                'order_status': order_status,
-                'sign': sign
-            }
-            list1 = requests.get(url=url, params=data1)
-
-            total_count = list1.json()['data']['total_count']
-            last_min_id = list1.json()['data']['min_id']
-            last_max_id = list1.json()['data']['max_id']
-            last_page = list1.json()['data']['page']
-
-            if total_count > 0:
-                for x in list1.json()['data']['list']:
-                    y = {}
-                    dtime = datetime.datetime.strptime(x['order_time'], "%Y-%m-%d %H:%M:%S")
-                    y['date'] = ((int(time.mktime(dtime.timetuple())) + 8 * 3600) // 86400) * 86400 - 8 * 3600
-                    y['platform'] = '阅文'
-                    y['channel'] = x['app_name']
-                    y['from_novel'] = x['book_name']
-                    y['user_id'] = x['openid']
-                    y['stage'] = ''
-                    y['channel_id'] = 0
-                    y['order_time'] = x['order_time']
-                    y['amount'] = x['amount']
-                    y['reg_time'] = x['reg_time']
-                    y['order_id'] = x['order_id']
-                    """
-                    del x['app_name']
-                    del x['order_status']
-                    del x['order_type']
-                    del x['openid']
-                    del x['user_name']
-                    del x['sex']
-                    del x['channel_name']
-                    del x['book_id']
-                    del x['book_name']
-                    del x['report_status']
-                    """
-                    y = sorted(y.items(), key=lambda item: item[0])
-                    y = dict(y)
-                    y = tuple(y.values())
-                    t = t + ((y),)
-
-            if total_count > 100:
-                for page in range(2, math.ceil(total_count / 100) + 1):
-                    data = {
-                        'email': email,
-                        'version': version,
-                        'timestamp': timestamp,
-                        'start_time': start_time,
-                        'end_time': end_time,
-                        'page': page,
-                        'last_min_id': last_min_id,
-                        'last_max_id': last_max_id,
-                        'total_count': total_count,
-                        'last_page': last_page,
-                        'order_status': order_status
-                    }
-                    sorted_data = sorted(data.items())
-                    s1 = ''
-                    for k, v in sorted_data:
-                        s1 = s1 + str(k) + str(v)
-                        sign = md5value(appsecert + s1).upper()
-                        data2 = {
-                            'email': email,
-                            'version': version,
-                            'timestamp': timestamp,
-                            'start_time': start_time,
-                            'end_time': end_time,
-                            'page': page,
-                            'last_min_id': last_min_id,
-                            'last_max_id': last_max_id,
-                            'total_count': total_count,
-                            'last_page': last_page,
-                            'order_status': order_status,
-                            'sign': sign
-                        }
-                    list2 = requests.get(url=url, params=data2)
-                    for x in list2.json()['data']['list']:
-                        y = {}
-                        dtime = datetime.datetime.strptime(x['order_time'], "%Y-%m-%d %H:%M:%S")
-                        y['date'] = ((int(time.mktime(dtime.timetuple())) + 8 * 3600) // 86400) * 86400 - 8 * 3600
-                        y['platform'] = '阅文'
-                        y['channel'] = x['app_name']
-                        y['from_novel'] = x['book_name']
-                        y['user_id'] = x['openid']
-                        y['stage'] = ''
-                        y['channel_id'] = 0
-                        y['order_time'] = x['order_time']
-                        y['amount'] = x['amount']
-                        y['reg_time'] = x['reg_time']
-                        y['order_id'] = x['order_id']
-                        """
-                        del x['app_name']
-                        del x['order_status']
-                        del x['order_type']
-                        del x['openid']
-                        del x['user_name']
-                        del x['sex']
-                        del x['channel_name']
-                        del x['book_id']
-                        del x['book_name']
-                        del x['report_status']
-                        """
-                        y = sorted(y.items(), key=lambda item: item[0])
-                        y = dict(y)
-                        y = tuple(y.values())
-                        t = t + ((y),)
-
-                    total_count = list2.json()['data']['total_count']
-                    last_min_id = list2.json()['data']['min_id']
-                    last_max_id = list2.json()['data']['max_id']
-                    last_page = list2.json()['data']['page']
-
-            print(email, start_time, len(t))
-            start_time = start_time + 86400
-            if len(t) > 0:
-                mysql_insert_order(t)
-
-
-##《2》掌读
-def get_zhangdu_order(st, et):
-    secert_list = al.zhangdu_account_list
-    url = 'https://api.zhangdu520.com/channel/getorder'
-
-    for item in secert_list:  # 分渠道
-        t = ()
-
-        uid = item[0]
-        appsecert = item[1]
-        channel = item[2]
-        timestamp = int(time.time())
-        sign = md5value(str(uid) + '&' + appsecert + '&' + str(timestamp))
-        page = 1
-        starttime = st
-        timespace = 90 * 3600 * 24
-        endtime = min(et, st + timespace)
-
-        for x in range((et - st) // timespace + 1):  # 分时段
-            Params = {
-                'uid': uid,
-                'timestamp': timestamp,
-                'sign': sign,
-                'starttime': starttime,
-                'endtime': endtime
-            }
-            list1 = requests.get(url=url, params=Params)
-            pageCount = list1.json()['data']['pageCount']
-            if pageCount > 0:
-                for a in range(1, pageCount + 1):  # 分页
-                    page = a
-                    Params = {
-                        'uid': uid,
-                        'timestamp': timestamp,
-                        'sign': sign,
-                        'starttime': starttime,
-                        'endtime': endtime,
-                        'page': page
-                    }
-                    list2 = requests.get(url=url, params=Params).json()
-                    if 'data' in list2.keys():
-                        for b in list2['data']['list']:
-                            c = {}
-                            c['amount'] = b['amount']
-                            c['channel_id'] = uid
-                            c['order_id'] = str(b['orderno'])
-                            c['order_time'] = b['ctime']
-                            c['user_id'] = b['openid']
-                            c['platform'] = '掌读'
-                            c['channel'] = channel
-                            c['reg_time'] = b['regtime']
-                            c['from_novel'] = ''
-                            c['stage'] = ''
-                            c['date'] = ((int(b['ctime']) + 8 * 3600) // 86400) * 86400 - 8 * 3600
-                            """
-                            del b['openid']
-                            del b['regtime']
-                            del b['ip']
-                            del b['ua']
-                            del b['id']
-                            del b['ctime']
-                            del b['userid']
-                            del b['orderno']
-                            del b['source']
-                            del b['sourceid']
-                            """
-                            if b['status'] == '1':
-                                # del b['status']
-                                del b
-                                x = sorted(c.items(), key=lambda item: item[0])
-                                x = dict(x)
-                                x = tuple(x.values())
-                                t = t + ((x),)
-                    else:
-                        print(list2)
-            starttime = starttime + timespace
-            endtime = min(et, starttime + timespace)
-        if len(t) > 0:
-            mysql_insert_order(t)
-        print('掌读', channel, len(t))
-
-
-##《3》花生
-def get_huasheng_order(st, et):
-    apikey_list = al.huasheng_account_list
-    url = 'https://vip.rlcps.cn/api/getMerchants'
-
-    for key in apikey_list:  # 获取每个vip账号下的channel_id
-        apiKEY = key[0]
-        apiSecurity = key[1]
-        stage = key[2]
-        timestamp = str(int(time.time()))
-        sign = md5value(apiKEY + timestamp + apiSecurity).upper()
-        data = {
-            'apiKey': apiKEY,
-            'apiSecurity': apiSecurity,
-            'timestamp': timestamp,
-            'sign': sign
-        }
-        list0 = requests.post(url, data).json()
-        t = ()
-
-        for merchant in list0['data']:
-            merchant_id = merchant['merchant_id']
-            merchant_name = merchant['merchant_name']
-            url1 = 'https://vip.rlcps.cn/api/orderList'
-            start_time = st
-
-            for i in range((et - st) // 86400):
-                page = 1
-                date = time.strftime("%Y-%m-%d", time.localtime(start_time))
-                sign = md5value(apiKEY + date + str(merchant_id) + timestamp + apiSecurity).upper()
-                data1 = {
-                    'apiKey': apiKEY,
-                    'apiSecurity': apiSecurity,
-                    'timestamp': timestamp,
-                    'date': date,
-                    'merchant_id': merchant_id,
-                    'sign': sign,
-                    'page': page
-                }
-                list1 = requests.post(url1, data1).json()
-
-                if 'data' in list1.keys() and len(list1['data']) > 0:
-
-                    for i in range(int(math.ceil(list1['count'] / 500))):
-                        data2 = {
-                            'apiKey': apiKEY,
-                            'apiSecurity': apiSecurity,
-                            'timestamp': timestamp,
-                            'date': date,
-                            'merchant_id': merchant_id,
-                            'sign': sign,
-                            'page': page
-                        }
-                        list2 = requests.post(url1, data2).json()
-
-                        for x in list2['data']:
-                            if x['order_status'] == 1:
-                                y = {}
-                                ##dtime = datetime.datetime.strptime(x['pay_at'],"%Y-%m-%d")
-                                ##y['date']= ((int(time.mktime(dtime.timetuple()))+8*3600)//86400)*86400-8*3600
-                                y['user_id'] = x['openid']
-                                y['order_id'] = x['trans_id']
-                                y['order_time'] = x['pay_at']
-                                y['reg_time'] = x['join_at']
-                                y['date'] = (start_time + 8 * 3600) // 86400 * 86400 - 8 * 3600
-                                y['channel'] = merchant_name
-                                y['channel_id'] = merchant_id
-                                y['platform'] = '花生'
-                                y['stage'] = stage
-                                y['from_novel'] = x['book_name']
-                                y['amount'] = x['amount']
-                                """
-                                del x['order_num']
-                                del x['book_name']
-                                del x['trans_id']
-                                del x['pay_at']
-                                del x['join_at']
-                                del x['subscribe_at']
-                                del x['openid']
-                                del x['charge_count']
-                                del x['book_id']
-                                del x['order_status']
-                                del x['user_name']
-                                del x['spread_name']
-                                del x['request_at']
-                                """
-                                y = sorted(y.items(), key=lambda item: item[0])
-                                y = dict(y)
-                                y = tuple(y.values())
-                                t = t + ((y),)
-                        page = page + 1
-                else:
-                    print(list1)
-                start_time = start_time + 86400
-
-        if len(t) > 0:
-            mysql_insert_order(t)
-    print(stage, merchant_name, len(t))
-
-
-##《4》掌中云
-def get_zzy_order(st, et):
-    # 掌中云的时间格式比较特殊,转换下
-    st = platform_util.getZzyQueryTime(st)
-    et = platform_util.getZzyQueryTime(et)
-
-    API_list = al.zzy_account_list
-    url = 'https://openapi.818tu.com/partners/channel/channels/list?'
-
-    for x in API_list:
-        my_key = x[0]
-        secert = x[1]
-        stage = x[2]
-        my_sign = md5value(secert + 'key=' + my_key)
-        parameter = 'key=' + my_key + '&sign=' + my_sign
-        channel_list = requests.get(url + parameter)  # 获取子渠道列表
-
-        if 'data' in channel_list.json().keys():
-            items = channel_list.json()['data']['items']
-        elif len(x) > 3:
-            my_key = x[3]
-            secert = x[4]
-            my_sign = md5value(secert + 'key=' + my_key)
-            parameter = 'key=' + my_key + '&sign=' + my_sign
-            channel_list = requests.get(url + parameter)
-            items = channel_list.json()['data']['items']
-        else:
-            print(channel_list.json())
-            items = []
-
-        for item in items:  # 获取channel_id 后逐个拉取历史orders
-            r = ()
-            channel_id = item['id']
-            channel = item['nickname']
-            status = str(1)
-            per_page = str(1000)
-            limit_time = et
-            get_time = st
-            lt = parse.urlencode({'created_at[lt]': limit_time})
-            gt = parse.urlencode({'created_at[gt]': get_time})
-            url_1 = 'https://openapi.818tu.com/partners/channel/orders/list?'
-            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)
-            parameter_1 = 'channel_id=' + str(
-                channel_id) + '&' + gt + '&' + lt + '&per_page=' + per_page + '&status=' + status + '&key=' + my_key + '&sign=' + my_sign_1
-            orders = requests.get(url_1 + parameter_1)
-            t = orders.json()['data']['count'] // int(per_page) + 1
-            for page in range(1, t + 1):
-                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)
-                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
-                orders_1 = requests.get(url_1 + parameter_2)
-                b = orders_1.json()['data']['items']
-
-                for a in b:
-                    c = {}
-                    c['user_id'] = str(a['member']['openid'])
-                    c['channel'] = channel
-                    c['reg_time'] = a['member']['created_at']
-                    c['channel_id'] = channel_id
-                    c['amount'] = round(a['price'] / 100, 2)
-                    c['order_id'] = str(a['id'])
-                    c['order_time'] = a['created_at']
-                    c['platform'] = '掌中云'
-                    c['stage'] = stage
-                    # c['amount']=a['amount']
-                    dtime = datetime.datetime.strptime(a['created_at'][0:10], "%Y-%m-%d")
-                    c['date'] = ((int(time.mktime(dtime.timetuple())) + 8 * 3600) // 86400) * 86400 - 8 * 3600
-
-                    if str(a['from_novel_id']) != 'None':
-                        c['from_novel'] = a['from_novel']['title']
-                    else:
-                        c['from_novel'] = 'None'
-                    """
-                    del a['member']
-                    del a['referral_link_id']
-                    del a['id']
-                    del a['created_at']
-                    del a['paid_at']
-                    del a['border_id']
-                    del a['from_novel_id']
-                    del a['status']
-                    del a['price']
-                    del a['agent_uid']
-                    """
-                    x = sorted(c.items(), key=lambda item: item[0])
-                    x = dict(x)
-                    x = tuple(x.values())
-                    r = r + ((x),)
-
-            if len(r) > 0:
-                mysql_insert_order(r)
-
-            print('zzy', channel, len(r))
-
-
-##《5》 悠书阁
-def get_ysg_order(st, et):
-    key_list = al.ysg_account_list
-    url = 'https://novel.youshuge.com/v2/open/orders'
-    o = ()
-
-    for key in key_list:
-        host_name = key[0]
-        channel_id = key[1]
-        secert_key = key[2]
-        channel = key[3]
-        stage = key[4]
-        timestamp = int(time.time())
-        start_date = time.strftime("%Y-%m-%d", time.localtime(st))
-        end_date = time.strftime("%Y-%m-%d", time.localtime(et))
-        page = 1
-        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
-        sign = md5value(str1).upper()
-        data = {
-            'sign': sign,
-            'host_name': host_name,
-            'time': timestamp,
-            'channel_id': channel_id,
-            'page': page,
-            'pay_status': 1,
-            'start_date': start_date,
-            'end_date': end_date
-        }
-        r = requests.post(url, data).json()
-
-        if 'data' in r.keys():
-            if len(r['data']) > 0:
-                for i in range((r['data'][0]['count'] - 1) // 100 + 1):
-                    timestamp = int(time.time())
-                    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
-                    sign = md5value(str1).upper()
-                    data2 = {
-                        'sign': sign,
-                        'host_name': host_name,
-                        'time': timestamp,
-                        'channel_id': channel_id,
-                        'page': page,
-                        'pay_status': 1,
-                        'start_date': start_date,
-                        'end_date': end_date
-                    }
-                    r2 = requests.post(url, data2).json()
-
-                    if 'data' in r2.keys():
-                        if len(r2['data']) > 0:
-                            for x in r2['data']:
-                                y = {}
-                                dtime = datetime.datetime.strptime(x['create_time'][0:10], "%Y-%m-%d")
-                                y['date'] = ((int(
-                                    time.mktime(dtime.timetuple())) + 8 * 3600) // 86400) * 86400 - 8 * 3600
-                                y['order_id'] = x['order_num']
-                                y['amount'] = round(int(x['price']) / 100, 2)
-                                y['order_time'] = x['create_time']
-                                y['channel'] = channel
-                                y['from_novel'] = x['book_name']
-                                y['stage'] = stage
-                                y['user_id'] = x['openid']
-                                y['channel_id'] = channel_id
-                                y['platform'] = '悠书阁'
-                                y['reg_time'] = x['reg_time']
-
-                                y = sorted(y.items(), key=lambda item: item[0])
-                                y = dict(y)
-                                y = tuple(y.values())
-                                o = o + ((y),)
-                    page = page + 1
-    if len(o) > 0:
-        mysql_insert_order(o)
-
-
-## 数据导入表采用replace替换主键orderid的方法
-def mysql_insert_order(data):
-    pass
-
-
-# if len(data) != 0:
-# 	print('数据为空,不执行数据库操作!')
-# 	pass
-# else:
-# 	db = pymysql.connect('localhost', 'root', 'root', 'quchen_text')
-# 	cursor = db.cursor()
-# 	# sql = 'insert ignore into quchen_text.order_daily (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);'
-# 	# sql = "update quchen_text.order set amount =%s where platform='掌中云' and order_id =%s"
-# 	sql = 'replace 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);'
-#
-# 	try:
-# 		cursor.executemany(sql, data)
-# 		db.commit()
-# 		print('access insert order', len(data))
-# 	except Exception as e:
-# 		db.rollback()
-# 		print('订单数据入库失败:', e)
 
+def start_order_job():
+    start_exec_seconds = date_util.getCurrentSecondTime()
 
-def start_all_job():
     st_unix = date_util.getYesterdayStartTime()
     et_unix = date_util.getTodayStartTime()
 
-    print(date_util.getSecondsToDatetime(st_unix))
-    print(date_util.getSecondsToDatetime(et_unix))
-
-    start_exec_seconds = date_util.getCurrentSecondTime()
-    # get_yuewen_order(st_unix, et_unix)
-    # get_ysg_order(st_unix, et_unix)
-    # get_zhangdu_order(st_unix, et_unix)
-
-    get_zzy_order(st_unix, et_unix)
-    # get_huasheng_order(st_unix, et_unix)
-    print('执行时间(秒)为:', date_util.getCurrentSecondTime() - start_exec_seconds)
+    account_list_yuewen = platform_config_util.get_yuewen_account_list()
+    account_list_zhangzhongyun = platform_config_util.get_zhangzhongyun_account_list()
+    account_list_huasheng = platform_config_util.get_huasheng_account_list()
+    account_list_youshuge = platform_config_util.get_youshuge_account_list()
+    account_list_zhangdu = platform_config_util.get_zhangdu_account_list()
+    # st_unix = 1601136000  # 2020/9/27 0:0:0
+    # et_unix = 1601308800  # 2020/9/29 0:0:0
+
+    print('查询开始时间:', st_unix, date_util.getSecondsToDatetime(st_unix))
+    print('查询结束时间:', et_unix, date_util.getSecondsToDatetime(et_unix))
+
+    ########################################## 测试开关 ##########################################
+    # order_list = platform_order_api_util.get_youshuge_order(st_unix, et_unix)
+    # db_order_util.batch_save_order(order_list)
+    #
+    # exit_flag = True
+    # if exit_flag:
+    #     exit()  #这里是为了测试,不让代码继续执行
+    ########################################## 测试开关 ##########################################
+
+    platform_order_num_list = db_order_util.get_platform_order_count(date_util.getYesterdayStartTime())
+    if len(platform_order_num_list) == 0:
+        print('本地库中没有任何数据,现在全平台补全')
+        db_order_util.batch_save_order(platform_order_api_util.get_zhangzhongyun_order(st_unix, et_unix,account_list_zhangzhongyun))
+        db_order_util.batch_save_order(platform_order_api_util.get_yuewen_order(st_unix, et_unix,account_list_yuewen))
+        db_order_util.batch_save_order(platform_order_api_util.get_huasheng_order(st_unix, et_unix,account_list_huasheng))
+        db_order_util.batch_save_order(platform_order_api_util.get_youshuge_order(st_unix, et_unix,account_list_youshuge))
+        db_order_util.batch_save_order(platform_order_api_util.get_zhangdu_order(st_unix, et_unix,account_list_zhangdu))
+    else:
+        platform_list = ['阅文', '悠书阁', '掌读', '掌中云', '花生']
+        for platform_order_num in platform_order_num_list:
+            platform = str(platform_order_num['platform'])
+            num = int(platform_order_num['num'])
+
+            if platform not in platform_list:
+                print('目前不支持【{platform}】的订单数据同步。'.format(platform=platform))
+                continue
+
+            platform_list.remove(platform)
+
+            if platform == '阅文':
+                order_list = platform_order_api_util.get_yuewen_order(st_unix, et_unix,account_list_yuewen)
+                if len(order_list) != num:
+                    print('阅文数据实际订单和已经入库数据差异:', len(order_list) - num)
+                    db_order_util.batch_save_order(order_list)
+            elif platform == '悠书阁':
+                order_list = platform_order_api_util.get_youshuge_order(st_unix, et_unix,account_list_youshuge)
+                if len(order_list) != num:
+                    print('悠书阁数据实际订单和已经入库数据差异:', len(order_list) - num)
+                    db_order_util.batch_save_order(order_list)
+            elif platform == '掌读':
+                order_list = platform_order_api_util.get_zhangdu_order(st_unix, et_unix,account_list_zhangdu)
+                if len(order_list) != num:
+                    print('掌读数据实际订单和已经入库数据差异:', len(order_list) - num)
+                    db_order_util.batch_save_order(order_list)
+            elif platform == '掌中云':
+                order_list = platform_order_api_util.get_zhangzhongyun_order(st_unix, et_unix,account_list_zhangzhongyun)
+                if len(order_list) != num:
+                    print('掌中云数据实际订单和已经入库数据差异:', len(order_list) - num)
+                    db_order_util.batch_save_order(order_list)
+            elif platform == '花生':
+                order_list = platform_order_api_util.get_huasheng_order(st_unix, et_unix,account_list_huasheng)
+                if len(order_list) != num:
+                    print('花生数据实际订单和已经入库数据差异:', len(order_list) - num)
+                    db_order_util.batch_save_order(order_list)
+            else:
+                print('平台【{platform}】数据没有同步!'.format(platform=platform))
+
+        for platform in platform_list:
+            if platform == '阅文':
+                print('阅文没有数据')
+                db_order_util.batch_save_order(platform_order_api_util.get_yuewen_order(st_unix, et_unix,account_list_yuewen))
+            elif platform == '悠书阁':
+                print('悠书阁没有数据')
+                db_order_util.batch_save_order(platform_order_api_util.get_youshuge_order(st_unix, et_unix,account_list_youshuge))
+            elif platform == '掌读':
+                print('掌读没有数据')
+                db_order_util.batch_save_order(platform_order_api_util.get_zhangdu_order(st_unix, et_unix,account_list_zhangdu))
+            elif platform == '掌中云':
+                print('掌中云没有数据')
+                db_order_util.batch_save_order(platform_order_api_util.get_zhangzhongyun_order(st_unix, et_unix,account_list_zhangzhongyun))
+            elif platform == '花生':
+                print('花生没有数据')
+                db_order_util.batch_save_order(platform_order_api_util.get_huasheng_order(st_unix, et_unix,account_list_huasheng))
+            else:
+                print('平台【{platform}】数据没有同步!'.format(platform=platform))
+
+    print('订单检查执行时间(秒):', date_util.getCurrentSecondTime() - start_exec_seconds)
 
 
 if __name__ == '__main__':
-    start_all_job()
+    # start_order_job()
 
-#
-# scheduler = BlockingScheduler()
-#
-# #每天凌晨执行
-# #start_job_time = '2020-09-26 03:05:00'
-# # scheduler.add_job(start_all_job, 'interval', days=1, start_date=start_job_time)
-#
-# #每天凌晨3点到4点的30分钟都执行一次
-# # scheduler.add_job(start_all_job, 'cron', hour='3-4', minute='30')
-#
-# # 每10秒执行一次
-# scheduler.add_job(start_all_job, 'interval', seconds=2)
-# scheduler.start()
+    scheduler = BlockingScheduler()
+    #每天凌晨3点到4点的30分钟都执行一次
+    scheduler.add_job(start_order_job, 'cron', max_instances=10, hour='3-4', minute='35')
+    scheduler.start()

+ 130 - 0
dgp/tests/check_order_bk20201110.py

@@ -0,0 +1,130 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+__title__ = '每日凌晨空闲时检查本地数据库中的订单数据是否和平台昨天总订单一致'
+
+@Time    : 2020/9/26 19:44
+@Author  : Kenny-PC
+@Software: PyCharm
+
+# code is far away from bugs with the god animal protecting
+    I love animals. They taste delicious.
+              ┏┓      ┏┓
+            ┏┛┻━━━┛┻┓
+            ┃      ☃      ┃
+            ┃  ┳┛  ┗┳  ┃
+            ┃      ┻      ┃
+            ┗━┓      ┏━┛
+                ┃      ┗━━━┓
+                ┃  神兽保佑    ┣┓
+                ┃ 永无BUG!   ┏┛
+                ┗┓┓┏━┳┓┏┛
+                  ┃┫┫  ┃┫┫
+                  ┗┻┛  ┗┻┛
+"""
+from apscheduler.schedulers.blocking import BlockingScheduler
+
+from util import date_util
+from util import db_order_util
+from util import platform_order_api_util
+
+
+def start_order_job():
+    start_exec_seconds = date_util.getCurrentSecondTime()
+
+    st_unix = date_util.getYesterdayStartTime()
+    et_unix = date_util.getTodayStartTime()
+
+    # st_unix = 1601136000  # 2020/9/27 0:0:0
+    # et_unix = 1601308800  # 2020/9/29 0:0:0
+
+    print('查询开始时间:', st_unix, date_util.getSecondsToDatetime(st_unix))
+    print('查询结束时间:', et_unix, date_util.getSecondsToDatetime(et_unix))
+
+    ########################################## 测试开关 ##########################################
+    # order_list = platform_order_api_util.get_youshuge_order(st_unix, et_unix)
+    # db_order_util.batch_save_order(order_list)
+    #
+    # exit_flag = True
+    # if exit_flag:
+    #     exit()  #这里是为了测试,不让代码继续执行
+    ########################################## 测试开关 ##########################################
+
+    platform_order_num_list = db_order_util.get_platform_order_count(date_util.getYesterdayStartTime())
+    if len(platform_order_num_list) == 0:
+        print('本地库中没有任何数据,现在全平台补全')
+        db_order_util.batch_save_order(platform_order_api_util.get_zhangzhongyun_order(st_unix, et_unix))
+        db_order_util.batch_save_order(platform_order_api_util.get_yuewen_order(st_unix, et_unix))
+        db_order_util.batch_save_order(platform_order_api_util.get_huasheng_order(st_unix, et_unix))
+        db_order_util.batch_save_order(platform_order_api_util.get_youshuge_order(st_unix, et_unix))
+        db_order_util.batch_save_order(platform_order_api_util.get_zhangdu_order(st_unix, et_unix))
+    else:
+        platform_list = ['阅文', '悠书阁', '掌读', '掌中云', '花生']
+        for platform_order_num in platform_order_num_list:
+            platform = str(platform_order_num['platform'])
+            num = int(platform_order_num['num'])
+
+            if platform not in platform_list:
+                print('目前不支持【{platform}】的订单数据同步。'.format(platform=platform))
+                continue
+
+            platform_list.remove(platform)
+
+            if platform == '阅文':
+                order_list = platform_order_api_util.get_yuewen_order(st_unix, et_unix)
+                if len(order_list) != num:
+                    print('阅文数据实际订单和已经入库数据差异:', len(order_list) - num)
+                    db_order_util.batch_save_order(order_list)
+            elif platform == '悠书阁':
+                order_list = platform_order_api_util.get_youshuge_order(st_unix, et_unix)
+                if len(order_list) != num:
+                    print('悠书阁数据实际订单和已经入库数据差异:', len(order_list) - num)
+                    db_order_util.batch_save_order(order_list)
+            elif platform == '掌读':
+                order_list = platform_order_api_util.get_zhangdu_order(st_unix, et_unix)
+                if len(order_list) != num:
+                    print('掌读数据实际订单和已经入库数据差异:', len(order_list) - num)
+                    db_order_util.batch_save_order(order_list)
+            elif platform == '掌中云':
+                order_list = platform_order_api_util.get_zhangzhongyun_order(st_unix, et_unix)
+                if len(order_list) != num:
+                    print('掌中云数据实际订单和已经入库数据差异:', len(order_list) - num)
+                    db_order_util.batch_save_order(order_list)
+            elif platform == '花生':
+                order_list = platform_order_api_util.get_huasheng_order(st_unix, et_unix)
+                if len(order_list) != num:
+                    print('花生数据实际订单和已经入库数据差异:', len(order_list) - num)
+                    db_order_util.batch_save_order(order_list)
+            else:
+                print('平台【{platform}】数据没有同步!'.format(platform=platform))
+
+        for platform in platform_list:
+            if platform == '阅文':
+                print('阅文没有数据')
+                db_order_util.batch_save_order(platform_order_api_util.get_yuewen_order(st_unix, et_unix))
+            elif platform == '悠书阁':
+                print('悠书阁没有数据')
+                db_order_util.batch_save_order(platform_order_api_util.get_youshuge_order(st_unix, et_unix))
+            elif platform == '掌读':
+                print('掌读没有数据')
+                db_order_util.batch_save_order(platform_order_api_util.get_zhangdu_order(st_unix, et_unix))
+            elif platform == '掌中云':
+                print('掌中云没有数据')
+                db_order_util.batch_save_order(platform_order_api_util.get_zhangzhongyun_order(st_unix, et_unix))
+            elif platform == '花生':
+                print('花生没有数据')
+                db_order_util.batch_save_order(platform_order_api_util.get_huasheng_order(st_unix, et_unix))
+            else:
+                print('平台【{platform}】数据没有同步!'.format(platform=platform))
+
+    print('订单检查执行时间(秒):', date_util.getCurrentSecondTime() - start_exec_seconds)
+
+
+if __name__ == '__main__':
+    # start_order_job()
+
+    scheduler = BlockingScheduler()
+    #每天凌晨3点到4点的30分钟都执行一次
+    scheduler.add_job(start_order_job, 'cron', max_instances=10, hour='3-4', minute='35')
+    scheduler.start()

+ 22 - 0
dgp/tests/conf/account/huasheng_account_config.csv

@@ -0,0 +1,22 @@
+259900,72b49bebb7fc8df83feac8c4ed5c541b,趣程16期
+269900,65e6d003b58ee73b5406e6cc472ebf3e,趣程14期
+249900,f4f1475f604c4185a3e031e961dee637,趣程17期
+4040635,c8bf5346e35f51c7ce228cff4d4a3678,趣程19期
+2828976,20c0fb1d20964c2c42a725c72cac8863,清勇6月
+4747764,f350d7edd89bb7f6170b970f071ecb36,趣程20期
+3737140,e786e59b87ebf239fdb43bf267ef4ee2,趣程13期
+4848597,fab68fe238a8df12073295373f9e0ff7,趣程22期
+5353590,50fefc21c7dd90cf9b584fe571f1bb64,趣程21期
+4545355,968ba35e79d8219c47ca356d19192c6f,趣程9期
+5858936,508c03b7f22059f1fa811c1774dbff89,阳光1期
+6464295,20ebdb167b8ed58fc406f05cd2b78802,趣程15期
+6666592,998aa35d1ed17635484eae5486e750db,趣程23期
+8282535,d61b2231e589571cf2328a7855df335e,陈冲1期
+104104493,957ad78e53a7fc2e751d36e6ec5329d5,广州10期
+102102605,50126233532d2e4e1796a16e1247d7dc,趣程24期
+127127862,b0af6b9ba284bd6b10b932cdeae96b74,趣程25期
+161161048,fc5f5964d18ac34fd9c16237990151e5,趣程27期
+164164304,b46ee726ae7df377ff18fcf7adca90e1,宋1期
+176176570,d1892f56f07dea3113c119b78a09628d,廖1期
+179179707,86aec06569d9358e9f774842b4335406,趣程26期
+199199259,826c50f5374b71fe0433794ca2b701f0,趣程28期

+ 2 - 0
dgp/tests/conf/account/new_account/new_huasheng.csv

@@ -0,0 +1,2 @@
+127127862,b0af6b9ba284bd6b10b932cdeae96b74,趣程25期
+164164304,b46ee726ae7df377ff18fcf7adca90e1,宋传山1期

+ 2 - 0
dgp/tests/conf/account/new_account/new_wending.csv

@@ -0,0 +1,2 @@
+11790115,VjVIGRX5YgJCGQjC,1023015,趣程15期,qucheng15qi@163.com
+32228088,b8LpIjqo2BAoHATN,1040021,宋山传1期,heyuan@qingpingyue.cn

+ 2 - 0
dgp/tests/conf/account/new_account/new_yangguang.csv

@@ -0,0 +1,2 @@
+10008097,2xa1d55tTPBjeEA8Ho,广州7期,17372,富豪文选
+10008854,FLxTABt3SupEC9KuH1,清勇,18212,堡垒书社

+ 2 - 0
dgp/tests/conf/account/new_account/new_youshuge.csv

@@ -0,0 +1,2 @@
+趣程23期,10659,T3A3LQZVZXN80M1A7OPVYYWT6Q2XPAJX,修明书楼,趣程23期
+趣程15期,10698,8OC7SNCL46ZEI7JBACXFDM8CP5JM1FSL,高岑文轩,趣程15期

+ 2 - 0
dgp/tests/conf/account/new_account/new_yuewen.csv

@@ -0,0 +1,2 @@
+mqud82950@163.com,74ca754515fa253c8ab790603cebc2ee
+guangzhouliuqi2@sina.com,10ce1dd6ccb330a82b73701d1e78f518

+ 4 - 0
dgp/tests/conf/account/qiyue_account_config.csv

@@ -0,0 +1,4 @@
+趣程25期,eyJpdiI6Ik14NFkzcE9CMjdxUlFlOUVpeHFLOVE9PSIsInZhbHVlIjoiU2x6eWhtNU9DVkxsVHdZdTZhMXVydz09IiwibWFjIjoiNWJkMjdiNDhiNDM3YmI5YzZhNTlhM2E0MjU2MzI4NjM5ZGI5MGRmMWE5OGZkNDFiMTEwYjEwYzljYWZiZTA0OCJ9
+趣程27期,eyJpdiI6IlBjV0Z4aVlWNWFUemczdWt5Y0R1QXc9PSIsInZhbHVlIjoiOHZtZUw1Q2RuVnRYd0p1M01WSWoxZz09IiwibWFjIjoiMDE2Mzk5NDFkMDkwZTBmNzU2ZWNmMWMxMzk5YWYwMWIwZmRmZjYzMTgyZDRjYTVkZGY1ZGI5ZGQxNjYyMGRiMSJ9
+趣程15期,eyJpdiI6ImluVWxoRUl3VTR6QU5hamlYOFBvXC9BPT0iLCJ2YWx1ZSI6Ik5IZ0N4dm5GcmJ0Zklsd0tNZ1JVSVE9PSIsIm1hYyI6IjJjODUzMjdlZTc2ODI2ZjFmY2QyYmU5MGViYTkzOGU4MDEwZTIyODIxOTE4NzgzYTNhOGQ1YWM4OGJkMDAzMmIifQ==
+趣程26期,eyJpdiI6IithdDArQ2hhazlxVXJKUXIzK01PQXc9PSIsInZhbHVlIjoiMjAyTEtNOUI2TlkwdklJXC9tNHgwc1E9PSIsIm1hYyI6IjA0YjE0Mjc1MWJjN2VlYmViNWM3YTRiNmI0ZDE5M2QyMDJhMGU3NjRlNTQ4MTliYTgwMzg0ZDNjYmUwY2ZmNWEifQ==

+ 20 - 0
dgp/tests/conf/account/wending_account_config.csv

@@ -0,0 +1,20 @@
+11790115,VjVIGRX5YgJCGQjC,1023015,趣程15期,qucheng15qi@163.com
+62140324,KUUxPIokqtIrtvHQ,1025010,趣程19期,qucheng19qi@163.com
+68442881,RFygHhX16LEYYe8i,1014108,趣程20期,qucheng20qi@163.com
+77257999,86nPtJdYLe1k81gE,1021116,趣程21期,qucheng21qi@163.com
+34655048,FepowoPTVhcAlkA7,1026011,趣程22期,qucheng22qi@163.com
+85233764,KSSwSjlGbuYzp6vn,1023010,趣程23期,qucheng23qi@163.com
+50465587,E5D1qzGtmhbx5EAS,1025020,趣程24期,qucheng24qi@163.com
+20853509,M6hPmkEoJcLLbcFL,1025011,趣程25期,qucheng25qi@163.com
+98062560,cYIgM7MOTws39Kyh,1037015,趣程27期,qucheng27qi@163.com
+99173805,TZgNQu8j7SWLdPP6,1043022,趣程28期,qucheng28qi@163.com
+27390746,4uorQvE8T7ujqCkH,1029008,阳光1期,yangguang1qi@163.com
+69905340,FAUnrQD9ivpvBLVb,1040005,阳光2期,yangguang2qi@163.com  
+56356720,f6BT6W5lD99k1GAQ,1026016,陈冲1期,chen01qi@163.com
+10563708,AVsNS2TEDveCL1lN,1040014,视频号1期,shipinhao001@163.com
+75859518,4vJ9WRzcxTeP8N9D,1044009,广州10期,guangzhou10qi@163.com 
+53224146,6lVRAh7dgNjSciSs,1043012,趣程17期,chybo4boy4hou4hou@163.com
+24322246,RYh2Ao6LajUFKOXF,1044012,趣程7期,fobu7hr4ahx4ae@163.com
+63663864,51blohkHryMTUkOI,1037007,趣程13期,qucheng13qi@163.com
+12655840,mu1G69KMUkGiBua5,1029021,清勇,244541090@qq.com
+32228088,b8LpIjqo2BAoHATN,1040021,宋1期,heyuan@qingpingyue.cn

+ 179 - 0
dgp/tests/conf/account/yangguang_account_config.csv

@@ -0,0 +1,179 @@
+10008097,2xa1d55tTPBjeEA8Ho,广州7期,17372,富豪文选
+10008097,2xa1d55tTPBjeEA8Ho,广州7期,17784,墨轩看吧
+10008097,2xa1d55tTPBjeEA8Ho,广州7期,17378,浩荡文书
+10008097,2xa1d55tTPBjeEA8Ho,广州7期,17300,星际书馆
+10008097,2xa1d55tTPBjeEA8Ho,广州7期,17609,破霄文轩
+10008097,2xa1d55tTPBjeEA8Ho,广州7期,17608,晓凤悦读
+10008097,2xa1d55tTPBjeEA8Ho,广州7期,17607,冥悦文选
+10008097,2xa1d55tTPBjeEA8Ho,广州7期,17371,金银阅读
+10008097,2xa1d55tTPBjeEA8Ho,广州7期,17375,金豪文库
+10008097,2xa1d55tTPBjeEA8Ho,广州7期,17374,苍穹文轩
+10008097,2xa1d55tTPBjeEA8Ho,广州7期,16932,黄金阅文
+10008097,2xa1d55tTPBjeEA8Ho,广州7期,17227,宇轩阅文
+10008097,2xa1d55tTPBjeEA8Ho,广州7期,17226,天域看吧
+10008097,2xa1d55tTPBjeEA8Ho,广州7期,17295,胥渡文学
+10008097,2xa1d55tTPBjeEA8Ho,广州7期,17228,非烟文苑
+10008097,2xa1d55tTPBjeEA8Ho,广州8期,18210,聚金文豪
+10008097,2xa1d55tTPBjeEA8Ho,广州8期,18209,华亭文苑
+10008097,2xa1d55tTPBjeEA8Ho,广州8期,17794,鹤鸣书海
+10008097,2xa1d55tTPBjeEA8Ho,广州8期,17791,倾尘文轩
+10008097,2xa1d55tTPBjeEA8Ho,广州8期,17790,桐暮书香
+10008097,2xa1d55tTPBjeEA8Ho,广州9期,19755,虎啸书楼
+10008097,2xa1d55tTPBjeEA8Ho,广州9期,19747,宏宇悦吧
+10008097,2xa1d55tTPBjeEA8Ho,广州9期,19745,暮雨文选
+10008097,2xa1d55tTPBjeEA8Ho,广州9期,19119,书墨轩楼
+10008097,2xa1d55tTPBjeEA8Ho,趣程5期,19118,轩延书楼
+10008097,2xa1d55tTPBjeEA8Ho,趣程5期,18213,玄远文轩
+10008097,2xa1d55tTPBjeEA8Ho,趣程5期,18208,宣城文苑
+10008097,2xa1d55tTPBjeEA8Ho,趣程5期,19124,萧笙文轩
+10008097,2xa1d55tTPBjeEA8Ho,趣程5期,19122,千鸳书楼
+10008097,2xa1d55tTPBjeEA8Ho,趣程5期,19121,宗越书海
+10008097,2xa1d55tTPBjeEA8Ho,趣程5期,19120,龙潇文阁
+10008097,2xa1d55tTPBjeEA8Ho,趣程5期,18207,庆昱文海
+10008097,2xa1d55tTPBjeEA8Ho,趣程5期,18206,竟海文选
+10008097,2xa1d55tTPBjeEA8Ho,趣程5期,17786,兰苑文库
+10008097,2xa1d55tTPBjeEA8Ho,趣程5期,17777,水月文摘
+10008097,2xa1d55tTPBjeEA8Ho,趣程5期,17785,绘影悦读
+10008097,2xa1d55tTPBjeEA8Ho,趣程6期,19758,屠神文海
+10008097,2xa1d55tTPBjeEA8Ho,趣程6期,19757,天武文阁
+10008097,2xa1d55tTPBjeEA8Ho,趣程6期,19756,凌岳文轩
+10008097,2xa1d55tTPBjeEA8Ho,趣程6期,19064,心心相语
+10008097,2xa1d55tTPBjeEA8Ho,趣程6期,19063,悠然阅吧
+10008097,2xa1d55tTPBjeEA8Ho,趣程6期,19061,飞羽文苑
+10004213,GTDgKsEFThSmm7qETj,趣程8期,19131,沧翰文轩
+10004213,GTDgKsEFThSmm7qETj,趣程8期,19141,亢龙文库
+10004213,GTDgKsEFThSmm7qETj,趣程8期,19140,翔鱼书楼
+10004213,GTDgKsEFThSmm7qETj,趣程8期,19139,惊虹书海
+10004213,GTDgKsEFThSmm7qETj,趣程8期,19145,天降悦读
+10004213,GTDgKsEFThSmm7qETj,趣程8期,19144,至尊文轩
+10004213,GTDgKsEFThSmm7qETj,趣程8期,19143,龙腾文海
+10004213,GTDgKsEFThSmm7qETj,趣程8期,19142,崛天文海
+10004213,GTDgKsEFThSmm7qETj,趣程9期,20282,灵龙阅读
+10004213,GTDgKsEFThSmm7qETj,趣程9期,20281,紫晖文阁
+10004213,GTDgKsEFThSmm7qETj,趣程9期,19762,悦竹文库
+10004213,GTDgKsEFThSmm7qETj,趣程9期,19754,亦玉文海
+10004213,GTDgKsEFThSmm7qETj,趣程10期,19743,鹰扉书楼
+10004213,GTDgKsEFThSmm7qETj,趣程10期,19146,霖羽文轩
+10004213,GTDgKsEFThSmm7qETj,趣程10期,19752,暮风书馆
+10004213,GTDgKsEFThSmm7qETj,趣程10期,19751,青橙文选
+10004213,GTDgKsEFThSmm7qETj,趣程10期,19750,沧海文豪
+10004213,GTDgKsEFThSmm7qETj,趣程10期,19062,陶然读吧
+10004213,GTDgKsEFThSmm7qETj,趣程10期,19060,陶轩看吧
+10004213,GTDgKsEFThSmm7qETj,趣程11期,20286,沐城书海
+10004213,GTDgKsEFThSmm7qETj,趣程11期,20285,逐天书楼
+10004213,GTDgKsEFThSmm7qETj,趣程11期,19760,白虎文选
+10004213,GTDgKsEFThSmm7qETj,趣程11期,19759,屠龙书社
+10004213,GTDgKsEFThSmm7qETj,趣程11期,20278,豪风书楼
+10004213,GTDgKsEFThSmm7qETj,趣程11期,19952,奇逸书楼
+10004213,GTDgKsEFThSmm7qETj,趣程11期,19951,明旭文库
+10004213,GTDgKsEFThSmm7qETj,趣程11期,19865,承安文海
+10004213,GTDgKsEFThSmm7qETj,趣程11期,19864,怀风文轩
+10004213,GTDgKsEFThSmm7qETj,趣程12期,23808,墨凡书海
+10004213,GTDgKsEFThSmm7qETj,趣程12期,20284,玄星文轩
+10001315,fpymTLxzwEpJDa3ErF,趣程13期,22768,赤星书海
+10001315,fpymTLxzwEpJDa3ErF,趣程13期,22767,青涛文阅
+10001315,fpymTLxzwEpJDa3ErF,趣程13期,22766,伏羲书海
+10001315,fpymTLxzwEpJDa3ErF,趣程13期,22765,英逸文轩
+10001315,fpymTLxzwEpJDa3ErF,趣程13期,22764,哲圣文海
+10001315,fpymTLxzwEpJDa3ErF,趣程14期,23811,星洲书海
+10001315,fpymTLxzwEpJDa3ErF,趣程14期,22262,狂涛文轩
+10001315,fpymTLxzwEpJDa3ErF,趣程14期,22261,展宸书楼
+10001315,fpymTLxzwEpJDa3ErF,趣程14期,22259,哲俊文库
+10001315,fpymTLxzwEpJDa3ErF,趣程15期,29410,青轩书涯
+10001315,fpymTLxzwEpJDa3ErF,趣程15期,29411,东云文海
+10001315,fpymTLxzwEpJDa3ErF,趣程15期,29407,月华文苑
+10001315,fpymTLxzwEpJDa3ErF,趣程15期,29314,凌霄文海
+10001315,fpymTLxzwEpJDa3ErF,趣程15期,28167,川江文海
+10001315,fpymTLxzwEpJDa3ErF,趣程15期,23264,钰龙书楼
+10001315,fpymTLxzwEpJDa3ErF,趣程15期,23263,望舒文选
+10001315,fpymTLxzwEpJDa3ErF,趣程15期,23262,骁骑文选
+10001315,fpymTLxzwEpJDa3ErF,趣程15期,23261,恺风书楼
+10001315,fpymTLxzwEpJDa3ErF,趣程15期,23260,盛德文苑
+10001315,fpymTLxzwEpJDa3ErF,趣程15期,23125,吾悦文阁
+10001315,fpymTLxzwEpJDa3ErF,趣程15期,23128,钰笙看吧
+10001315,fpymTLxzwEpJDa3ErF,趣程15期,23127,阅江文轩
+10001315,fpymTLxzwEpJDa3ErF,趣程15期,23126,江海文楼
+10001315,fpymTLxzwEpJDa3ErF,趣程15期,23124,明晨书楼
+10001315,fpymTLxzwEpJDa3ErF,趣程15期,23007,海兰文轩
+10001315,fpymTLxzwEpJDa3ErF,趣程15期,23008,霓霞书海
+10001315,fpymTLxzwEpJDa3ErF,趣程15期,23006,琉焰文轩
+10001315,fpymTLxzwEpJDa3ErF,趣程17期,22363,宏悦阅文
+10001315,fpymTLxzwEpJDa3ErF,趣程19期,26920,亿豪书海
+10001315,fpymTLxzwEpJDa3ErF,趣程19期,26919,玄火书涯
+10001315,fpymTLxzwEpJDa3ErF,趣程19期,26918,虎啸书涯
+10001315,fpymTLxzwEpJDa3ErF,趣程19期,26875,天鹰文阅
+10001315,fpymTLxzwEpJDa3ErF,趣程19期,26874,林松阅读
+10007833,S9Ej9MrpMBEdnGn1iv,趣程23期,28354,东皇文楼
+10007833,S9Ej9MrpMBEdnGn1iv,趣程23期,28353,暗锋阅读
+10007833,S9Ej9MrpMBEdnGn1iv,趣程23期,26910,修罗书楼
+10007833,S9Ej9MrpMBEdnGn1iv,趣程23期,26909,深谷书楼
+10007833,S9Ej9MrpMBEdnGn1iv,趣程24期,29294,尊焱文海
+10007833,S9Ej9MrpMBEdnGn1iv,趣程24期,29292,祺星阅读
+10007833,S9Ej9MrpMBEdnGn1iv,趣程24期,28355,游羽文海
+10007833,S9Ej9MrpMBEdnGn1iv,趣程24期,26905,赤松文库
+10007833,S9Ej9MrpMBEdnGn1iv,趣程24期,26904,森永文海
+10007833,S9Ej9MrpMBEdnGn1iv,趣程24期,26901,琉圣文阅
+10007833,S9Ej9MrpMBEdnGn1iv,趣程25期,26885,豪运阅读
+10007833,S9Ej9MrpMBEdnGn1iv,趣程25期,26884,鸿运文海
+10007833,S9Ej9MrpMBEdnGn1iv,趣程25期,26882,百川书涯
+10007833,S9Ej9MrpMBEdnGn1iv,趣程27期,29406,风星文轩
+10004059,k9wTKKtglJ21CwEF7r,趣程28期,29409,神锋文楼
+10004059,k9wTKKtglJ21CwEF7r,趣程28期,29408,玄虎书海
+10004059,k9wTKKtglJ21CwEF7r,广州10期,26876,晨润文阁
+10004059,k9wTKKtglJ21CwEF7r,阳光2期,29291,卧龙文涯
+10004059,k9wTKKtglJ21CwEF7r,阳光2期,29290,龙刚文海
+10004059,k9wTKKtglJ21CwEF7r,阳光2期,29289,乘风文楼
+10004059,k9wTKKtglJ21CwEF7r,阳光2期,28828,楚铮阅读
+10004059,k9wTKKtglJ21CwEF7r,阳光2期,28827,帝豪书海
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,29405,雷光书楼
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,29323,潜龙文楼
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,29321,应龙看吧
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,29320,盘古文楼
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,29319,北斗文海
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,29318,惊天书海
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,29317,敬云文海
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,29316,西峰书舟
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,29315,星昆阅读
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,28811,青鹤文苑
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,28763,君豪文海
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,28761,贯风文楼
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,28760,毅豪文楼
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,28762,陌然书楼
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,28759,云铮书楼
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,26907,北斗文海
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,26880,金峰文苑
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,26879,文啸书海
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,23810,远思书楼
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,17604,月落文选
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,17603,浩瀚文选
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,17379,奇峰阅文
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,15953,苍焰文海
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,16926,苍夜阅读
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,16925,墨羽文苑
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,16067,启天文苑
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,16068,墨然文轩
+10004059,k9wTKKtglJ21CwEF7r,陈冲1期,16069,天天刊读
+10008854,FLxTABt3SupEC9KuH1,清勇,19763,淺夏文轩
+10008854,FLxTABt3SupEC9KuH1,清勇,19130,墨客文轩
+10008854,FLxTABt3SupEC9KuH1,清勇,19129,宇浩书楼
+10008854,FLxTABt3SupEC9KuH1,清勇,19128,非墨文轩
+10008854,FLxTABt3SupEC9KuH1,清勇,19127,若明文轩
+10008854,FLxTABt3SupEC9KuH1,清勇,19126,知书文轩
+10008854,FLxTABt3SupEC9KuH1,清勇,19059,半夏文轩
+10008854,FLxTABt3SupEC9KuH1,清勇,18215,如烟文轩
+10008854,FLxTABt3SupEC9KuH1,清勇,18214,木槿书楼
+10008854,FLxTABt3SupEC9KuH1,清勇,18212,堡垒书社
+10001315,fpymTLxzwEpJDa3ErF,趣程15期,29412,天武书楼
+10004059,k9wTKKtglJ21CwEF7r,趣程28期,29608,夏宇文阅
+10004059,k9wTKKtglJ21CwEF7r,趣程28期,29609,玉轩文阁
+10007833,S9Ej9MrpMBEdnGn1iv,趣程22期,28226,枭雄看吧
+10007833,S9Ej9MrpMBEdnGn1iv,趣程24期,29414,妙语书楼
+10007833,S9Ej9MrpMBEdnGn1iv,趣程24期,29605,海月文苑
+10007833,S9Ej9MrpMBEdnGn1iv,趣程24期,29606,灵云书海
+10005061,ru5QntrnuF9r9kCC7Q,宋1期,30316,流云文海
+10005061,ru5QntrnuF9r9kCC7Q,宋1期,30315,莞陶文轩
+10005061,ru5QntrnuF9r9kCC7Q,宋1期,30303,暮染书楼
+10005061,ru5QntrnuF9r9kCC7Q,宋1期,30430,浩宇文海
+10005061,ru5QntrnuF9r9kCC7Q,趣程24期,30516,安宜文海
+10005061,ru5QntrnuF9r9kCC7Q,宋1期,30433,博文文海
+10005061,ru5QntrnuF9r9kCC7Q,宋1期,30431,鸿远文阅

+ 20 - 0
dgp/tests/conf/account/youshuge_account_config.csv

@@ -0,0 +1,20 @@
+趣程23期,10659,T3A3LQZVZXN80M1A7OPVYYWT6Q2XPAJX,修明书楼,趣程23期
+趣程23期,10660,T3A3LQZVZXN80M1A7OPVYYWT6Q2XPAJX,绍晖文海,趣程23期
+趣程21期,10656,KXYIOQT29FDH80NUWRV9XUUK4QIOEIAB,赤凰文阁,趣程21期
+趣程21期,10678,KXYIOQT29FDH80NUWRV9XUUK4QIOEIAB,千月书楼,趣程21期
+趣程yangg1,10672,ZR7PM1YA5DQ6JCMVTH3G5TLHI47DG1GF,舒言文海,阳光1期
+趣程yangg1,10704,ZR7PM1YA5DQ6JCMVTH3G5TLHI47DG1GF,向阳文海,阳光1期
+趣程清勇6,10675,B6FK1HFW1V9ZPD6WX0FGBX3WP73E6M5V,璃月文楼,清勇7月
+趣程清勇6,10676,B6FK1HFW1V9ZPD6WX0FGBX3WP73E6M5V,璃月颂书,清勇7月
+趣程清勇6,10677,B6FK1HFW1V9ZPD6WX0FGBX3WP73E6M5V,璃月阅读,清勇7月
+趣程15期,10696,8OC7SNCL46ZEI7JBACXFDM8CP5JM1FSL,盛德文苑,趣程15期
+趣程15期,10697,8OC7SNCL46ZEI7JBACXFDM8CP5JM1FSL,博涉文海,趣程15期
+趣程15期,10698,8OC7SNCL46ZEI7JBACXFDM8CP5JM1FSL,高岑文轩,趣程15期
+趣程15期,11089,8OC7SNCL46ZEI7JBACXFDM8CP5JM1FSL,云景文阅,趣程15期
+趣程15期,11127,8OC7SNCL46ZEI7JBACXFDM8CP5JM1FSL,听雷阅读,趣程15期
+趣程15期,11128,8OC7SNCL46ZEI7JBACXFDM8CP5JM1FSL,星砚书海,趣程15期
+趣程15期,11132,8OC7SNCL46ZEI7JBACXFDM8CP5JM1FSL,神风文阅,趣程15期
+趣程15期,11209,8OC7SNCL46ZEI7JBACXFDM8CP5JM1FSL,文阅看吧,趣程15期
+清勇6,10675,LZE35Z3286W8IQIVYQB8KVNA245OI5PW,璃月文楼,清勇6
+清勇6,10676,LZE35Z3286W8IQIVYQB8KVNA245OI5PW,璃月颂书,清勇6
+清勇6,10677,LZE35Z3286W8IQIVYQB8KVNA245OI5PW,璃月阅读,清勇6

+ 2 - 0
dgp/tests/conf/account/yuewen_account_config.csv

@@ -0,0 +1,2 @@
+mqud82950@163.com,74ca754515fa253c8ab790603cebc2ee
+guangzhouliuqi2@sina.com,10ce1dd6ccb330a82b73701d1e78f518

+ 168 - 0
dgp/tests/conf/account/zhangdu_account_config.csv

@@ -0,0 +1,168 @@
+10015,0125f434-7999-a4bb-77ab-28fb0a6a68ec,丹墨悦读
+7406,834a31ad-5533-d0d0-cb48-6f81f83919b0,九五月读
+10497,2e4a0bd0-e222-286b-73dc-1e6a6c8a6f28,书剑文阁
+10507,59babb99-9434-b1b1-7159-17afcb825cba,争锋文豪
+9868,320b477e-59c6-cb9f-9fb1-b0a304c3d82b,侠客书楼
+10020,9a914f89-f640-2ae8-34a7-c24b1f397d77,修焰文阅
+9873,14978692-cdae-9b8e-84cf-21d3202dd521,傲龙书社
+10069,ee9d7deb-8c3f-6862-31dc-779bec1cdc46,兰庭文鼎
+9668,88f5d175-de02-24ed-575c-0fcf6c847e02,冥影文库
+10063,016e69af-ce65-e5c0-34dc-47222cfb996a,冥影文海
+10119,a2d7196f-164b-8b58-cb6d-6d49d91fb106,冥真文轩
+9754,da893644-f673-42c7-65fd-f6a7ac30347a,冷锋看吧
+7863,ad3b06c6-c0b4-8f5f-8270-f493864f5a83,凤情书阁
+10769,ae1cb5cf-716c-f880-dcf2-ab041c2f849a,剑旭文海
+7405,862a9c69-801e-23ce-5fbd-bfcb0c1de5b0,南三月读
+10472,00d765f5-dd77-2b37-f0b0-bd5ac8d24a3e,南菲悦读
+7872,0e0915c5-ca02-3d62-b0ca-a80f41d722db,名媛书屋
+10729,08d04293-c004-7116-d260-53a340471306,坌腾文海
+7865,9ae4df81-a9c1-e7d3-50e5-62e40332dbef,夜情书房
+9684,db078cb4-fb45-7830-af84-736ef24912b6,大河中文网
+9874,4248df4a-d573-cf02-97cb-2d185d3cfb69,天降读物
+10040,116ef9c2-62e8-83ae-1c41-0f14d898dad8,奇汇看吧
+9860,bd90fa50-51f7-fce1-1523-591a041a8719,如阅墨香   
+7873,456af16a-fc75-420c-a6ce-234cba07eb92,媚咪文馆
+10543,8304c660-a0a1-acfd-7ba7-3531383c9209,宸赫书楼
+9872,80cec896-ef46-6f77-a80e-6737954dfbaa,寻界文坊
+9870,f2d73b83-60e3-215c-f283-4e48a64e19e0,尊圣中文网
+10545,def2f148-82c2-b42c-634c-f2b557a529ce,尚凌文轩
+9865,41e1a151-397d-a08e-f582-f0394a59c748,巨龍悦读
+10730,f337c426-58fc-3865-4794-d5cb2c9ceec2,彭湃阅读
+9685,cb03d959-9311-f0d3-a6fb-188d79d92412,忠武文学城
+10234,b5e9eaea-483f-f246-5816-23ffa9309c05,悦苒看吧
+9995,d654d3ec-ec34-e243-6cab-5ba030fb1c8a,惊鸿文海
+9633,e943f5cf-8726-e7a8-6b76-d0a2d8f0a67c,慕云文库
+10459,781e425b-b14a-7d39-88fa-588d11d18b93,承泽文轩
+10009,a72aefcf-2fde-3187-90aa-09a30273cdc6,攀登文库
+10003,3c0bb2fa-e835-6f96-ffd2-185fd9dfd2af,新阅文轩
+9663,e0b49bb4-0365-ec52-e8d2-a71bf9eeb2a2,无涯文海
+7864,4c3ce52f-9e48-9f5a-c64f-1634dcb37d1d,日月书房
+10030,8674d904-c496-bacb-35ab-7a23a21b4725,旷世文海
+10629,a57edda1-766c-ae25-fb95-d57aaf144e7c,星烛书海
+9847,0ffd2d6f-aa77-67a0-fda1-510eab3ce006,昱墨文海
+10011,88ad507a-050a-8271-4ba4-adfd381cdaff,晨曦墨轩
+9846,be33e937-c791-48fb-8137-58f0d38a70b4,月落文阁
+9689,b6a4daa1-e9ce-0dd6-5714-21e089f327ab,林溪文苑
+10008,06301041-96ca-b3a1-9892-e02526a3f53e,枫林文选
+10013,1bfa8861-c20d-f994-b649-03bdcf40a403,桔橙文轩
+10441,fb13c84a-01b1-1a84-4c84-ffbc38241477,洛书文海
+10235,239c2e93-1c3c-05a9-ba69-4fb8c2d1553e,渲染悦轩
+10628,78348bef-cef1-969a-a0cf-990dab656bb5,炫轩文库
+7890,a1417aa5-2041-9b56-d419-4606f035d12d,烛影书屋
+10669,1b3a227c-c811-d1bf-9564-6cd5c22a1fb5,猛虎阅吧
+10461,755ef603-e734-bddf-e5b8-700e941c8c18,瑞祥文轩
+9686,d5964a79-2b2a-5e41-f54a-5d0304cd088b,知隐书香
+9998,a8d73912-364b-57aa-76e6-b38a2bb9fb7b,碧炎文海
+10041,4cd2ede8-8b02-2ef1-c29f-081ac5b926e0,祁苑文阅
+10442,62d5296b-9370-ecbf-e1b2-8e15158e3ed5,神龍悦读
+10544,a22e664b-0fa2-f08a-c60a-1b97d180d4a8,禹诺文阁
+9915,f8fe300b-eea6-9443-5a83-1b7d75ae88ad,秀丽文轩
+9911,7de672c4-e526-71a2-aa08-fd6012929a43,秋霞书社
+10471,b92c8ea0-f40c-b959-9c54-bdd42948fec4,空亭文苑
+7887,7271c2b9-5092-aa65-fa86-786cf3ecd528,竹枝书院
+10460,644d48ea-8ee3-3271-43e4-aa1e4d1eb86e,繁星书海
+10499,d5c5c552-34cd-55c3-e41f-44fe443cbe56,红炎文轩
+9882,3b4f7cca-ffea-086a-9444-5dfcd6c79794,绘色阅读
+9876,68e66280-c3d7-e84a-8fe1-94b1f526f5b6,若汐文海
+10771,982bde3b-5eb5-431e-a3f6-bac99735b759,莫宇文库
+10067,9bcd9dae-7718-91da-ea16-ea224e22164c,莹悦看吧
+10473,7864d9a8-df4b-d105-4f2e-e30179c2974a,蓝翼文海
+10024,1b5c7edc-038e-54ad-dad5-f30216dd8c0a,虎啸文选
+10095,ced46ef2-5759-6169-7e40-5624215f1f91,蛟龙书楼
+9883,0d525b30-997b-c727-9f03-1dea301f7ec0,西洲书舍
+10668,9839e7a4-5fc2-c05b-faaf-0ed5f2cdce81,豪天文轩
+9866,04cad8fd-c599-12e8-4d66-80cab639b050,豪金书社
+7889,bf0fd628-c244-52c5-ae94-d5fa0ec91f4d,踏莎小说阅读
+10044,6e87b452-dcb3-9c10-de65-c5919fa3d73d,追光悦读
+10200,81c06b81-1da5-53c4-3b4e-5f63a83f1579,锦墨书楼
+9916,58e354ee-5f24-f02f-ee90-5f6f0e5d97c8,锦溪书楼
+9688,e0a5f28c-6009-560a-6dc6-975e5e53cc74,阅欣文学
+9910,5e3f1ef2-b497-8560-810e-ee92882f0726,阅胜文选
+10498,89266631-e8fa-ea77-075e-d38d37a654c1,阳俊文海
+10770,e389c082-d1ca-cb2a-6d0b-915db869363a,雁风文轩
+9900,874d0ec8-1e85-f061-e095-d9997597bd8e,雅阁文社
+7866,dfb7dcdc-a6b1-e03e-2f57-9bfcb80a32c4,雨尘书阁
+10474,611bdc19-946c-945d-bcf8-2a64ca2919c0,雪松文库
+9875,b1fea7ac-4e0b-4546-e41a-9181af98515d,霄雄文学
+10419,8e4c73f2-50e4-dd33-3e06-63c3d8f38c04,霜华文库
+9938,fc61e6fd-bf13-44ea-73e9-609971b83456,青云文轩
+10007,8bc52ea8-64ec-32cf-3ef6-463abe469eed,青峰悦读
+8939,b016dcab-c002-ae71-f8ad-d5ffd35d3bbc,青葱看吧
+10014,4d5441a4-da30-15e4-0186-aa2aea21b286,青霞文苑
+10418,e3a32b05-ac1c-f518-af33-3c0d3883307b,飞鸿文海
+9971,5c625d14-8452-847e-09bd-33d30126ed31,魅力书楼
+9922,d1e77bc9-3875-ad44-2253-4201f70e0bb4,鹿鸣文库
+10012,90e4a5fc-4625-9710-6ab1-561ce0de0270,麒麟墨选
+10199,16abc367-31e0-f0aa-4cd4-9cc64e891d8a,鼎月文苑
+10475,f50879de-036f-7ec7-39dc-44ecda037dea,鼎盛文海
+10901,8135ee68-4255-8da3-9b35-cef2b942f6a2,孤风书楼
+10899,a8425c20-ee9a-b6ad-b8da-e6b74621be5c,冷雁文海
+10896,b24bca0d-3d31-0127-04e0-b2254ebb27e9,南烟书楼
+10840,e69ab01b-3725-4e70-670b-408b82860fe3,鹤鸣看吧
+10841,dc577efd-aa90-4dd6-f8ab-c42b38f84faa,深洋书楼
+10842,4cc12af5-2c86-2217-e5e1-ce1b28fa4758,航远文阁
+10843,ca5920b0-59cb-a55e-9fd9-e5095a29c04f,神武文轩
+10845,cfc93bd7-723e-0341-c6ef-c25253a8caa6,茗垣文轩
+10995,2e537d2a-6b5c-a862-2cf0-30aa46bcad6e,耀杰书海
+10997,d458def2-35c0-c577-d5a3-259225b9b76b,锦凌文选
+10996,b1bde6ca-c518-ea3c-cf5f-5d30286b34b4,清涛文海
+10998,b2b056ee-26a6-5868-874b-ab36f372900c,墨景文轩
+10999,630fda00-13ff-f625-05aa-8d1862d385da,炫熙书馆
+11021,90a1e372-8ce8-cd8f-e8c5-e9f603f0f9ba,狂涛文轩
+11020,73445fa0-6145-149f-58eb-772eb7c78481,展宸书楼
+11011,6fd7df66-8dc0-8939-759e-8e34d759e34a,阳曜文海
+11009,f1d96f4a-2a3c-b24b-1f36-2398cebc19ad,高韵书楼
+11008,d0a3a898-9e87-6adf-00ed-86b68040ecb0,成弘书楼
+10963,3cf33177-fd73-68a5-6095-0d8b36083a9c,旋锋文轩
+10962,c3f38863-6a7e-33aa-a44e-04b901ee1f04,赤虹文海
+10961,11306f81-cfea-ab8f-f0a0-2da8f0acdea5,飘霜书海
+10942,1235a146-7a1d-3a68-9f79-ede48cb8442c,月瑶看书
+10941,3fd1d09f-c66c-bee7-021d-41510a673339,婉婉阅读
+10908,2994b1bb-b51b-acd3-cad5-0055cf28104c,君浩文阅
+10906,a419c6fd-9e10-c9d9-ed9a-02814014fdc3,星汉文海
+10879,617a71dc-9ae0-3d5e-d373-ee833edc25df,华晖文轩
+10878,d76b661f-75d5-60e7-f596-26d61054348e,承载书楼
+10877,fe3c50c4-5fe7-36a1-6dc5-40ca27b3f671,鸿振书馆
+11076,9a9bfeaf-2abc-495b-83f5-5f00d36cc54b,正德书楼
+11075,1ab64fb6-aab3-f13a-d2f9-e079fb17d66e,泽宇文海
+11074,c45b1a56-44e3-384e-25cf-63b987d6a297,吉本书海
+11073,e0bf65b9-f592-1a1a-aac0-fbf710e40847,高岑文轩
+11044,0cdea0ed-7a09-36f0-750e-61b75652bc87,烈风文海
+11043,b605a351-81b8-910d-b0a8-66c9dc59374d,霸皇书楼
+11042,35902525-03d5-e99b-ea69-d5ed1c716da1,辰宇书馆
+11039,5abdd0ec-408e-ded3-d725-ac08e93eae90,吹雪文库
+11038,d364471e-963b-e8a7-e89b-06568c831500,飞羽书楼
+10900,e9136409-133f-37e1-7585-3f4f1675d20f,琦玉文库
+10998,b2b056ee-26a6-5868-874b-ab36f372900c,墨景文轩
+10996,b1bde6ca-c518-ea3c-cf5f-5d30286b34b4,清涛文海
+11378,7a300704-f7ff-3212-9d7a-31a9ef0ae557,龙海文苑
+11379,018d36af-955f-ff87-cee1-3ab107b2d101,炎锋阅读
+11439,386ab979-5f07-979f-cca2-babbe2639568,夏阳文阁
+11438,73688a26-2803-6377-25a2-ade30e6d4bf5,龙鸣书涯
+11437,d5e934d6-38c8-41db-a678-0f7f84af355e,博文文轩
+10497,2e4a0bd0-e222-286b-73dc-1e6a6c8a6f28,书剑文阁
+10461,755ef603-e734-bddf-e5b8-700e941c8c18,瑞祥文轩
+10459,781e425b-b14a-7d39-88fa-588d11d18b93,承泽文轩
+10235,239c2e93-1c3c-05a9-ba69-4fb8c2d1553e,渲染悦轩
+10234,b5e9eaea-483f-f246-5816-23ffa9309c05,悦苒看吧
+10015,0125f434-7999-a4bb-77ab-28fb0a6a68ec,丹墨悦读
+10014,4d5441a4-da30-15e4-0186-aa2aea21b286,青霞文苑
+10013,1bfa8861-c20d-f994-b649-03bdcf40a403,桔橙文轩
+10012,90e4a5fc-4625-9710-6ab1-561ce0de0270,麒麟墨选
+10011,88ad507a-050a-8271-4ba4-adfd381cdaff,晨曦墨轩
+10009,a72aefcf-2fde-3187-90aa-09a30273cdc6,攀登文库
+10007,8bc52ea8-64ec-32cf-3ef6-463abe469eed,青峰悦读
+11443,a368a1e0-fb74-77d2-dd8a-e60eed8d3511,云峰文海
+11442,388a8047-db03-1a0f-389c-e42834c28af6,子豪文学
+11442,388a8047-db03-1a0f-389c-e42834c28af6,子豪文学
+11023,d4b639a0-afe9-4d02-880a-79a199772c87,文曲书廊
+11022,a2260448-aba1-b4ae-3458-71bac5d8c03c,云汉书典
+10989,7358acea-e860-5415-8d4e-4fa3c556e5d5,静谧书斋
+10988,5f5d73fd-4d23-d92c-fbe5-a9a0bdaeabe8,月悦追文
+10974,d2d6750e-9b85-4393-e5d1-ff547c01c318,玉笙书楼
+10972,9dd7dfa9-5c4c-2324-5f4c-c3f070421a0c,钟龙文轩
+10184,c725db27-153f-cbce-da71-e2373de80362,乡梦看书
+10183,69a72e0b-96f0-1cf7-8c76-a5287cda75c1,保月看书
+10181,a860a77f-251b-f2f0-d1d6-0ed31cfa7a45,诵月读书
+10066,8c3fa5b3-77e1-1963-a439-3002028196ae,太阿书楼
+10029,1a875b16-185e-60ad-17d1-d5bb6faf839b,傲天书楼

+ 62 - 0
dgp/tests/conf/account/zhangzhongyun_account_config.csv

@@ -0,0 +1,62 @@
+vip-songyi,098f17cc73cc4a74861ff4a87e3b526c,
+vip-wanger,aefabe89dfb84227bf7dae8ef0a59c89,
+vip-kuangwu,de5157d0e778400d84b2730626bd5787,
+vip-guangzhou500,ecce5c8566c24d63b8c829a10deb8601,
+vip-zhousi,b226af5f3cb243638b4a29d1a343d10d,
+vip-diwu1,7f2a1f03e53742c4acc49814b536ff59,
+vip-toutiao100,10ea6f1132084d86940c9b8b56fc5dad,
+vip-guangzhou3000,bac6f3c5d58244559b244c52bd1696b2,
+vip-guangzhou600,71873a3750bf49cdabb7a10441742950,
+vip-guangzhou3,385c7fadd05649e689a6bf272f3d59a7,
+vip-guangzhou5004,b8737034f23b4e5b9fa6256166faea57,
+vip-guangzhou5,5c65fd4b632a401097b6ca524eab551f,
+vip-guangzhou6,0939540ca8f34401b20b36e6c5409031,
+vip-guangzhoujiuqi,a7ede742affe457e8da4da181eb643d3,
+vip-guangzhou5003,9fefdc098ae54fe283dd2c5a6019b769,
+vip-qucheng2,e8cee00b1c3d42a6a75810a0d90e9e6a,
+vip-quchengsanqi,afc1e30e72ad41bf90c21aac41cb6ee1,
+vip-qucheng7qi,f8e7b801e63e43218111c1d8a5faf857,
+vip-qucheng8qi,17838a8f9ea64f809a88a5cd872c7375,
+vip-quchengjiuqi,80034ad8e7874ab99242ccce30ac1861,
+vip-ccsq,d8100098bf0d4fdb85e62150bb15a0b9,
+vip-qucheng11qi,e274b5bb5245444f806bc36b688f7a44,
+vip-qucheng12qi,b9de5355acbd414cb12f97786efe0376,
+vip-qucheng13qi,c8c91b7fdb8e476d81160c865f9bbf7b,
+vip-qucheng14qi,c9c27f53e40b4372a2bfe83dbd8fde03,
+vip-qucheng15qi,81909093d1db4374b5c545031380f3fe,
+vip-zanxiang10,04a2c53fbe3546dd8feb475592f9855c,
+ch-zzsw,d1a8e23df03a411a8353896e00751b23,
+ch-zhixiang,d0fc32aefdfb46ad959d6a09943b0d9e,
+ch-wenlan,520514c9c0cf46e19f0707ec28113a8b,
+ch-qxsww,b31211c625244e1a8123adf866a74935,
+ch-xixsc,25fc3c26d388410dbdb6ea5ce792fc1e,
+ch-zzsw5,fd5b6b28997f4880b398d0188f0fe68a,
+ch-yysf66,b194a98901ad4508aa0a984deedc35a5,
+ch-chyd,370c8494fd0c480f8c0b583d5eb3bd54,
+ch-xiangx5,4a196a83056d43ed82db2a9f941cd6cb,
+ch-shwg,d406794893de4175ab948fd028e43468,
+vip-diliu,0858b1566e0c4debb4cab808a0e207f7,
+ch-haotian2,7dd4a99a49b340a2a02822d9a83f64a8,
+ch-fysh6,645a6357d3ea413098f689dbf3d70c68,
+vip-qucheng16qi,bca1090368d44ec8a498d26e02ba06fe,
+vip-qucheng17qi,fd31bc211b4f42908163f68fdeabf869,
+vip-刘勇8,e35df1ac30b844eb81bd620674dc6937,清勇6月
+110456b2078,8621335fe2f61b7afa5d8697ba7669b1,趣程21期
+110512df033,4768493cc3c7517f1b3fcd8bfeeb80ed,趣程22期
+110870010d2,fb368fe82522503d06880d19c938e10c,清勇7月
+1108701f1d6,0f9c0f8429d1a16a8a78c2306e7a4db3,清勇7月
+1109652c8b6,be5b9d099ccec53524e305b4bfd96edc,趣程23期
+11092522a7f,bbd92f3898a2518d3456246b8b364de5,阳光1期
+1109295d56c,9bb955186597882ac473e86ba4576158,趣程20期
+1119168245a,67d4941065fb2ce4e601fd156220c579,趣程19期
+112645ad567,67861e28b58a809ffc5af81a17e7de1f,广州10期
+113100128c7,adaa2b8fb53274453faaa0a70233562e,趣程25期
+1132659da72,de2fd503c8f0e11dc35e54d5cd1db7b5,清勇8月
+1135505cb0b,ca07e8bd0096d7e7d5d64b1783bb564e,趣程24期
+115121c0a16,2205f214c6059cfafcd3d4add1396266,视频号1期
+115427564fc,a0daf4dcde1162b7e29d3435e8bce887,趣程27期
+11546155a6e,760be94ac75eab810d43383ac487b537,趣程28期
+115370b9ec8,7c0b0560eb83df6c2b3abeecebc3f8e9,清勇10月
+1161243bce8,377209133063eadebf713f497cc005d3,宋1期
+11604646e22,d50e6f2ccf81edc532618434eda9234c,廖1期
+106672e2105,0c3f3ab6d9a82fb515fe3dd906d4d96b,清勇

+ 0 - 0
dgp/tests/conf/account_list.ini


+ 0 - 35
dgp/tests/conf/db.ini

@@ -1,35 +0,0 @@
-;[pro]
-;# 数据库连接主机
-;host=rm-bp1c9cj79872tx3aaro.mysql.rds.aliyuncs.com
-;# 数据库端口号
-;port=3306
-;# 用户名
-;user=superc
-;# 密码
-;password=Cc719199895
-;# 数据库名称
-;database=quchen_text
-;# 数据库连接池最大连接数
-;maxconnections=20
-;# 数据库连接池最小缓存数
-;mincached=5
-;# 数据库连接池最大缓存数
-;maxcached=10
-
-[test]
-# 数据库连接主机
-host = localhost
-# 数据库端口号
-port = 3306
-# 用户名
-user = root
-# 密码
-password = root
-# 数据库名称
-database = quchen_text
-# 数据库连接池最大连接数
-maxconnections = 20
-# 数据库连接池最小缓存数
-mincached = 5
-# 数据库连接池最大缓存数
-maxcached = 10

+ 36 - 0
dgp/tests/conf/db_config.ini

@@ -0,0 +1,36 @@
+[mysql_config]
+# ------------------------- 注意这里是配置生产环境的MySQL信息 -------------------------
+# 数据库连接主机
+host=rm-bp1c9cj79872tx3aaro.mysql.rds.aliyuncs.com
+# 数据库端口号
+port=3306
+# 用户名
+user=superc
+# 密码
+password=Cc719199895
+# 数据库名称
+database=quchen_text
+# 数据库连接池最大连接数
+maxconnections=20
+# 数据库连接池最小缓存数
+mincached=5
+# 数据库连接池最大缓存数
+maxcached=10
+
+;[mysql_config]
+;# 数据库连接主机
+;host = localhost
+;# 数据库端口号
+;port = 3306
+;# 用户名
+;user = root
+;# 密码
+;password = root
+;# 数据库名称
+;database = quchen_text
+;# 数据库连接池最大连接数
+;maxconnections = 20
+;# 数据库连接池最小缓存数
+;mincached = 5
+;# 数据库连接池最大缓存数
+;maxcached = 10

+ 4 - 0
dgp/tests/demo/account_list_config.ini

@@ -0,0 +1,4 @@
+[IPS]
+123
+456
+789

+ 82 - 0
dgp/tests/demo/test.py

@@ -0,0 +1,82 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+__title__ = '测试类'
+
+@Time    : 2020/9/24 19:44
+@Author  : Kenny-PC
+@Software: PyCharm
+
+# code is far away from bugs with the god animal protecting
+    I love animals. They taste delicious.
+              ┏┓      ┏┓
+            ┏┛┻━━━┛┻┓
+            ┃      ☃      ┃
+            ┃  ┳┛  ┗┳  ┃
+            ┃      ┻      ┃
+            ┗━┓      ┏━┛
+                ┃      ┗━━━┓
+                ┃  神兽保佑    ┣┓
+                ┃ 永无BUG!   ┏┛
+                ┗┓┓┏━┳┓┏┛
+                  ┃┫┫  ┃┫┫
+                  ┗┻┛  ┗┻┛
+"""
+
+from util.LoggerService import LoggerService
+# import account_list as al
+from util import date_util
+
+
+def start_order_job(log):
+    log.info('start_order_job')
+
+
+start_order_time = '2020-09-21 16:05:00'
+start_cost_time = '2020-09-21 16:35:00'
+a = 10817
+
+if __name__ == '__main__':
+    log = LoggerService.logger_file('../test.log', 'abcd')
+
+    st_unix = date_util.getYesterdayStartTime()
+    et_unix = date_util.getTodayStartTime()
+
+    et_unix = 1601136000
+    et_unix = 1601139600
+
+    print(1.4)
+    print(int(1.4))
+    for i in range(int((et_unix - st_unix) // 86400)):
+        print('i', i)
+
+    for i in range((et_unix - st_unix) // 86400):
+        print('i', i)
+
+    # sql = "select * from quchen_text.order where date=1601136000 and platform = '悠书阁'"
+    # connect = MySQLConnection()
+    # try:
+    #     page = 1
+    #     size = 50
+    #     pagination = connect.listByPage(sql, page, size)
+    #     print(pagination)
+    # except Exception as e:
+    #     log.exception(e)
+    # finally:
+    #     # 关闭数据库连接
+    #     connect.close()
+
+    # scheduler = BlockingScheduler()
+    #
+    # #每天凌晨执行
+    # #start_job_time = '2020-09-26 03:05:00'
+    # # scheduler.add_job(start_all_job, 'interval', days=1, start_date=start_job_time)
+    #
+    # #每天凌晨3点到4点的30分钟都执行一次
+    # scheduler.add_job(start_all_job, 'cron', hour='3-4', minute='35')
+    #
+    # # 每10秒执行一次
+    # #scheduler.add_job(start_all_job, 'interval', seconds=2)
+    #
+    # scheduler.start()

+ 1 - 0
dgp/tests/test_pool.py → dgp/tests/demo/test_pool.py

@@ -23,6 +23,7 @@ __title__ = '线程池测试'
                   ┃┫┫  ┃┫┫
                   ┗┻┛  ┗┻┛
 """
+
 import os
 import random
 import time

+ 75 - 0
dgp/tests/demo/test_read_ini.py

@@ -0,0 +1,75 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+__title__ = '测试读取ini文件'
+
+@Time    : 2020/9/26 18:36
+@Author  : Kenny-PC
+@Software: PyCharm
+
+# code is far away from bugs with the god animal protecting
+    I love animals. They taste delicious.
+              ┏┓      ┏┓
+            ┏┛┻━━━┛┻┓
+            ┃      ☃      ┃
+            ┃  ┳┛  ┗┳  ┃
+            ┃      ┻      ┃
+            ┗━┓      ┏━┛
+                ┃      ┗━━━┓
+                ┃  神兽保佑    ┣┓
+                ┃ 永无BUG!   ┏┛
+                ┗┓┓┏━┳┓┏┛
+                  ┃┫┫  ┃┫┫
+                  ┗┻┛  ┗┻┛
+"""
+
+import math
+
+# 获取当前文件所在目录的上一级目录
+# parent_dir_path = os.path.dirname(os.path.abspath('../..'))
+# config_path = parent_dir_path + '/conf/account_list_config.ini'
+#
+# # 读取数据库配置信息
+# config = configparser.ConfigParser(allow_no_value=True) #注意参数不能省
+# config.read(config_path, encoding='UTF-8')
+#
+# print(config.items("IPS"))
+# print(type(config.items("IPS")))
+
+# print(10 // int(1000) + 1)
+# print(1000 // int(1000) + 1)
+# print(1001 // int(1000) + 1)
+import time
+from datetime import datetime
+
+dtime = datetime.strptime('2019-11-14 13:49:32', "%Y-%m-%d %H:%M:%S")
+dd = ((int(time.mktime(dtime.timetuple())) + 8 * 3600) // 86400) * 86400 - 8 * 3600
+print(dtime, int(time.mktime(dtime.timetuple())), type(dtime), dtime.timetuple)
+print(dd, type(dd))
+
+
+
+per_page = 1000
+total_count = 40
+page = 1
+# print(math.ceil(0 / int(per_page)))
+print(math.ceil(40 / int(per_page)))
+print(math.ceil(1000 / int(per_page)))
+parameter = int(page) > math.ceil(total_count / int(per_page))
+print(parameter)
+
+print(math.ceil(0 / 100))
+print(math.ceil(100 / 100))
+print(math.ceil(101 / 100))
+
+for i in range(5):
+    if 1 != 1:
+        items = [0, 1]
+    else:
+        print('掌中云本次请求数据为空')
+        items = []
+        continue
+    print('123345')
+    for item in items:
+        print(item)

+ 209 - 0
dgp/tests/get_order_dairly_qiyue.py

@@ -0,0 +1,209 @@
+
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# 20201120
+## 20201120新添加 七悦 平台接口
+## 七悦api接口地址 https://vip.zhangwenwenhua.com/uploads/attachments/open-api/open-api.pdf
+########################## 七悦订单接口,返回数据格式
+'''
+{'msg': 'ok', 'code': 0, 
+    'data': {
+        'current_page': 1, 
+        'data': [
+            {'id': 167100631495102464, 'money': 30, 'type': 1, 'state': 2, 'user_id': 101280121, 'channel_id': 14880, 'create_time': 1605062783, 'finish_time': 1605062790
+            , 'trade_no': '20201111104622_101280121_Ykhp', 'transaction_no': '4200000845202011115590974617', 'user_open_id': 'oxw0X6zGsL6dSX-Y8lsXMhPG1_cY'
+            , 'user_is_subscribe': 1, 'user_subscribe_time': 1605045625, 'user_create_time': 1605045625
+            , 'referral_url': 'https://wxaef9ff2c63776f6f.wenhuazw.com/index/book/chapter?book_id=10076083&sid=1007608300004&referral_id=727741'
+            , 'book_name': '我的超级老婆', 'book_keywords': '', 'wechat_app_id': 'wxaef9ff2c63776f6f', 'wechat_app_name': '炎兵文楼', 'channel_name': '炎兵文楼(趣程)'
+            , 'state_desc': '完成', 'type_desc': '书币充值'}
+            ,{...}]
+        ,'first_page_url': 'https://api.zhangwenwenhua.com/v1/orders?page=1'
+        , 'from': 1
+        , 'last_page': 1
+        , 'last_page_url': 'https://api.zhangwenwenhua.com/v1/orders?page=1'
+        , 'next_page_url': None
+        , 'path': 'https://api.zhangwenwenhua.com/v1/orders'
+        , 'per_page': '10'
+        , 'prev_page_url': None
+        , 'to': 5
+        , 'total': 5
+    }
+}
+'''
+#########################
+import time 
+import requests
+
+from concurrent.futures import ProcessPoolExecutor
+import requests
+from util import date_util
+from util import platform_config_util      ## 账号配置
+from util import robust_util
+from apscheduler.schedulers.blocking import BlockingScheduler
+from util.MySQLConnection import MySQLConnection
+
+
+def get_qiyue_account_list():
+    """
+    des cription:  七悦账号列表
+    return:       [['stage','token']] ->list
+    """
+    return platform_config_util.get_account_list('七悦', 'qiyue_account_config.csv')
+
+
+def get_qiyue_order_task(st,et,account):
+    order_list = ()
+    url_frequency = 1 
+    # 参数
+    order_url = "https://api.zhangwenwenhua.com" + "/v1/orders"
+    stage = account[0]
+    token = account[1]
+    page = 1
+    size = 50
+    
+    order_st_date = date_util.getSelfDateStr(int(st-86400),date_format='%Y-%m-%d')
+    for i in range((et-st)//86400 + 1):
+        statis_unix_time = et - (i+1)*86400
+        date = date_util.getSelfDateStr(statis_unix_time,date_format='%Y-%m-%d')
+
+        while True:
+            if st == et:
+                break
+
+            if url_frequency % 6 == 0 :
+                time.sleep(61)
+            url_frequency += 1   
+
+            timestamp = int(time.time())
+            url = order_url + "?" + "token=" + str(token) +"&timestamp=" + str(timestamp) +"&page=" + str(page) +"&size=" + str(size) +"&date=" + date
+            response_result_json = requests.get(url=url).json()
+
+            code = response_result_json['code']
+            if code != 0:
+                print(stage,'七悦充值接口异常:',response_result_json)
+                break
+
+            result_data = response_result_json['data']
+
+            total = result_data['total']
+            if total <= 0:
+                break
+
+
+            #total = result_data['total']
+            #last_page2 = int(total//size)+1
+            last_page = result_data['last_page']
+            order_item_list = result_data['data']
+            for x in order_item_list: 
+                if int(x['state']) != 2:
+                    continue  
+                y={}
+                y['date'] = (int(x['finish_time'])+ 8 * 3600) // 86400 * 86400 - 8 * 3600 
+                y['platform'] = '七悦'
+                y['channel'] = x['wechat_app_name']      ## 公众号名称
+                y['channel_id'] = x['channel_id']     ## 公众号id
+                y['from_novel'] = x['book_name']         ## 小说名称
+                y['user_id'] = x['user_id']              ## 付费用户uid 
+                y['stage'] = stage                       ## 期数
+                createTime = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(x['create_time'])) 
+                y['order_time']= createTime              ## 订单生成时间
+                y['amount']=x['money']               ## 原数据单位:元 
+                uid_reg_time = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(x['user_create_time'])) 
+                y['reg_time']= uid_reg_time              ## 用户注册时间
+                y['order_id']= x['id']                   ## 订单id
+
+                y = sorted(y.items(), key=lambda item:item[0])
+                y = dict(y)
+                y = tuple(y.values())
+                order_list = order_list+((y),)
+            '''
+            if page == last_page:
+                break
+            page += 1
+            '''
+            next_page_url = result_data['next_page_url']
+            if next_page_url is None:
+                break
+            page += 1
+
+    print(f"数据日期-{order_st_date}到{date}-期数-{stage}-获取数据-{len(order_list)}条,例如: {order_list[0:1]}")
+    return order_list
+
+
+@robust_util.catch_exception
+def get_qiyue_order(st,et,account_list):
+    total_order_list = ()
+    start_exec_seconds = date_util.getCurrentSecondTime()
+    #account_list = get_qiyue_account_list()
+
+    executor = ProcessPoolExecutor(max_workers=5)
+
+    futures = []
+    for account in account_list:
+        future = executor.submit(get_qiyue_order_task, st, et, account)
+        futures.append(future)
+
+    executor.shutdown(True)
+
+    for future in futures:
+        order_list = future.result()
+        if len(order_list) > 0:
+            total_order_list = order_list + total_order_list
+
+    print('七悦订单数量:', len(total_order_list), '执行时长(秒):', date_util.getCurrentSecondTime() - start_exec_seconds)
+    return total_order_list
+
+
+def batch_save_order(data):
+    if data is None or len(data) == 0:
+        print('数据为空,不执行数据库操作!')
+    else:
+        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);'
+        connect = MySQLConnection()
+        try:
+            num = connect.batch(sql, data)
+            # 提交
+            connect.commit()
+            print('订单数据最终入库【{num}】条'.format(num=num))
+        except Exception as e:
+            print('订单数据入库失败:', e)
+        finally:
+            connect.close()
+
+
+def start_order_job():
+    start_exec_seconds = date_util.getCurrentSecondTime()
+    #st_unix, et_unix = date_util.getPreviousHourAndCurrentHourSecondTime(start_exec_seconds)
+    # st_unix = 1602313200  # 2020/10/10 15:0:0
+    # et_unix = 1602316800  # 2020/10/10 16:0:0
+    #print('查询开始时间:', st_unix, date_util.getSecondsToDatetime(st_unix))
+    #print('查询结束时间:', et_unix, date_util.getSecondsToDatetime(et_unix))
+    ## 20201105添加文鼎平台
+    st_unix = date_util.getYesterdayStartTime()
+    et_unix = date_util.getTodayStartTime()
+    st_unix = et_unix - 60
+    account_list = get_qiyue_account_list()
+    '''
+    ## 2个账户测试看看
+    account_list = [
+        ['趣程26期','eyJpdiI6IlBjV0Z4aVlWNWFUemczdWt5Y0R1QXc9PSIsInZhbHVlIjoiOHZtZUw1Q2RuVnRYd0p1M01WSWoxZz09IiwibWFjIjoiMDE2Mzk5NDFkMDkwZTBmNzU2ZWNmMWMxMzk5YWYwMWIwZmRmZjYzMTgyZDRjYTVkZGY1ZGI5ZGQxNjYyMGRiMSJ9']
+        ,['趣程27期','eyJpdiI6IithdDArQ2hhazlxVXJKUXIzK01PQXc9PSIsInZhbHVlIjoiMjAyTEtNOUI2TlkwdklJXC9tNHgwc1E9PSIsIm1hYyI6IjA0YjE0Mjc1MWJjN2VlYmViNWM3YTRiNmI0ZDE5M2QyMDJhMGU3NjRlNTQ4MTliYTgwMzg0ZDNjYmUwY2ZmNWEifQ==']
+    ]
+    '''
+    batch_save_order(get_qiyue_order(st_unix,et_unix,account_list))
+    print('订单同步执行时间(秒):', date_util.getCurrentSecondTime() - start_exec_seconds)
+
+
+
+#start_job_time = '2020-11-20 02:00:00'
+if __name__ == '__main__':
+    scheduler = BlockingScheduler()
+    #scheduler.add_job(start_order_job, 'interval', days =1 ,start_date=start_job_time)
+    scheduler.add_job(start_order_job,'cron',hour ="02",minute="25")
+    scheduler.start()
+
+
+
+
+
+

+ 337 - 0
dgp/tests/get_order_dairly_wending.py

@@ -0,0 +1,337 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# 20201104
+## 20201106新添加 文鼎 平台接口
+########################## 文鼎订单接口,返回数据格式
+'''
+{
+  "code": 200,
+  "data": {
+    "totalPage": 1,
+    "rechargeList": [
+      {
+        "userId": 1067,
+        "nickName": "海洁测试!",
+        "userFollowTime": 1512717067449,
+        "wx_originalId": "gh_3f1fc031329d",
+        "wx_mpName": "测试公众号",
+        "wx_user_openId": "odjo61rGnt6Sgl6CeWhPZTfve7eA",
+        "rechargeUuid": "1fd47b51-1256-43ce-a72d-3266e23235ba",
+        "rechargeMethod": 1,
+        "money": 100,
+        "createTime": 1512717069449,
+        "payStatus": 0
+      },
+    ]
+'''
+########################## 
+
+import hashlib
+import time  
+import datetime
+
+from concurrent.futures import ProcessPoolExecutor
+import requests
+from util import date_util
+from util import platform_config_util      ## 账号配置
+from util import robust_util
+from apscheduler.schedulers.blocking import BlockingScheduler
+from util.MySQLConnection import MySQLConnection
+
+#import random
+#import math
+#from urllib import parse
+
+
+def md5(s):
+    md5 = hashlib.md5()
+    md5.update(s.encode("utf-8"))
+    return md5.hexdigest()
+
+
+def getSelfDateStr(times=time.time(),date_format='%Y%m%d'):
+    """
+    ## 20201028添加,阳光接口,文鼎接口,日期参数请求格式20201028,一日一拉api数据
+    description:  获取指定时间戳
+    time:         秒 默认当前时间
+    return:       返回指定时间戳的前一日日期 。 比如 :接收20190512号的时间戳,返回 20190513 -> str
+    tips:         一天86400秒
+    """
+    timestamps = str(time.strftime(date_format,time.localtime(times)))
+    return timestamps
+
+
+def get_wending_account_list():
+    """
+    des cription:  文鼎账号列表
+    return:       [['consumerkey', 'secretkey', 'siteid', 'stage', 'account']] ->list
+    """
+    return platform_config_util.get_account_list('文鼎', 'wending_account_config.csv')
+
+
+## 5线程并发
+@robust_util.catch_exception
+def get_wending_order(st,et,account_list):
+    total_order_list = ()
+    start_exec_seconds = date_util.getCurrentSecondTime()
+    #account_list = get_wending_account_list()
+
+    executor = ProcessPoolExecutor(max_workers=5)
+
+    futures = []
+    for account in account_list:
+        future = executor.submit(get_wending_order_task, st, et, account)
+        futures.append(future)
+
+    executor.shutdown(True)
+
+    for future in futures:
+        order_list = future.result()
+        if len(order_list) > 0:
+            total_order_list = order_list + total_order_list
+
+    print('文鼎订单数量:', len(total_order_list), '执行时长(秒):', date_util.getCurrentSecondTime() - start_exec_seconds)
+    return total_order_list
+
+
+## 获取文鼎账号的站点list
+def get_wd_account_siteid_list(account):
+  url = 'https://bi.reading.163.com/dist-api/siteList'
+
+  consumerkey = account[0] 
+  secretkey = account[1] 
+  stage = account[3]
+  timestamp = int(time.time()*1000)
+  
+  judge = True
+  while judge:
+    siteid_params = {
+        "consumerkey":consumerkey,
+        'secretkey':secretkey,
+        'timestamp':timestamp,
+    }
+    sorted_data = sorted(siteid_params.items(),reverse = False) 
+    s=""
+    for k,v in sorted_data:
+        s = s+str(k)+"="+str(v)
+    sign = md5(s).lower()
+    siteid_params['sign'] = sign
+
+    consumerkey = siteid_params['consumerkey']
+    timestamp = siteid_params['timestamp']
+    #secretkey = siteid_params['secretkey'] 
+    parameter = 'consumerkey='+str(consumerkey)+'&timestamp='+str(timestamp)+'&sign='+str(sign)
+    get_url = url+"?"+parameter
+    response_result_json = requests.get(url=get_url).json()
+    '''
+    站点json返回格式如下
+    {'code': 200, 'data': [
+        {'mpId': 1023064, 'mpName': '流云书楼', 'siteList': [{'id': 1023064, 'domain': 'lysl1.reading.163.com', 'name': '流云书楼', 'fileKey': 'Pld5F38EmbmeD1pV'}]}, 
+        {'mpId': 1025058, 'mpName': '骁骑文选', 'siteList': [{'id': 1025058, 'domain': 'xqwx.reading.163.com', 'name': '骁骑文选', 'fileKey': 'ODUXIVk3Y5vKM59d'}]}
+    ], 'message': 'success'}
+    '''
+    code = response_result_json['code']
+    if code != 200:
+      print( stage,'文鼎siteid站点接口异常:',response_result_json,'传入参数', siteid_params,"请求url",get_url)
+      break
+
+    #print('返回结果:',response_result_json)
+    id_key_list = response_result_json['data']
+
+    mpid_list = []
+    try:
+      for id_key_val in id_key_list:
+          mpid = dict(id_key_val)["mpId"]
+          mpid_list.append(mpid)
+    except Exception as e:
+        print(stage,'站点查询返回结果:',response_result_json)
+
+    judge = False
+
+  print(stage,'文鼎siteid列表:',mpid_list)
+  return mpid_list
+
+
+## 根据url,传入params获取json对象
+def get_wending_json_object(url,params):
+  params['timestamp'] = int(time.time()*1000)
+
+  sorted_data = sorted(params.items(),reverse = False) 
+  s=""
+  for k,v in sorted_data:
+      s = s+str(k)+"="+str(v)
+  sign = md5(s).lower()
+  params['sign'] = sign
+
+  consumerkey = params['consumerkey']
+  secretkey = params['secretkey']
+  timestamp = params['timestamp']
+  siteid = params['siteid']
+  pageSize = params['pageSize'] 
+  starttime = params['starttime']
+  endtime = params['endtime']
+  page = params['page']
+  paystatus = params['paystatus']  
+  ## +'&secretkey='+str(secretkey)
+  parameter = 'consumerkey='+str(consumerkey)+'&timestamp='+str(timestamp)+'&siteid='+str(siteid)+'&pageSize='+str(pageSize)\
+              +'&starttime='+str(starttime)+'&endtime='+str(endtime)+'&page='+str(page)+'&paystatus='+str(paystatus)+'&sign='+str(sign)
+  global get_url
+  get_url = url+"?"+parameter
+  response_result_json = requests.get(url=get_url).json()
+  #response_result_json = requests.get(url=url, params=params).json()
+
+  del params['sign']
+  return response_result_json
+
+
+## 具体文鼎任务
+def get_wending_order_task(st,et,account):
+  order_list = ()
+  url = 'https://bi.reading.163.com/dist-api/rechargeList'
+  ## 接口鉴权参数
+  consumerkey = account[0] 
+  secretkey = account[1]
+  ## 订单参数
+  siteid = account[2]
+  pageSize = 1000 
+  page = 1
+  paystatus = 1 
+  ## 需要保存到订单的标签期数
+  stage = account[3]
+
+  jud = True
+  while jud:
+    if st >= et:
+        break
+    starttime = getSelfDateStr(st,'%Y%m%d%H%M')
+    endtime = getSelfDateStr(et,'%Y%m%d%H%M') 
+
+    siteid_list = get_wd_account_siteid_list(account)
+    if len(siteid_list) == 0:
+      break
+
+    for siteid in siteid_list:
+      params = {
+        'consumerkey': consumerkey,
+        'secretkey':secretkey,
+        'timestamp':int(1601481600),
+        'siteid':siteid,
+        'pageSize':pageSize, 
+        'starttime':starttime,
+        'endtime':endtime,
+        'page':page,
+        'paystatus':paystatus  
+      }
+      response_result_json = get_wending_json_object(url,params)
+
+      code = response_result_json['code']
+      if code != 200:
+        print('文鼎查询充值接口异常:',response_result_json,'传入参数', params,"请求url",get_url)
+        break
+      
+      totalPag = response_result_json['data']['totalPage']
+      if totalPag <= 0:
+        break
+
+      for page in range(1,totalPag+1):
+        params['page'] = page
+        response_result_json = get_wending_json_object(url,params)
+        order_item_list = response_result_json['data']['rechargeList']
+        '''
+        print(order_item_list)
+        [{
+          'userId': 48267585, 'userRegisterTime': 1568671618894, 'nickName': '\ue04a邓泽群\ue04a爱花园', 'ip': '124.13.64.179'
+          , 'userAgent': 'Mozilla/5.0 (Linux; Android 9; /arm64'
+          , 'userFollowTime': 1568671618894, 'wx_originalId': 'gh_0beeff4c0d70', 'wx_mpName': '美语阅读', 'wx_user_openId': 'oWL046E86PdO9wX34naL6IIwfaVc'
+          , 'rechargeUuid': '38fc210f-8e7d-4ae5-a395-d33c2a80e234', 'sourceUuid': 'ts_b4651ee782e94cce8fc6def301de1367_4', 'bookTitle': '绝代医相'
+          , 'ewTradeId': '4200000687202010012870758048', 'payTime': 1601565287000, 'rechargeMethod': 1, 'money': 2900, 'createTime': 1601565278043
+          , 'updateTime': 1601565288057, 'payStatus': 1
+        }]
+        '''
+        ## 获取该页数据
+        for x in order_item_list:
+            y={}
+            y['date'] = (int(x['payTime']//1000)+ 8 * 3600) // 86400 * 86400 - 8 * 3600    ## 网易的是13位时间戳
+            y['platform'] = '文鼎'
+            y['channel'] = x['wx_mpName']            ## 公众号名称
+            y['channel_id'] = x['wx_originalId']     ## 公众号id
+            y['from_novel'] = x['bookTitle']         ## 小说名称
+            y['user_id'] = x['userId']               ## 付费用户uid 
+            y['stage'] = stage                       ## 期数
+            createTime = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(x['createTime']//1000))  ## 时间戳 》struct_time 》标准时间
+            y['order_time']= createTime              ## 订单生成时间
+            y['amount']=x['money']/100               ## 原数据单位:分 
+            uid_reg_time = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(x['userRegisterTime']//1000))     ## 13位时间戳 》标准时间
+            y['reg_time']= uid_reg_time              ## 用户注册时间
+            y['order_id']= x['ewTradeId']            ## 订单id
+
+            y = sorted(y.items(), key=lambda item:item[0])
+            y = dict(y)
+            y = tuple(y.values())
+            order_list = order_list+((y),)
+
+        if totalPag==params['page']:
+          break
+
+    jud = False
+  print(f"文鼎数据日期-{starttime}到{endtime}-期数-{stage}-获取数据-{len(order_list)}条,例如》{order_list[0:1]}")
+  return order_list     
+
+
+def batch_save_order(data):
+    if data is None or len(data) == 0:
+        print('数据为空,不执行数据库操作!')
+    else:
+        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);'
+        connect = MySQLConnection()
+        try:
+            num = connect.batch(sql, data)
+            # 提交
+            connect.commit()
+            print('订单数据最终入库【{num}】条'.format(num=num))
+        except Exception as e:
+            print('订单数据入库失败:', e)
+        finally:
+            connect.close()
+
+
+def start_order_job():
+    start_exec_seconds = date_util.getCurrentSecondTime()
+    #st_unix, et_unix = date_util.getPreviousHourAndCurrentHourSecondTime(start_exec_seconds)
+    # st_unix = 1602313200  # 2020/10/10 15:0:0
+    # et_unix = 1602316800  # 2020/10/10 16:0:0
+    #print('查询开始时间:', st_unix, date_util.getSecondsToDatetime(st_unix))
+    #print('查询结束时间:', et_unix, date_util.getSecondsToDatetime(et_unix))
+    ## 20201105添加文鼎平台
+    st_unix = date_util.getYesterdayStartTime()
+    et_unix = date_util.getTodayStartTime()
+    account_list = get_wending_account_list()
+    '''
+    ## 2个账户测试看看
+    account_list = [ 
+      ['68442881','RFygHhX16LEYYe8i','1014108','趣程20期','qucheng20qi@163.com'],
+      ['77257999','86nPtJdYLe1k81gE','1021116','趣程21期','qucheng21qi@163.com']
+    ]
+    '''
+    batch_save_order(get_wending_order(st_unix, et_unix,account_list))
+    print('订单同步执行时间(秒):', date_util.getCurrentSecondTime() - start_exec_seconds)
+
+
+start_job_time = '2020-11-11 02:00:00'
+if __name__ == '__main__':
+    scheduler = BlockingScheduler()
+    scheduler.add_job(start_order_job, 'interval', days =1 ,start_date=start_job_time)
+    #scheduler.add_job(start_order_job, 'interval',days =1,hours = 2,minutes = 0,seconds = 0)
+    #线上是24h执行一次
+    scheduler.start()
+'''
+if __name__ == '__main__':
+  start_order_job()
+
+
+account_list = [ 
+  ['11790115','VjVIGRX5YgJCGQjC','1023064','趣程15期','qucheng15qi@163.com'],
+  ['50465587','E5D1qzGtmhbx5EAS','1025020','趣程24期','qucheng24qi@163.com'],
+  ['77257999','86nPtJdYLe1k81gE','1021116','趣程21期','qucheng21qi@163.com']
+]
+'''

+ 341 - 0
dgp/tests/get_order_dairly_wending_bk20201110.py

@@ -0,0 +1,341 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# 20201104
+## 20201106新添加 文鼎 平台接口
+########################## 文鼎订单接口,返回数据格式
+'''
+{
+  "code": 200,
+  "data": {
+    "totalPage": 1,
+    "rechargeList": [
+      {
+        "userId": 1067,
+        "nickName": "海洁测试!",
+        "userFollowTime": 1512717067449,
+        "wx_originalId": "gh_3f1fc031329d",
+        "wx_mpName": "测试公众号",
+        "wx_user_openId": "odjo61rGnt6Sgl6CeWhPZTfve7eA",
+        "rechargeUuid": "1fd47b51-1256-43ce-a72d-3266e23235ba",
+        "rechargeMethod": 1,
+        "money": 100,
+        "createTime": 1512717069449,
+        "payStatus": 0
+      },
+    ]
+'''
+########################## 
+
+import hashlib
+import time  
+import datetime
+
+from concurrent.futures import ProcessPoolExecutor
+import requests
+from util import date_util
+from util import platform_config_util      ## 账号配置
+from util import robust_util
+from apscheduler.schedulers.blocking import BlockingScheduler
+from util.MySQLConnection import MySQLConnection
+
+#import random
+#import math
+#from urllib import parse
+
+
+def md5(s):
+    md5 = hashlib.md5()
+    md5.update(s.encode("utf-8"))
+    return md5.hexdigest()
+
+
+def getSelfDateStr(times=time.time(),date_format='%Y%m%d'):
+    """
+    ## 20201028添加,阳光接口,文鼎接口,日期参数请求格式20201028,一日一拉api数据
+    description:  获取指定时间戳
+    time:         秒 默认当前时间
+    return:       返回指定时间戳的前一日日期 。 比如 :接收20190512号的时间戳,返回 20190513 -> str
+    tips:         一天86400秒
+    """
+    timestamps = str(time.strftime(date_format,time.localtime(times)))
+    return timestamps
+
+
+def get_wending_account_list():
+    """
+    des cription:  文鼎账号列表
+    return:       [['consumerkey', 'secretkey', 'siteid', 'stage', 'account']] ->list
+    """
+    return platform_config_util.get_account_list('文鼎', 'wending_account_config.csv')
+
+
+## 5线程并发
+@robust_util.catch_exception
+def get_wending_order(st,et):
+    total_order_list = ()
+    start_exec_seconds = date_util.getCurrentSecondTime()
+    account_list = get_wending_account_list()
+    '''
+    ## 2个账户测试看看
+    account_list = [ 
+      ['68442881','RFygHhX16LEYYe8i','1014108','趣程20期','qucheng20qi@163.com'],
+      ['77257999','86nPtJdYLe1k81gE','1021116','趣程21期','qucheng21qi@163.com']
+    ]
+    '''
+    executor = ProcessPoolExecutor(max_workers=5)
+
+    futures = []
+    for account in account_list:
+        future = executor.submit(get_wending_order_task, st, et, account)
+        futures.append(future)
+
+    executor.shutdown(True)
+
+    for future in futures:
+        order_list = future.result()
+        if len(order_list) > 0:
+            total_order_list = order_list + total_order_list
+
+    print('文鼎订单数量:', len(total_order_list), '执行时长(秒):', date_util.getCurrentSecondTime() - start_exec_seconds)
+    return total_order_list
+
+
+## 获取文鼎账号的站点list
+def get_wd_account_siteid_list(account):
+  url = 'https://bi.reading.163.com/dist-api/siteList'
+
+  consumerkey = account[0] 
+  secretkey = account[1] 
+  stage = account[3]
+  timestamp = int(time.time()*1000)
+  
+  judge = True
+  while judge:
+    siteid_params = {
+        "consumerkey":consumerkey,
+        'secretkey':secretkey,
+        'timestamp':timestamp,
+    }
+    sorted_data = sorted(siteid_params.items(),reverse = False) 
+    s=""
+    for k,v in sorted_data:
+        s = s+str(k)+"="+str(v)
+    sign = md5(s).lower()
+    siteid_params['sign'] = sign
+
+    consumerkey = siteid_params['consumerkey']
+    timestamp = siteid_params['timestamp']
+    #secretkey = siteid_params['secretkey'] 
+    parameter = 'consumerkey='+str(consumerkey)+'&timestamp='+str(timestamp)+'&sign='+str(sign)
+    get_url = url+"?"+parameter
+    response_result_json = requests.get(url=get_url).json()
+    '''
+    站点json返回格式如下
+    {'code': 200, 'data': [
+        {'mpId': 1023064, 'mpName': '流云书楼', 'siteList': [{'id': 1023064, 'domain': 'lysl1.reading.163.com', 'name': '流云书楼', 'fileKey': 'Pld5F38EmbmeD1pV'}]}, 
+        {'mpId': 1025058, 'mpName': '骁骑文选', 'siteList': [{'id': 1025058, 'domain': 'xqwx.reading.163.com', 'name': '骁骑文选', 'fileKey': 'ODUXIVk3Y5vKM59d'}]}
+    ], 'message': 'success'}
+    '''
+    code = response_result_json['code']
+    if code != 200:
+      print( stage,'文鼎siteid站点接口异常:',response_result_json,'传入参数', siteid_params,"请求url",get_url)
+      break
+
+    #print('返回结果:',response_result_json)
+    id_key_list = response_result_json['data']
+
+    mpid_list = []
+    try:
+      for id_key_val in id_key_list:
+          mpid = dict(id_key_val)["mpId"]
+          mpid_list.append(mpid)
+    except Exception as e:
+        print(stage,'站点查询返回结果:',response_result_json)
+
+    judge = False
+
+  print(stage,'文鼎siteid列表:',mpid_list)
+  return mpid_list
+
+
+## 根据url,传入params获取json对象
+def get_wending_json_object(url,params):
+  params['timestamp'] = int(time.time()*1000)
+
+  sorted_data = sorted(params.items(),reverse = False) 
+  s=""
+  for k,v in sorted_data:
+      s = s+str(k)+"="+str(v)
+  sign = md5(s).lower()
+  params['sign'] = sign
+
+  consumerkey = params['consumerkey']
+  secretkey = params['secretkey']
+  timestamp = params['timestamp']
+  siteid = params['siteid']
+  pageSize = params['pageSize'] 
+  starttime = params['starttime']
+  endtime = params['endtime']
+  page = params['page']
+  paystatus = params['paystatus']  
+  ## +'&secretkey='+str(secretkey)
+  parameter = 'consumerkey='+str(consumerkey)+'&timestamp='+str(timestamp)+'&siteid='+str(siteid)+'&pageSize='+str(pageSize)\
+              +'&starttime='+str(starttime)+'&endtime='+str(endtime)+'&page='+str(page)+'&paystatus='+str(paystatus)+'&sign='+str(sign)
+  global get_url
+  get_url = url+"?"+parameter
+  response_result_json = requests.get(url=get_url).json()
+  #response_result_json = requests.get(url=url, params=params).json()
+
+  del params['sign']
+  return response_result_json
+
+
+## 具体文鼎任务
+def get_wending_order_task(st,et,account):
+  order_list = ()
+  url = 'https://bi.reading.163.com/dist-api/rechargeList'
+  ## 接口鉴权参数
+  consumerkey = account[0] 
+  secretkey = account[1]
+  ## 订单参数
+  siteid = account[2]
+  pageSize = 1000 
+  page = 1
+  paystatus = 1 
+  ## 需要保存到订单的标签期数
+  stage = account[3]
+
+  jud = True
+  while jud:
+    if st >= et:
+        break
+    starttime = getSelfDateStr(st,'%Y%m%d%H%M')
+    endtime = getSelfDateStr(et,'%Y%m%d%H%M') 
+
+    siteid_list = get_wd_account_siteid_list(account)
+    if len(siteid_list) == 0:
+      break
+
+    for siteid in siteid_list:
+      params = {
+        'consumerkey': consumerkey,
+        'secretkey':secretkey,
+        'timestamp':int(1601481600),
+        'siteid':siteid,
+        'pageSize':pageSize, 
+        'starttime':starttime,
+        'endtime':endtime,
+        'page':page,
+        'paystatus':paystatus  
+      }
+      response_result_json = get_wending_json_object(url,params)
+
+      code = response_result_json['code']
+      if code != 200:
+        print('文鼎查询充值接口异常:',response_result_json,'传入参数', params,"请求url",get_url)
+        break
+      
+      totalPag = response_result_json['data']['totalPage']
+      if totalPag <= 0:
+        break
+
+      for page in range(1,totalPag+1):
+        params['page'] = page
+        response_result_json = get_wending_json_object(url,params)
+        order_item_list = response_result_json['data']['rechargeList']
+        '''
+        print(order_item_list)
+        [{
+          'userId': 48267585, 'userRegisterTime': 1568671618894, 'nickName': '\ue04a邓泽群\ue04a爱花园', 'ip': '124.13.64.179'
+          , 'userAgent': 'Mozilla/5.0 (Linux; Android 9; /arm64'
+          , 'userFollowTime': 1568671618894, 'wx_originalId': 'gh_0beeff4c0d70', 'wx_mpName': '美语阅读', 'wx_user_openId': 'oWL046E86PdO9wX34naL6IIwfaVc'
+          , 'rechargeUuid': '38fc210f-8e7d-4ae5-a395-d33c2a80e234', 'sourceUuid': 'ts_b4651ee782e94cce8fc6def301de1367_4', 'bookTitle': '绝代医相'
+          , 'ewTradeId': '4200000687202010012870758048', 'payTime': 1601565287000, 'rechargeMethod': 1, 'money': 2900, 'createTime': 1601565278043
+          , 'updateTime': 1601565288057, 'payStatus': 1
+        }]
+        '''
+        ## 获取该页数据
+        for x in order_item_list:
+            y={}
+            y['date'] = (int(x['payTime']//1000)+ 8 * 3600) // 86400 * 86400 - 8 * 3600    ## 网易的是13位时间戳
+            y['platform'] = '文鼎'
+            y['channel'] = x['wx_mpName']            ## 公众号名称
+            y['channel_id'] = x['wx_originalId']     ## 公众号id
+            y['from_novel'] = x['bookTitle']         ## 小说名称
+            y['user_id'] = x['userId']               ## 付费用户uid 
+            y['stage'] = stage                       ## 期数
+            createTime = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(x['createTime']//1000))  ## 时间戳 》struct_time 》标准时间
+            y['order_time']= createTime              ## 订单生成时间
+            y['amount']=x['money']/100               ## 原数据单位:分 
+            uid_reg_time = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(x['userRegisterTime']//1000))     ## 13位时间戳 》标准时间
+            y['reg_time']= uid_reg_time              ## 用户注册时间
+            y['order_id']= x['ewTradeId']            ## 订单id
+
+            y = sorted(y.items(), key=lambda item:item[0])
+            y = dict(y)
+            y = tuple(y.values())
+            order_list = order_list+((y),)
+
+        if totalPag==params['page']:
+          break
+
+    jud = False
+  print(f"文鼎数据日期-{starttime}到{endtime}-期数-{stage}-获取数据-{len(order_list)}条,例如》{order_list[0:1]}")
+  return order_list     
+
+
+def batch_save_order(data):
+    if data is None or len(data) == 0:
+        print('数据为空,不执行数据库操作!')
+    else:
+        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);'
+        connect = MySQLConnection()
+        try:
+            num = connect.batch(sql, data)
+            # 提交
+            connect.commit()
+            print('订单数据最终入库【{num}】条'.format(num=num))
+        except Exception as e:
+            print('订单数据入库失败:', e)
+        finally:
+            connect.close()
+
+
+def start_order_job():
+    start_exec_seconds = date_util.getCurrentSecondTime()
+    #st_unix, et_unix = date_util.getPreviousHourAndCurrentHourSecondTime(start_exec_seconds)
+    # st_unix = 1602313200  # 2020/10/10 15:0:0
+    # et_unix = 1602316800  # 2020/10/10 16:0:0
+    #print('查询开始时间:', st_unix, date_util.getSecondsToDatetime(st_unix))
+    #print('查询结束时间:', et_unix, date_util.getSecondsToDatetime(et_unix))
+    ## 20201028添加阳光平台
+    st_unix = date_util.getYesterdayStartTime()
+    et_unix = date_util.getTodayStartTime()
+    batch_save_order(get_wending_order(st_unix, et_unix))
+    print('订单同步执行时间(秒):', date_util.getCurrentSecondTime() - start_exec_seconds)
+
+
+
+start_job_time = '2020-11-07 02:00:00'
+if __name__ == '__main__':
+    scheduler = BlockingScheduler()
+    scheduler.add_job(start_order_job, 'interval', days =1 ,start_date=start_job_time)
+    #scheduler.add_job(start_order_job, 'interval',days =1,hours = 2,minutes = 0,seconds = 0)
+    #线上是24h执行一次
+    scheduler.start()
+
+
+'''
+
+if __name__ == '__main__':
+  start_order_job()
+
+
+account_list = [ 
+  ['11790115','VjVIGRX5YgJCGQjC','1023064','趣程15期','qucheng15qi@163.com'],
+  ['50465587','E5D1qzGtmhbx5EAS','1025020','趣程24期','qucheng24qi@163.com'],
+  ['77257999','86nPtJdYLe1k81gE','1021116','趣程21期','qucheng21qi@163.com']
+]
+for account in account_list:
+  get_wending_order_task(st=int(1604505600),et=int(1604592000),account=account)
+'''

+ 252 - 0
dgp/tests/get_order_dairly_yangguang.py

@@ -0,0 +1,252 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# 20201028
+
+## 20201027新添加 阳光 平台接口
+########################## 阳光接口返回数据格式
+'''
+{
+"error_code": 0,             ## 错误码      0 成功
+"error_msg": "",             ## 错误信息
+"data":{                     ## 数据内容
+    "last_id": 1,                 ## 最后一条数据的 ID 请求下一页数据时进行传递
+    "count": 500,                 ## 此次查询数据量
+    "push_time": 1570701536,      ## 返回时间戳
+    "list": [                     ## 数据列表
+        {
+        "merchant_id": "20180627151621_1_UdyF",                   ## 商户订单号
+        "transaction_id": "4200000122201806277014647642",         ## 交易单号
+        "type": "1",                        ##  订单类型,'1'=>书币充值 '2'=>VIP 充值
+        "money": "50",                      ##  总额
+        "state": "1",                       ##  订单状态,'0'=>未完成 '1' => 完成
+        "from": "0",                        ##  
+        "create_time": "1530083789",        ##  下单时间
+        "finish_time": "1530083789",        ##  完成时间
+        "book_name": "一品邪少",             ##  书名
+        "book_tags": "现代都市",             ## 
+        "referral_url": "/t/392109",        ##  推广链接
+        "user_id": "112333",                ##  用户 id
+        "channel_id": "1231"                ##  渠道 id
+        user_createtime                     ##  用户注册时间
+        openid                              ##  用户 openid
+        },
+    ]
+'''
+########################## 
+
+import random
+import datetime
+import hashlib
+import math
+import time
+from concurrent.futures import ProcessPoolExecutor
+from urllib import parse
+import requests
+from util import date_util
+from util import platform_config_util      ## 账号配置
+from util import robust_util
+from apscheduler.schedulers.blocking import BlockingScheduler
+from util.MySQLConnection import MySQLConnection
+
+
+def md5(s):
+    md5 = hashlib.md5()
+    md5.update(s.encode("utf-8"))
+    return md5.hexdigest()
+
+
+def sha1(s):
+    sha1 = hashlib.sha1()
+    sha1.update(s.encode("utf-8"))
+    return sha1.hexdigest()
+
+
+def get_random_str(num=5):
+    H = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
+    salt = ''
+    for i in range(num):
+        salt += random.choice(H)
+    return salt
+
+
+def getSelfDateStr(times=time.time(),date_format='%Y%m%d'):
+    """
+    ## 20201028添加,阳光接口,日期参数请求格式20201028,一日一拉api数据
+    description:  获取指定时间戳
+    time:         秒 默认当前时间
+    return:       返回指定时间戳的前一日日期 。 比如 :接收20190512号的时间戳,返回 20190513 -> str
+    tips:         一天86400秒
+    """
+    timestamps = str(time.strftime(date_format,time.localtime(times)))
+    return timestamps
+
+
+def get_yangguang_account_list():
+    """
+    des cription:  阳光账号列表
+    return:       [['host_name', 'channel_id', 'secert_key', 'channel', 'stage']] ->list
+    """
+    return platform_config_util.get_account_list('阳光', 'yangguang_account_config.csv')
+
+
+@robust_util.catch_exception
+def get_yangguang_order(st,et,account_list):
+    total_order_list = ()
+    start_exec_seconds = date_util.getCurrentSecondTime()
+    #account_list = get_yangguang_account_list()
+
+    executor = ProcessPoolExecutor(max_workers=5)
+
+    futures = []
+    for account in account_list:
+        future = executor.submit(get_yangguang_order_task, st, et, account)
+        futures.append(future)
+
+    executor.shutdown(True)
+
+    for future in futures:
+        order_list = future.result()
+        if len(order_list) > 0:
+            total_order_list = order_list + total_order_list
+
+    print('阳光订单数量:', len(total_order_list), '执行时长(秒):', date_util.getCurrentSecondTime() - start_exec_seconds)
+    return total_order_list
+
+
+def get_yangguang_order_task(st,et,account):
+    order_list = ()
+    url = 'https://api.yifengaf.cn:443/api/channeldataapi/orders'
+    url_frequency = 0 
+    ##接口鉴权参数
+    client_id =  account[0]     
+    token =  account[1]
+    ##订单接口参数必填
+    channel_id = account[3] 
+    ##需要保存的参数
+    stage = account[2]
+    channel = account[4]
+
+    order_st_date = date_util.getSelfDateStr(int(st-86400),date_format='%Y-%m-%d')
+    for i in range((et-st)//86400 + 1):
+        last_id = 111
+        statis_unix_time = st + (i-1)*86400
+        search_date = getSelfDateStr(statis_unix_time,"%Y%m%d")
+
+        while True:
+            if st == et:
+                break
+            
+            if url_frequency % 3 == 0 :
+                time.sleep(61)
+            url_frequency += 1    
+            
+            nonce = get_random_str()
+            timestamp = int(time.time())
+            signaure = str(token)+str(timestamp)+str(client_id)+str(nonce)
+            signaure = sha1(signaure)
+            params = {
+                ## 授权url参数
+                'client_id': client_id,
+                'token': token,
+                'nonce': nonce,
+                'timestamp': timestamp,
+                'signaure': signaure,
+                ## 订单url参数,那个渠道,那天的数据
+                'channel_id': channel_id,
+                'search_date': search_date,     
+            }
+            response_result_json = requests.get(url=url, params=params).json()
+            code = response_result_json['error_code']
+            if code != 0:
+                # error_msg = response_result_json['error_msg']
+                # print("阳光查询充值接口错误信息:",error_msg)
+                print("阳光异常vip公众号:",channel,"所在期数:",stage)
+                print('阳光查询充值接口异常:',response_result_json,'传入参数', params)
+                break
+
+            result_data = response_result_json['data'] 
+            '''    
+            # json['data']返回数据案例  {'last_id': 108847045, 'count': 4, 'push_time': 1604303106, 
+            # 'list': [{'user_id': '531307203', 'merchant_id': '20201101111026_531307203_lYzh', 'transaction_id': '', 'type': '1', 'money': '18.00', 
+            #            'state': '0', 'from': '0', 'create_time': '1604200226', 'finish_time': '', 'referral_id': '3515889', 'referral_id_permanent': '3515894', 
+            #            'channel_id': '26885', 'book_name': '猛虎出山', 'book_tags': '都市', 'referral_url': '/t/3515889', 'subscribe_time': '1603687515', 
+            #            'user_createtime': '1603687515', 'openid': 'om90f6EKBtwcNo9gcgISKsGNyk5o', 'register_ip': '', 'nickname': '爱拼才会赢(星辉电镀化工)', 'avatar': url连接 } ]}
+            '''
+            page_count = result_data['count']
+            if page_count == 0:      
+                break
+            
+            if  last_id  == result_data['last_id']:
+                break
+            last_id = result_data['last_id']
+            params['last_id'] = result_data['last_id']
+
+            order_item_list = result_data['list']
+            for order_item in order_item_list:
+                if int(order_item['state']) != 1:
+                    continue
+
+                order = {}
+                order['amount'] = order_item['money']
+                order['channel_id'] = order_item['channel_id']
+                order['order_id'] = str(order_item['transaction_id'])
+                order['order_time'] = date_util.getSecondsToDatetime(int(order_item['create_time']),"%Y-%m-%d %H:%M:%S")   ## 原数据时间戳,转日期默认=%Y-%m-%d %H:%M:%S 
+                order['user_id'] = order_item['user_id']
+                order['platform'] = '阳光'
+                order['channel'] = channel 
+                order['reg_time'] = date_util.getSecondsToDatetime(int(order_item['user_createtime']),"%Y-%m-%d %H:%M:%S")  ## 原数据时间戳,转日期默认=%Y-%m-%d %H:%M:%S
+                order['from_novel'] = order_item['book_name']                                       ## str
+                order['stage'] = stage                                                              ## str
+                order['date'] = (int(order_item['create_time']) + 8 * 3600) // 86400 * 86400 - 8 * 3600
+
+                x = sorted(order.items(), key=lambda item: item[0])
+                x = dict(x)
+                x = tuple(x.values())
+                order_list = order_list + ((x),)
+
+    print(f"数据日期-{order_st_date}到{search_date}-公众号-{channel}-获取数据-{len(order_list)}条,例如: {order_list[0:1]}")
+    return order_list
+
+
+def batch_save_order(data):
+    if data is None or len(data) == 0:
+        print('数据为空,不执行数据库操作!')
+    else:
+        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);'
+        connect = MySQLConnection()
+        try:
+            num = connect.batch(sql, data)
+            # 提交
+            connect.commit()
+            print('订单数据最终入库【{num}】条'.format(num=num))
+        except Exception as e:
+            print('订单数据入库失败:', e)
+        finally:
+            connect.close()
+
+
+def start_order_job():
+    start_exec_seconds = date_util.getCurrentSecondTime()
+    st_unix, et_unix = date_util.getPreviousHourAndCurrentHourSecondTime(start_exec_seconds)
+    account_list = get_yangguang_account_list()
+    # st_unix = 1602313200  # 2020/10/10 15:0:0
+    # et_unix = 1602316800  # 2020/10/10 16:0:0
+    #print('查询开始时间:', st_unix, date_util.getSecondsToDatetime(st_unix))
+    #print('查询结束时间:', et_unix, date_util.getSecondsToDatetime(et_unix))
+    ## 20201028添加阳光平台
+    batch_save_order(get_yangguang_order(st_unix, et_unix, account_list))
+    print('订单同步执行时间(秒):', date_util.getCurrentSecondTime() - start_exec_seconds)
+
+
+#if __name__ == '__main__':
+#   start_order_job()
+
+start_job_time = '2020-11-17 01:20:00'
+if __name__ == '__main__':
+    scheduler = BlockingScheduler()
+    scheduler.add_job(start_order_job, 'interval', days =1 ,start_date=start_job_time)
+    scheduler.start()
+
+
+
+

+ 251 - 0
dgp/tests/get_order_dairly_yangguang_bk20201110.py

@@ -0,0 +1,251 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# 20201028
+
+## 20201027新添加 阳光 平台接口
+########################## 阳光接口返回数据格式
+'''
+{
+"error_code": 0,             ## 错误码      0 成功
+"error_msg": "",             ## 错误信息
+"data":{                     ## 数据内容
+    "last_id": 1,                 ## 最后一条数据的 ID 请求下一页数据时进行传递
+    "count": 500,                 ## 此次查询数据量
+    "push_time": 1570701536,      ## 返回时间戳
+    "list": [                     ## 数据列表
+        {
+        "merchant_id": "20180627151621_1_UdyF",                   ## 商户订单号
+        "transaction_id": "4200000122201806277014647642",         ## 交易单号
+        "type": "1",                        ##  订单类型,'1'=>书币充值 '2'=>VIP 充值
+        "money": "50",                      ##  总额
+        "state": "1",                       ##  订单状态,'0'=>未完成 '1' => 完成
+        "from": "0",                        ##  
+        "create_time": "1530083789",        ##  下单时间
+        "finish_time": "1530083789",        ##  完成时间
+        "book_name": "一品邪少",             ##  书名
+        "book_tags": "现代都市",             ## 
+        "referral_url": "/t/392109",        ##  推广链接
+        "user_id": "112333",                ##  用户 id
+        "channel_id": "1231"                ##  渠道 id
+        user_createtime                     ##  用户注册时间
+        openid                              ##  用户 openid
+        },
+    ]
+'''
+########################## 
+
+import random
+import datetime
+import hashlib
+import math
+import time
+from concurrent.futures import ProcessPoolExecutor
+from urllib import parse
+import requests
+from util import date_util
+from util import platform_config_util      ## 账号配置
+from util import robust_util
+from apscheduler.schedulers.blocking import BlockingScheduler
+from util.MySQLConnection import MySQLConnection
+
+
+def md5(s):
+    md5 = hashlib.md5()
+    md5.update(s.encode("utf-8"))
+    return md5.hexdigest()
+
+
+def sha1(s):
+    sha1 = hashlib.sha1()
+    sha1.update(s.encode("utf-8"))
+    return sha1.hexdigest()
+
+
+def get_random_str(num=5):
+    H = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
+    salt = ''
+    for i in range(num):
+        salt += random.choice(H)
+    return salt
+
+
+def getSelfDateStr(times=time.time(),date_format='%Y%m%d'):
+    """
+    ## 20201028添加,阳光接口,日期参数请求格式20201028,一日一拉api数据
+    description:  获取指定时间戳
+    time:         秒 默认当前时间
+    return:       返回指定时间戳的前一日日期 。 比如 :接收20190512号的时间戳,返回 20190513 -> str
+    tips:         一天86400秒
+    """
+    timestamps = str(time.strftime(date_format,time.localtime(times)))
+    return timestamps
+
+
+def get_yangguang_account_list():
+    """
+    des cription:  阳光账号列表
+    return:       [['host_name', 'channel_id', 'secert_key', 'channel', 'stage']] ->list
+    """
+    return platform_config_util.get_account_list('阳光', 'yangguang_account_config.csv')
+
+
+@robust_util.catch_exception
+def get_yangguang_order(st,et):
+    total_order_list = ()
+    start_exec_seconds = date_util.getCurrentSecondTime()
+    account_list = get_yangguang_account_list()
+
+    executor = ProcessPoolExecutor(max_workers=5)
+
+    futures = []
+    for account in account_list:
+        future = executor.submit(get_yangguang_order_task, st, et, account)
+        futures.append(future)
+
+    executor.shutdown(True)
+
+    for future in futures:
+        order_list = future.result()
+        if len(order_list) > 0:
+            total_order_list = order_list + total_order_list
+
+    print('阳光订单数量:', len(total_order_list), '执行时长(秒):', date_util.getCurrentSecondTime() - start_exec_seconds)
+    return total_order_list
+
+
+def get_yangguang_order_task(st,et,account):
+    order_list = ()
+    url = 'https://api.yifengaf.cn:443/api/channeldataapi/orders'
+    url_frequency = 1 
+    ##接口鉴权参数
+    client_id =  account[0]     
+    token =  account[1]
+    ##订单接口参数必填
+    channel_id = account[3] 
+    ##需要保存的参数
+    stage = account[2]
+    channel = account[4]
+
+    for i in range((et-st)//86400 + 1):
+        last_id = 111
+        statis_unix_time = st + (i-1)*86400
+        search_date = getSelfDateStr(statis_unix_time,"%Y%m%d")
+
+        while True:
+            if st == et:
+                break
+            
+            if url_frequency//30 == 0 :
+                time.sleep(61)
+            url_frequency += 1    
+            
+            nonce = get_random_str()
+            timestamp = int(time.time())
+            signaure = str(token)+str(timestamp)+str(client_id)+str(nonce)
+            signaure = sha1(signaure)
+            params = {
+                ## 授权url参数
+                'client_id': client_id,
+                'token': token,
+                'nonce': nonce,
+                'timestamp': timestamp,
+                'signaure': signaure,
+                ## 订单url参数,那个渠道,那天的数据
+                'channel_id': channel_id,
+                'search_date': search_date,     
+            }
+            response_result_json = requests.get(url=url, params=params).json()
+            code = response_result_json['error_code']
+            if code != 0:
+                # error_msg = response_result_json['error_msg']
+                # print("阳光查询充值接口错误信息:",error_msg)
+                print("阳光异常vip公众号:",channel,"所在期数:",stage)
+                print('阳光查询充值接口异常:',response_result_json,'传入参数', params)
+                break
+
+            result_data = response_result_json['data'] 
+            '''    
+            # json['data']返回数据案例  {'last_id': 108847045, 'count': 4, 'push_time': 1604303106, 
+            # 'list': [{'user_id': '531307203', 'merchant_id': '20201101111026_531307203_lYzh', 'transaction_id': '', 'type': '1', 'money': '18.00', 
+            #            'state': '0', 'from': '0', 'create_time': '1604200226', 'finish_time': '', 'referral_id': '3515889', 'referral_id_permanent': '3515894', 
+            #            'channel_id': '26885', 'book_name': '猛虎出山', 'book_tags': '都市', 'referral_url': '/t/3515889', 'subscribe_time': '1603687515', 
+            #            'user_createtime': '1603687515', 'openid': 'om90f6EKBtwcNo9gcgISKsGNyk5o', 'register_ip': '', 'nickname': '爱拼才会赢(星辉电镀化工)', 'avatar': url连接 } ]}
+            '''
+            page_count = result_data['count']
+            if page_count == 0:      
+                break
+            
+            if  last_id  == result_data['last_id']:
+                break
+            last_id = result_data['last_id']
+            params['last_id'] = result_data['last_id']
+
+            order_item_list = result_data['list']
+            for order_item in order_item_list:
+                if int(order_item['state']) != 1:
+                    continue
+
+                order = {}
+                order['amount'] = order_item['money']
+                order['channel_id'] = order_item['channel_id']
+                order['order_id'] = str(order_item['transaction_id'])
+                order['order_time'] = date_util.getSecondsToDatetime(int(order_item['create_time']),"%Y-%m-%d %H:%M:%S")   ## 原数据时间戳,转日期默认=%Y-%m-%d %H:%M:%S 
+                order['user_id'] = order_item['user_id']
+                order['platform'] = '阳光'
+                order['channel'] = channel 
+                order['reg_time'] = date_util.getSecondsToDatetime(int(order_item['user_createtime']),"%Y-%m-%d %H:%M:%S")  ## 原数据时间戳,转日期默认=%Y-%m-%d %H:%M:%S
+                order['from_novel'] = order_item['book_name']                                       ## str
+                order['stage'] = stage                                                              ## str
+                order['date'] = (int(order_item['create_time']) + 8 * 3600) // 86400 * 86400 - 8 * 3600
+
+                x = sorted(order.items(), key=lambda item: item[0])
+                x = dict(x)
+                x = tuple(x.values())
+                order_list = order_list + ((x),)
+
+    print(f"数据日期-{search_date}-公众号-{channel}-获取数据-{len(order_list)}条,例如: {order_list[0:1]}")
+    return order_list
+
+
+def batch_save_order(data):
+    if data is None or len(data) == 0:
+        print('数据为空,不执行数据库操作!')
+    else:
+        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);'
+        connect = MySQLConnection()
+        try:
+            num = connect.batch(sql, data)
+            # 提交
+            connect.commit()
+            print('订单数据最终入库【{num}】条'.format(num=num))
+        except Exception as e:
+            print('订单数据入库失败:', e)
+        finally:
+            connect.close()
+
+
+def start_order_job():
+    start_exec_seconds = date_util.getCurrentSecondTime()
+    st_unix, et_unix = date_util.getPreviousHourAndCurrentHourSecondTime(start_exec_seconds)
+    # st_unix = 1602313200  # 2020/10/10 15:0:0
+    # et_unix = 1602316800  # 2020/10/10 16:0:0
+    #print('查询开始时间:', st_unix, date_util.getSecondsToDatetime(st_unix))
+    #print('查询结束时间:', et_unix, date_util.getSecondsToDatetime(et_unix))
+    ## 20201028添加阳光平台
+    batch_save_order(get_yangguang_order(st_unix, et_unix))
+    print('订单同步执行时间(秒):', date_util.getCurrentSecondTime() - start_exec_seconds)
+
+
+#start_order_job()
+
+start_job_time = '2020-11-10 01:20:00'
+if __name__ == '__main__':
+    scheduler = BlockingScheduler()
+    scheduler.add_job(start_order_job, 'interval', days =1 ,start_date=start_job_time)
+    #scheduler.add_job(start_order_job, 'interval',days =1,hours = 2,minutes = 0,seconds = 0)
+    #线上是24h执行一次
+    scheduler.start()
+
+
+
+

+ 62 - 0
dgp/tests/get_order_history_data.py

@@ -0,0 +1,62 @@
+## 上一个月核对,补数据脚本
+import get_order_dairly_yangguang
+import get_order_dairly_wending
+import get_order_dairly_qiyue
+
+from util import platform_order_api_util
+
+from util import platform_config_util
+from util import date_util
+
+from util import db_order_util
+from util import platform_config_util
+
+
+def get_order_job(st_unix,et_unix):
+    print('查询开始时间:', st_unix, date_util.getSecondsToDatetime(st_unix))
+    print('查询结束时间:', et_unix, date_util.getSecondsToDatetime(et_unix))
+
+    ## 直接读取所有账号
+    #account_list_yuewen = platform_config_util.get_yuewen_account_list()
+    #account_list_zhangzhongyun = platform_config_util.get_zhangzhongyun_account_list()
+    #account_list_huasheng = platform_config_util.get_huasheng_account_list()
+    #account_list_youshuge = platform_config_util.get_youshuge_account_list()
+    #account_list_zhangdu = platform_config_util.get_zhangdu_account_list()
+
+    #account_list_wending = platform_config_util.get_wending_account_list()
+    #account_list_yangguang = platform_config_util.get_yangguang_account_list()
+    #account_list_qiyue =  platform_config_util.get_qiyue_account_list()
+    
+
+    ## 数据缺失账户读取
+    #account_list_yuewen = platform_config_util.get_account_list('阅文', 'new_account/new_yuewen.csv') 
+    #account_list_zhangzhongyun = platform_config_util.get_account_list('掌中云', 'new_account/new_zhangzhongyun.csv')
+    #account_list_huasheng = platform_config_util.get_account_list('花生', 'new_account/new_huasheng.csv') 
+    #account_list_youshuge = platform_config_util.get_account_list('悠书阁', 'new_account/new_youshuge.csv')
+    account_list_zhangdu = platform_config_util.get_account_list('掌读', 'new_account/new_zhangdu.csv') 
+
+    #account_list_wending = platform_config_util.get_account_list('文鼎', 'new_account/new_wending.csv') 
+    #account_list_yangguang = platform_config_util.get_account_list('阳光', 'new_account/new_yangguang.csv')
+    #account_list_qiyue =  platform_config_util.get_account_list('七悦', 'new_account/new_qiyue.csv')
+    ##
+
+
+    #db_order_util.batch_save_order(platform_order_api_util.get_zhangzhongyun_order(st_unix, et_unix,account_list_zhangzhongyun))
+    #db_order_util.batch_save_order(platform_order_api_util.get_yuewen_order(st_unix, et_unix,account_list_yuewen))
+    #db_order_util.batch_save_order(platform_order_api_util.get_huasheng_order(st_unix, et_unix,account_list_huasheng))
+    #db_order_util.batch_save_order(platform_order_api_util.get_youshuge_order(st_unix, et_unix,account_list_youshuge))
+    db_order_util.batch_save_order(platform_order_api_util.get_zhangdu_order(st_unix, et_unix,account_list_zhangdu))
+
+    #db_order_util.batch_save_order(get_order_dairly_wending.get_wending_order(st_unix, et_unix,account_list_wending))
+    #db_order_util.batch_save_order(get_order_dairly_yangguang.get_yangguang_order(st_unix, et_unix,account_list_yangguang))  
+    #db_order_util.batch_save_order(get_order_dairly_qiyue.get_qiyue_order(st_unix, et_unix,account_list_qiyue))
+
+
+if __name__ == "__main__":
+    #st_unix = 1582992000  # 2020/03/01 00:00:00
+    st_unix = 1604160000  # 2020/11/01 00:00:00
+    et_unix = 1606060800  # 2020/11/23 02:00:00  
+    get_order_job(st_unix,et_unix)
+
+
+

+ 74 - 0
dgp/tests/get_order_hourly.py

@@ -0,0 +1,74 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+__title__ = '每小时获取各平台的的订单数据'
+
+@Time    : 2020/10/11 15:00
+@Author  : Kenny-PC
+@Software: PyCharm
+
+# code is far away from bugs with the god animal protecting
+    I love animals. They taste delicious.
+              ┏┓      ┏┓
+            ┏┛┻━━━┛┻┓
+            ┃      ☃      ┃
+            ┃  ┳┛  ┗┳  ┃
+            ┃      ┻      ┃
+            ┗━┓      ┏━┛
+                ┃      ┗━━━┓
+                ┃  神兽保佑    ┣┓
+                ┃ 永无BUG!   ┏┛
+                ┗┓┓┏━┳┓┏┛
+                  ┃┫┫  ┃┫┫
+                  ┗┻┛  ┗┻┛
+"""
+from apscheduler.schedulers.blocking import BlockingScheduler
+
+from util import platform_config_util
+from util import date_util
+from util import db_order_util
+from util import platform_order_api_util
+
+
+def start_order_job():
+    start_exec_seconds = date_util.getCurrentSecondTime()
+    st_unix, et_unix = date_util.getPreviousHourAndCurrentHourSecondTime(start_exec_seconds)
+
+    # st_unix = 1602313200  # 2020/10/10 15:0:0
+    # et_unix = 1602316800  # 2020/10/10 16:0:0
+    print('查询开始时间:', st_unix, date_util.getSecondsToDatetime(st_unix))
+    print('查询结束时间:', et_unix, date_util.getSecondsToDatetime(et_unix))
+
+    account_list_yuewen = platform_config_util.get_yuewen_account_list()
+    account_list_zhangzhongyun = platform_config_util.get_zhangzhongyun_account_list()
+    account_list_huasheng = platform_config_util.get_huasheng_account_list()
+    account_list_youshuge = platform_config_util.get_youshuge_account_list()
+    account_list_zhangdu = platform_config_util.get_zhangdu_account_list()
+
+    ########################################## 测试开关 ##########################################
+    # order_list = platform_order_api_util.get_zhangzhongyun_order(st_unix, et_unix)
+    # # print(order_list)
+    # db_order_util.batch_save_order(order_list)
+    #
+    # exit_flag = True
+    # if exit_flag:
+    #     exit()  #这里是为了测试,不让代码继续执行
+    ########################################## 测试开关 ##########################################
+
+    db_order_util.batch_save_order(platform_order_api_util.get_zhangzhongyun_order(st_unix, et_unix,account_list_zhangzhongyun))
+    db_order_util.batch_save_order(platform_order_api_util.get_yuewen_order(st_unix, et_unix,account_list_yuewen))
+    db_order_util.batch_save_order(platform_order_api_util.get_huasheng_order(st_unix, et_unix,account_list_huasheng))
+    db_order_util.batch_save_order(platform_order_api_util.get_youshuge_order(st_unix, et_unix,account_list_youshuge))
+    db_order_util.batch_save_order(platform_order_api_util.get_zhangdu_order(st_unix, et_unix,account_list_zhangdu))
+
+    print('订单同步执行时间(秒):', date_util.getCurrentSecondTime() - start_exec_seconds)
+
+
+if __name__ == '__main__':
+    # start_order_job()
+
+    scheduler = BlockingScheduler()
+    #每小时25分钟就执行一次
+    scheduler.add_job(start_order_job, 'cron', max_instances=10, minute='25')
+    scheduler.start()

+ 69 - 0
dgp/tests/get_order_hourly_bk20201110.py

@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+__title__ = '每小时获取各平台的的订单数据'
+
+@Time    : 2020/10/11 15:00
+@Author  : Kenny-PC
+@Software: PyCharm
+
+# code is far away from bugs with the god animal protecting
+    I love animals. They taste delicious.
+              ┏┓      ┏┓
+            ┏┛┻━━━┛┻┓
+            ┃      ☃      ┃
+            ┃  ┳┛  ┗┳  ┃
+            ┃      ┻      ┃
+            ┗━┓      ┏━┛
+                ┃      ┗━━━┓
+                ┃  神兽保佑    ┣┓
+                ┃ 永无BUG!   ┏┛
+                ┗┓┓┏━┳┓┏┛
+                  ┃┫┫  ┃┫┫
+                  ┗┻┛  ┗┻┛
+"""
+from apscheduler.schedulers.blocking import BlockingScheduler
+
+from util import date_util
+from util import db_order_util
+from util import platform_order_api_util
+
+
+def start_order_job():
+    start_exec_seconds = date_util.getCurrentSecondTime()
+
+    st_unix, et_unix = date_util.getPreviousHourAndCurrentHourSecondTime(start_exec_seconds)
+
+    # st_unix = 1602313200  # 2020/10/10 15:0:0
+    # et_unix = 1602316800  # 2020/10/10 16:0:0
+
+    print('查询开始时间:', st_unix, date_util.getSecondsToDatetime(st_unix))
+    print('查询结束时间:', et_unix, date_util.getSecondsToDatetime(et_unix))
+
+    ########################################## 测试开关 ##########################################
+    # order_list = platform_order_api_util.get_zhangzhongyun_order(st_unix, et_unix)
+    # # print(order_list)
+    # db_order_util.batch_save_order(order_list)
+    #
+    # exit_flag = True
+    # if exit_flag:
+    #     exit()  #这里是为了测试,不让代码继续执行
+    ########################################## 测试开关 ##########################################
+
+    db_order_util.batch_save_order(platform_order_api_util.get_zhangzhongyun_order(st_unix, et_unix))
+    db_order_util.batch_save_order(platform_order_api_util.get_yuewen_order(st_unix, et_unix))
+    db_order_util.batch_save_order(platform_order_api_util.get_huasheng_order(st_unix, et_unix))
+    db_order_util.batch_save_order(platform_order_api_util.get_youshuge_order(st_unix, et_unix))
+    db_order_util.batch_save_order(platform_order_api_util.get_zhangdu_order(st_unix, et_unix))
+
+    print('订单同步执行时间(秒):', date_util.getCurrentSecondTime() - start_exec_seconds)
+
+
+if __name__ == '__main__':
+    # start_order_job()
+
+    scheduler = BlockingScheduler()
+    #每小时25分钟就执行一次
+    scheduler.add_job(start_order_job, 'cron', max_instances=10, minute='25')
+    scheduler.start()

+ 0 - 99
dgp/tests/test.py

@@ -1,99 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-"""
-__title__ = '测试类'
-
-@Time    : 2020/9/24 19:44
-@Author  : Kenny-PC
-@Software: PyCharm
-
-# code is far away from bugs with the god animal protecting
-    I love animals. They taste delicious.
-              ┏┓      ┏┓
-            ┏┛┻━━━┛┻┓
-            ┃      ☃      ┃
-            ┃  ┳┛  ┗┳  ┃
-            ┃      ┻      ┃
-            ┗━┓      ┏━┛
-                ┃      ┗━━━┓
-                ┃  神兽保佑    ┣┓
-                ┃ 永无BUG!   ┏┛
-                ┗┓┓┏━┳┓┏┛
-                  ┃┫┫  ┃┫┫
-                  ┗┻┛  ┗┻┛
-"""
-
-import time
-
-from LoggerService import LoggerService
-# import account_list as al
-from util import date_util
-
-
-def start_order_job(log):
-    log.info('start_order_job')
-
-
-start_order_time = '2020-09-21 16:05:00'
-start_cost_time = '2020-09-21 16:35:00'
-
-if __name__ == '__main__':
-    log = LoggerService.logger_file('abc.log', 'abcd')
-
-    print(int(time.time()))
-    print(date_util.getCurrentSecondTime())
-
-    # print(date_util.getYesterdayStartTime(), platform_util.getZzyQueryTime(date_util.getYesterdayStartTime()))
-
-    request_time_stamp = time.time()
-    st_unix = int((request_time_stamp + 8 * 3600) // 86400 * 86400 - 8 * 3600 - 86400)  # 昨天开始时间
-    et_unix = int((request_time_stamp + 8 * 3600) // 86400 * 86400 - 8 * 3600)  # 昨天结束时间==(今天开始时间-1)
-    st_dt = time.strftime("%Y-%m-%dT%H:%M:%S", time.localtime(st_unix)) + '+08:00'
-    et_dt = time.strftime("%Y-%m-%dT%H:%M:%S", time.localtime(et_unix)) + '+08:00'
-    print(st_unix, st_dt)
-    print(et_unix, et_dt)
-
-    et_unix = et_unix - 1
-    print('========')
-    print((et_unix - st_unix))
-    timespace = 90 * 3600 * 24
-    print(timespace)
-    print((et_unix - st_unix) // timespace + 1)
-    for x in range((et_unix - st_unix) // timespace + 1):  # 分时段
-        print('x=', x)
-
-    print((et_unix - st_unix) / 86400 + 1)
-    for i in range(int((et_unix - st_unix) / 86400 + 1)):
-        print('i=', i)
-    for y in range(1):  # 分时段
-        print('y=', y)
-
-# print('时间转换')
-# print(date_util.getYesterdayStartTime(), date_util.getSecondsToDatetime(date_util.getYesterdayStartTime()))
-# print(date_util.getYesterdayEndTime(), date_util.getSecondsToDatetime(date_util.getYesterdayEndTime()))
-# print(date_util.getTodayStartTime(), date_util.getSecondsToDatetime(date_util.getTodayStartTime()))
-#
-# print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(date_util.getYesterdayStartTime())))
-# print(date_util.getCurrentSecondTime())
-# print(date_util.getSecondsToDatetime())
-# print(date_util.getSecondsToDatetime(date_util.getYesterdayStartTime()))
-# print(date_util.getSecondsToDatetime(date_util.getYesterdayStartTime(), "%Y-%m-%d %H:%M:%S"))
-
-# sql = "select * from quchen_text.order where date=1600790400"
-# connect = MySQLConnection('test')
-# try:
-# 	page = 1
-# 	size = 50
-# 	pagination = connect.listByPage(sql, page, size)
-# 	print(pagination)
-# except Exception as e:
-# 	log.exception(e)
-# finally:
-# 	# 关闭数据库连接
-# 	connect.close()
-
-# scheduler = BlockingScheduler()
-# scheduler.add_job(start_order_job, args=(log,), trigger='interval', max_instances=10, seconds=10,
-# 				  start_date=start_order_time)
-# scheduler.start()

+ 0 - 212
dgp/tests/test_multiprocessing.py

@@ -1,212 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-"""
-__title__ = '测试多线程类'
-
-@Time    : 2020/9/26 22:53
-@Author  : Kenny-PC
-@Software: PyCharm
-
-# code is far away from bugs with the god animal protecting
-    I love animals. They taste delicious.
-              ┏┓      ┏┓
-            ┏┛┻━━━┛┻┓
-            ┃      ☃      ┃
-            ┃  ┳┛  ┗┳  ┃
-            ┃      ┻      ┃
-            ┗━┓      ┏━┛
-                ┃      ┗━━━┓
-                ┃  神兽保佑    ┣┓
-                ┃ 永无BUG!   ┏┛
-                ┗┓┓┏━┳┓┏┛
-                  ┃┫┫  ┃┫┫
-                  ┗┻┛  ┗┻┛
-"""
-
-'''  使用16线程爬取信息
-任务添加函数、任务执行函数;进程、线程切换函数;进、线程开启函数;
-'''
-import ssl
-from urllib import request, parse
-
-import requests
-
-ssl._create_default_https_context = ssl._create_unverified_context
-from datetime import datetime
-from multiprocessing import Pool as ProcessPoll  # 进程池
-from multiprocessing.dummy import Pool as ThreadPool  # 线程池
-
-import time
-import datetime
-import hashlib
-import json
-
-from util import date_util, platform_util
-import account_list as al
-
-zzy_order_list = ()
-
-
-def md5value(s):
-    md5 = hashlib.md5()
-    md5.update(s.encode("utf-8"))
-    return md5.hexdigest()
-
-
-# 任务执行
-def get_page(task_q):
-    headers = {
-        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
-    }
-
-    # url action
-    qs = parse.parse_qs(task_q)
-    my_key = str(qs['a'][0])
-    secert = str(qs['b'][0])
-    stage = ''
-    if 'c' in qs.keys():
-        stage = qs['c'][0]
-
-    strlist = task_q.split('&a=')
-    task_q = strlist[0]
-    req = request.Request(task_q, headers=headers)
-
-    response = request.urlopen(req)
-
-    responseBodyStr = response.read().decode('utf8')
-    channel_list = json.loads(responseBodyStr)
-
-    # 掌中云的时间格式比较特殊,转换下
-    st = platform_util.getZzyQueryTime(date_util.getYesterdayStartTime())
-    et = platform_util.getZzyQueryTime(date_util.getYesterdayEndTime())
-
-    if 'data' in channel_list:
-        items = channel_list['data']['items']
-    # items = []
-    else:
-        print('channel_list', channel_list)
-        items = []
-
-    keyChildOrder = ()
-    for item in items:  # 获取channel_id 后逐个拉取历史orders
-        r = ()
-        channel_id = item['id']
-        channel = item['nickname']
-        status = str(1)
-        per_page = str(1000)
-        limit_time = et
-        get_time = st
-        lt = parse.urlencode({'created_at[lt]': limit_time})
-        gt = parse.urlencode({'created_at[gt]': get_time})
-        url_1 = 'https://openapi.818tu.com/partners/channel/orders/list?'
-        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)
-        parameter_1 = 'channel_id=' + str(
-            channel_id) + '&' + gt + '&' + lt + '&per_page=' + per_page + '&status=' + status + '&key=' + my_key + '&sign=' + my_sign_1
-        orders = requests.get(url_1 + parameter_1)
-        t = orders.json()['data']['count'] // int(per_page) + 1
-        for page in range(1, t + 1):
-            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)
-            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
-            orders_1 = requests.get(url_1 + parameter_2)
-            b = orders_1.json()['data']['items']
-
-            for a in b:
-                c = {}
-                c['user_id'] = str(a['member']['openid'])
-                c['channel'] = channel
-                c['reg_time'] = a['member']['created_at']
-                c['channel_id'] = channel_id
-                c['amount'] = round(a['price'] / 100, 2)
-                c['order_id'] = str(a['id'])
-                c['order_time'] = a['created_at']
-                c['platform'] = '掌中云'
-                c['stage'] = stage
-                # c['amount']=a['amount']
-                dtime = datetime.datetime.strptime(a['created_at'][0:10], "%Y-%m-%d")
-                c['date'] = ((int(time.mktime(dtime.timetuple())) + 8 * 3600) // 86400) * 86400 - 8 * 3600
-
-                if str(a['from_novel_id']) != 'None':
-                    c['from_novel'] = a['from_novel']['title']
-                else:
-                    c['from_novel'] = 'None'
-                """
-                del a['member']
-                del a['referral_link_id']
-                del a['id']
-                del a['created_at']
-                del a['paid_at']
-                del a['border_id']
-                del a['from_novel_id']
-                del a['status']
-                del a['price']
-                del a['agent_uid']
-                """
-                x = sorted(c.items(), key=lambda item: item[0])
-                x = dict(x)
-                x = tuple(x.values())
-                r = r + ((x),)
-
-        print('zzy_my_key_chanel', my_key, channel, len(r))
-        if len(r) > 0:
-            keyChildOrder = r + keyChildOrder
-
-    print('zzy_my_key:', my_key, ' 下的订单数量为:', len(keyChildOrder))
-    return keyChildOrder
-
-
-# 任务添加
-def url_list():
-    task_list = []
-
-    API_list = al.zzy_account_list
-    url = 'https://openapi.818tu.com/partners/channel/channels/list?'
-    for x in API_list:
-        my_key = x[0]
-        secert = x[1]
-        stage = x[2]
-        my_sign = md5value(secert + 'key=' + my_key)
-        # todo 这里一定要手动编码,坑爹的
-        my_key = parse.quote(x[0])
-        parameter = 'key=' + my_key + '&sign=' + my_sign
-        real_url = url + parameter
-        full_url = real_url + '&a=' + my_key + '&b=' + secert + '&c=' + stage
-        task_list.append(full_url)
-
-    return task_list
-
-
-# 设定进、线程
-def get_pool(way=True, count=4):
-    if way:
-        # 进程
-        pool = ProcessPoll(count)
-    else:
-        # 线程
-        pool = ThreadPool(count)
-    return pool
-
-
-# 启动
-def open_pool():
-    pool = get_pool(way=False, count=16)
-    task_q = url_list()
-
-    results = pool.map(get_page, task_q)  # 函数, 列表或元组
-    pool.close()
-    pool.join()
-    totalCount = 0
-    if len(results) > 0:
-        for item in results:
-            totalCount = totalCount + len(item)
-    print('掌中云中订单数据:', totalCount)
-
-
-if __name__ == '__main__':
-    start_second_time = date_util.getCurrentSecondTime()
-    open_pool()
-    print('执行时间:', date_util.getCurrentSecondTime() - start_second_time)

+ 0 - 638
dgp/tests/test_threadpool.py

@@ -1,638 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-"""
-__title__ = '每日凌晨空闲时检查本地数据库中的订单数据是否和平台昨天总订单一致'
-
-@Time    : 2020/9/26 19:44
-@Author  : Kenny-PC
-@Software: PyCharm
-
-# code is far away from bugs with the god animal protecting
-    I love animals. They taste delicious.
-              ┏┓      ┏┓
-            ┏┛┻━━━┛┻┓
-            ┃      ☃      ┃
-            ┃  ┳┛  ┗┳  ┃
-            ┃      ┻      ┃
-            ┗━┓      ┏━┛
-                ┃      ┗━━━┓
-                ┃  神兽保佑    ┣┓
-                ┃ 永无BUG!   ┏┛
-                ┗┓┓┏━┳┓┏┛
-                  ┃┫┫  ┃┫┫
-                  ┗┻┛  ┗┻┛
-"""
-
-import datetime
-import hashlib
-import math
-import time
-from concurrent.futures import ProcessPoolExecutor
-from urllib import parse
-
-import requests
-
-import account_list as al
-from MySQLConnection import MySQLConnection
-from util import date_util, platform_util
-
-
-def md5value(s):
-    md5 = hashlib.md5()
-    md5.update(s.encode("utf-8"))
-    return md5.hexdigest()
-
-
-##《1》阅文
-def get_yuewen_order(st, et):
-    url = 'https://open.yuewen.com/cpapi/wxRecharge/querychargelog'
-    version = 1
-    secert_list = al.yuewen_account_list
-
-    for secert in secert_list:
-        start_time = st
-        email = secert[0]
-        appsecert = secert[1]
-
-        for i in range(int((et - st) / 86400)):
-            t = ()
-            end_time = min(start_time + 86400, et)
-            timestamp = int(time.time())
-            s = ''
-            page = 1
-            order_status = 2
-            data = {
-                'email': email,
-                'version': version,
-                'timestamp': timestamp,
-                'start_time': start_time,
-                'end_time': end_time,
-                'page': page,
-                'order_status': order_status
-                # 'last_min_id':last_min_id,
-                # 'last_max_id':last_max_id,
-                # 'total_count':total_count,
-                # 'last_page':last_page
-            }
-            sorted_data = sorted(data.items())
-            for k, v in sorted_data:
-                s = s + str(k) + str(v)
-
-            sign = md5value(appsecert + s).upper()
-
-            data1 = {
-                'email': email,
-                'version': version,
-                'timestamp': timestamp,
-                'start_time': start_time,
-                'end_time': end_time,
-                'page': page,
-                'order_status': order_status,
-                'sign': sign
-            }
-            list1 = requests.get(url=url, params=data1)
-
-            total_count = list1.json()['data']['total_count']
-            last_min_id = list1.json()['data']['min_id']
-            last_max_id = list1.json()['data']['max_id']
-            last_page = list1.json()['data']['page']
-
-            if total_count > 0:
-                for x in list1.json()['data']['list']:
-                    y = {}
-                    dtime = datetime.datetime.strptime(x['order_time'], "%Y-%m-%d %H:%M:%S")
-                    y['date'] = ((int(time.mktime(dtime.timetuple())) + 8 * 3600) // 86400) * 86400 - 8 * 3600
-                    y['platform'] = '阅文'
-                    y['channel'] = x['app_name']
-                    y['from_novel'] = x['book_name']
-                    y['user_id'] = x['openid']
-                    y['stage'] = ''
-                    y['channel_id'] = 0
-                    y['order_time'] = x['order_time']
-                    y['amount'] = x['amount']
-                    y['reg_time'] = x['reg_time']
-                    y['order_id'] = x['order_id']
-                    """
-                    del x['app_name']
-                    del x['order_status']
-                    del x['order_type']
-                    del x['openid']
-                    del x['user_name']
-                    del x['sex']
-                    del x['channel_name']
-                    del x['book_id']
-                    del x['book_name']
-                    del x['report_status']
-                    """
-                    y = sorted(y.items(), key=lambda item: item[0])
-                    y = dict(y)
-                    y = tuple(y.values())
-                    t = t + ((y),)
-
-            if total_count > 100:
-                for page in range(2, math.ceil(total_count / 100) + 1):
-                    data = {
-                        'email': email,
-                        'version': version,
-                        'timestamp': timestamp,
-                        'start_time': start_time,
-                        'end_time': end_time,
-                        'page': page,
-                        'last_min_id': last_min_id,
-                        'last_max_id': last_max_id,
-                        'total_count': total_count,
-                        'last_page': last_page,
-                        'order_status': order_status
-                    }
-                    sorted_data = sorted(data.items())
-                    s1 = ''
-                    for k, v in sorted_data:
-                        s1 = s1 + str(k) + str(v)
-                        sign = md5value(appsecert + s1).upper()
-                        data2 = {
-                            'email': email,
-                            'version': version,
-                            'timestamp': timestamp,
-                            'start_time': start_time,
-                            'end_time': end_time,
-                            'page': page,
-                            'last_min_id': last_min_id,
-                            'last_max_id': last_max_id,
-                            'total_count': total_count,
-                            'last_page': last_page,
-                            'order_status': order_status,
-                            'sign': sign
-                        }
-                    list2 = requests.get(url=url, params=data2)
-                    for x in list2.json()['data']['list']:
-                        y = {}
-                        dtime = datetime.datetime.strptime(x['order_time'], "%Y-%m-%d %H:%M:%S")
-                        y['date'] = ((int(time.mktime(dtime.timetuple())) + 8 * 3600) // 86400) * 86400 - 8 * 3600
-                        y['platform'] = '阅文'
-                        y['channel'] = x['app_name']
-                        y['from_novel'] = x['book_name']
-                        y['user_id'] = x['openid']
-                        y['stage'] = ''
-                        y['channel_id'] = 0
-                        y['order_time'] = x['order_time']
-                        y['amount'] = x['amount']
-                        y['reg_time'] = x['reg_time']
-                        y['order_id'] = x['order_id']
-                        """
-                        del x['app_name']
-                        del x['order_status']
-                        del x['order_type']
-                        del x['openid']
-                        del x['user_name']
-                        del x['sex']
-                        del x['channel_name']
-                        del x['book_id']
-                        del x['book_name']
-                        del x['report_status']
-                        """
-                        y = sorted(y.items(), key=lambda item: item[0])
-                        y = dict(y)
-                        y = tuple(y.values())
-                        t = t + ((y),)
-
-                    total_count = list2.json()['data']['total_count']
-                    last_min_id = list2.json()['data']['min_id']
-                    last_max_id = list2.json()['data']['max_id']
-                    last_page = list2.json()['data']['page']
-
-            print(email, start_time, len(t))
-            start_time = start_time + 86400
-            if len(t) > 0:
-                mysql_insert_order(t)
-
-
-##《2》掌读
-def get_zhangdu_order(st, et):
-    secert_list = al.zhangdu_account_list
-    url = 'https://api.zhangdu520.com/channel/getorder'
-
-    for item in secert_list:  # 分渠道
-        t = ()
-
-        uid = item[0]
-        appsecert = item[1]
-        channel = item[2]
-        timestamp = int(time.time())
-        sign = md5value(str(uid) + '&' + appsecert + '&' + str(timestamp))
-        page = 1
-        starttime = st
-        timespace = 90 * 3600 * 24
-        endtime = min(et, st + timespace)
-
-        for x in range((et - st) // timespace + 1):  # 分时段
-            Params = {
-                'uid': uid,
-                'timestamp': timestamp,
-                'sign': sign,
-                'starttime': starttime,
-                'endtime': endtime
-            }
-            list1 = requests.get(url=url, params=Params)
-            pageCount = list1.json()['data']['pageCount']
-            if pageCount > 0:
-                for a in range(1, pageCount + 1):  # 分页
-                    page = a
-                    Params = {
-                        'uid': uid,
-                        'timestamp': timestamp,
-                        'sign': sign,
-                        'starttime': starttime,
-                        'endtime': endtime,
-                        'page': page
-                    }
-                    list2 = requests.get(url=url, params=Params).json()
-                    if 'data' in list2.keys():
-                        for b in list2['data']['list']:
-                            c = {}
-                            c['amount'] = b['amount']
-                            c['channel_id'] = uid
-                            c['order_id'] = str(b['orderno'])
-                            c['order_time'] = b['ctime']
-                            c['user_id'] = b['openid']
-                            c['platform'] = '掌读'
-                            c['channel'] = channel
-                            c['reg_time'] = b['regtime']
-                            c['from_novel'] = ''
-                            c['stage'] = ''
-                            c['date'] = ((int(b['ctime']) + 8 * 3600) // 86400) * 86400 - 8 * 3600
-                            """
-                            del b['openid']
-                            del b['regtime']
-                            del b['ip']
-                            del b['ua']
-                            del b['id']
-                            del b['ctime']
-                            del b['userid']
-                            del b['orderno']
-                            del b['source']
-                            del b['sourceid']
-                            """
-                            if b['status'] == '1':
-                                # del b['status']
-                                del b
-                                x = sorted(c.items(), key=lambda item: item[0])
-                                x = dict(x)
-                                x = tuple(x.values())
-                                t = t + ((x),)
-                    else:
-                        print(list2)
-            starttime = starttime + timespace
-            endtime = min(et, starttime + timespace)
-        if len(t) > 0:
-            mysql_insert_order(t)
-        print('掌读', channel, len(t))
-
-
-##《3》花生
-def get_huasheng_order(st, et):
-    apikey_list = al.huasheng_account_list
-    url = 'https://vip.rlcps.cn/api/getMerchants'
-
-    for key in apikey_list:  # 获取每个vip账号下的channel_id
-        apiKEY = key[0]
-        apiSecurity = key[1]
-        stage = key[2]
-        timestamp = str(int(time.time()))
-        sign = md5value(apiKEY + timestamp + apiSecurity).upper()
-        data = {
-            'apiKey': apiKEY,
-            'apiSecurity': apiSecurity,
-            'timestamp': timestamp,
-            'sign': sign
-        }
-        list0 = requests.post(url, data).json()
-        t = ()
-
-        for merchant in list0['data']:
-            merchant_id = merchant['merchant_id']
-            merchant_name = merchant['merchant_name']
-            url1 = 'https://vip.rlcps.cn/api/orderList'
-            start_time = st
-
-            for i in range((et - st) // 86400):
-                page = 1
-                date = time.strftime("%Y-%m-%d", time.localtime(start_time))
-                sign = md5value(apiKEY + date + str(merchant_id) + timestamp + apiSecurity).upper()
-                data1 = {
-                    'apiKey': apiKEY,
-                    'apiSecurity': apiSecurity,
-                    'timestamp': timestamp,
-                    'date': date,
-                    'merchant_id': merchant_id,
-                    'sign': sign,
-                    'page': page
-                }
-                list1 = requests.post(url1, data1).json()
-
-                if 'data' in list1.keys() and len(list1['data']) > 0:
-
-                    for i in range(int(math.ceil(list1['count'] / 500))):
-                        data2 = {
-                            'apiKey': apiKEY,
-                            'apiSecurity': apiSecurity,
-                            'timestamp': timestamp,
-                            'date': date,
-                            'merchant_id': merchant_id,
-                            'sign': sign,
-                            'page': page
-                        }
-                        list2 = requests.post(url1, data2).json()
-
-                        for x in list2['data']:
-                            if x['order_status'] == 1:
-                                y = {}
-                                ##dtime = datetime.datetime.strptime(x['pay_at'],"%Y-%m-%d")
-                                ##y['date']= ((int(time.mktime(dtime.timetuple()))+8*3600)//86400)*86400-8*3600
-                                y['user_id'] = x['openid']
-                                y['order_id'] = x['trans_id']
-                                y['order_time'] = x['pay_at']
-                                y['reg_time'] = x['join_at']
-                                y['date'] = (start_time + 8 * 3600) // 86400 * 86400 - 8 * 3600
-                                y['channel'] = merchant_name
-                                y['channel_id'] = merchant_id
-                                y['platform'] = '花生'
-                                y['stage'] = stage
-                                y['from_novel'] = x['book_name']
-                                y['amount'] = x['amount']
-                                """
-                                del x['order_num']
-                                del x['book_name']
-                                del x['trans_id']
-                                del x['pay_at']
-                                del x['join_at']
-                                del x['subscribe_at']
-                                del x['openid']
-                                del x['charge_count']
-                                del x['book_id']
-                                del x['order_status']
-                                del x['user_name']
-                                del x['spread_name']
-                                del x['request_at']
-                                """
-                                y = sorted(y.items(), key=lambda item: item[0])
-                                y = dict(y)
-                                y = tuple(y.values())
-                                t = t + ((y),)
-                        page = page + 1
-                else:
-                    print(list1)
-                start_time = start_time + 86400
-
-        if len(t) > 0:
-            mysql_insert_order(t)
-    print(stage, merchant_name, len(t))
-
-
-##《4》掌中云
-def get_zzy_order(st, et):
-    # 掌中云的时间格式比较特殊,转换下
-    st = platform_util.getZzyQueryTime(st)
-    et = platform_util.getZzyQueryTime(et)
-
-    API_list = al.zzy_account_list
-    url = 'https://openapi.818tu.com/partners/channel/channels/list?'
-
-    for x in API_list:
-        my_key = x[0]
-        secert = x[1]
-        stage = x[2]
-        my_sign = md5value(secert + 'key=' + my_key)
-        parameter = 'key=' + my_key + '&sign=' + my_sign
-        channel_list = requests.get(url + parameter)  # 获取子渠道列表
-
-        if 'data' in channel_list.json().keys():
-            items = channel_list.json()['data']['items']
-        elif len(x) > 3:
-            my_key = x[3]
-            secert = x[4]
-            my_sign = md5value(secert + 'key=' + my_key)
-            parameter = 'key=' + my_key + '&sign=' + my_sign
-            channel_list = requests.get(url + parameter)
-            items = channel_list.json()['data']['items']
-        else:
-            print(channel_list.json())
-            items = []
-
-        for item in items:  # 获取channel_id 后逐个拉取历史orders
-            r = ()
-            channel_id = item['id']
-            channel = item['nickname']
-            status = str(1)
-            per_page = str(1000)
-            limit_time = et
-            get_time = st
-            lt = parse.urlencode({'created_at[lt]': limit_time})
-            gt = parse.urlencode({'created_at[gt]': get_time})
-            url_1 = 'https://openapi.818tu.com/partners/channel/orders/list?'
-            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)
-            parameter_1 = 'channel_id=' + str(
-                channel_id) + '&' + gt + '&' + lt + '&per_page=' + per_page + '&status=' + status + '&key=' + my_key + '&sign=' + my_sign_1
-            orders = requests.get(url_1 + parameter_1)
-            t = orders.json()['data']['count'] // int(per_page) + 1
-            for page in range(1, t + 1):
-                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)
-                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
-                orders_1 = requests.get(url_1 + parameter_2)
-                b = orders_1.json()['data']['items']
-
-                for a in b:
-                    c = {}
-                    c['user_id'] = str(a['member']['openid'])
-                    c['channel'] = channel
-                    c['reg_time'] = a['member']['created_at']
-                    c['channel_id'] = channel_id
-                    c['amount'] = round(a['price'] / 100, 2)
-                    c['order_id'] = str(a['id'])
-                    c['order_time'] = a['created_at']
-                    c['platform'] = '掌中云'
-                    c['stage'] = stage
-                    # c['amount']=a['amount']
-                    dtime = datetime.datetime.strptime(a['created_at'][0:10], "%Y-%m-%d")
-                    c['date'] = ((int(time.mktime(dtime.timetuple())) + 8 * 3600) // 86400) * 86400 - 8 * 3600
-
-                    if str(a['from_novel_id']) != 'None':
-                        c['from_novel'] = a['from_novel']['title']
-                    else:
-                        c['from_novel'] = 'None'
-                    """
-                    del a['member']
-                    del a['referral_link_id']
-                    del a['id']
-                    del a['created_at']
-                    del a['paid_at']
-                    del a['border_id']
-                    del a['from_novel_id']
-                    del a['status']
-                    del a['price']
-                    del a['agent_uid']
-                    """
-                    x = sorted(c.items(), key=lambda item: item[0])
-                    x = dict(x)
-                    x = tuple(x.values())
-                    r = r + ((x),)
-
-            if len(r) > 0:
-                mysql_insert_order(r)
-
-            print('zzy', channel, len(r))
-
-
-##《5》 悠书阁
-def get_ysg_order(st, et):
-    start_exec_seconds = date_util.getCurrentSecondTime()
-    total_order = ()
-    account_list = al.ysg_account_list
-
-    executor = ProcessPoolExecutor(max_workers=4)
-
-    futures = []
-    for account in account_list:
-        future = executor.submit(get_ysg_order_task, st, et, account)
-        futures.append(future)
-    executor.shutdown(True)
-
-    for future in futures:
-        if len(future.result()) > 0:
-            total_order = future.result() + total_order
-
-    print('悠书阁订单数量:', len(total_order))
-    print('悠书阁订单执行时间(秒):', date_util.getCurrentSecondTime() - start_exec_seconds)
-    return total_order
-
-
-def get_ysg_order_task(st, et, account):
-    total_order = ()
-    url = 'https://novel.youshuge.com/v2/open/orders'
-    # 超过100条就需要分页,别问我为什么知道,看代码看出来的
-    max_page_size = 100
-
-    host_name = account[0]
-    channel_id = account[1]
-    secert_key = account[2]
-    channel = account[3]
-    stage = account[4]
-
-    timestamp = int(time.time())
-    start_date = time.strftime("%Y-%m-%d", time.localtime(st))
-    end_date = time.strftime("%Y-%m-%d", time.localtime(et))
-    page = 1
-    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
-    sign = md5value(str1).upper()
-    data = {
-        'sign': sign,
-        'host_name': host_name,
-        'time': timestamp,
-        'channel_id': channel_id,
-        'page': page,
-        'pay_status': 1,
-        'start_date': start_date,
-        'end_date': end_date
-    }
-    result_json = requests.post(url, data).json()
-    first_page_order = build_ysg_order_data(channel, channel_id, result_json, stage)
-    total_order = total_order + first_page_order
-    if len(first_page_order) == 0:
-        return total_order
-
-    total_count = result_json['data'][0]['count']
-    if total_count > max_page_size:
-        for i in range((total_count - 1) // max_page_size + 1):
-            timestamp = int(time.time())
-            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
-            sign = md5value(str1).upper()
-            data2 = {
-                'sign': sign,
-                'host_name': host_name,
-                'time': timestamp,
-                'channel_id': channel_id,
-                'page': page,
-                'pay_status': 1,
-                'start_date': start_date,
-                'end_date': end_date
-            }
-            r2 = requests.post(url, data2).json()
-
-            total_order = total_order + build_ysg_order_data(channel, channel_id, r2, stage)
-            page = page + 1
-
-    return total_order
-
-
-def build_ysg_order_data(channel, channel_id, result_json, stage):
-    order = ()
-    if 'data' in result_json.keys():
-        data = result_json['data']
-        if len(data) > 0:
-            for x in data:
-                y = {}
-                dtime = datetime.datetime.strptime(x['create_time'][0:10], "%Y-%m-%d")
-                y['date'] = ((int(
-                    time.mktime(dtime.timetuple())) + 8 * 3600) // 86400) * 86400 - 8 * 3600
-                y['order_id'] = x['order_num']
-                y['amount'] = round(int(x['price']) / 100, 2)
-                y['order_time'] = x['create_time']
-                y['channel'] = channel
-                y['from_novel'] = x['book_name']
-                y['stage'] = stage
-                y['user_id'] = x['openid']
-                y['channel_id'] = channel_id
-                y['platform'] = '悠书阁'
-                y['reg_time'] = x['reg_time']
-
-                y = sorted(y.items(), key=lambda item: item[0])
-                y = dict(y)
-                y = tuple(y.values())
-                order = order + ((y),)
-    return order
-
-
-## 数据导入表采用replace替换主键orderid的方法
-def mysql_insert_order(data):
-    if len(data) == 0:
-        print('数据为空,不执行数据库操作!')
-        pass
-
-    sql = 'replace into quchen_text.order1 (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);'
-    connect = MySQLConnection('test')
-    try:
-        num = connect.batch(sql, data)
-        print(num, '条订单数据入库成功')
-    except Exception as e:
-        print('订单数据入库失败:', e)
-    finally:
-        connect.close()
-
-
-def start_all_job():
-    st_unix = date_util.getYesterdayStartTime()
-    et_unix = date_util.getTodayStartTime()
-
-    print(date_util.getSecondsToDatetime(st_unix))
-    print(date_util.getSecondsToDatetime(et_unix))
-
-    start_exec_seconds = date_util.getCurrentSecondTime()
-    # get_yuewen_order(st_unix, et_unix)
-    ysg_order_list = get_ysg_order(st_unix, et_unix)
-    mysql_insert_order(ysg_order_list)
-
-    # get_zhangdu_order(st_unix, et_unix)
-
-    # get_zzy_order(st_unix, et_unix)
-    # get_huasheng_order(st_unix, et_unix)
-
-
-if __name__ == '__main__':
-    start_all_job()

+ 0 - 0
dgp/tests/LoggerService.py → dgp/tests/util/LoggerService.py


+ 41 - 42
dgp/tests/MySQLConnection.py → dgp/tests/util/MySQLConnection.py

@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 
 """
-__title__ = 'MySQL连接池对象'
+__title__ = 'MySQL数据库连接池对象'
 
 @Time    : 2020/9/26 18:36
 @Author  : Kenny-PC
@@ -23,9 +23,6 @@ __title__ = 'MySQL连接池对象'
                   ┃┫┫  ┃┫┫
                   ┗┻┛  ┗┻┛
 """
-"""
-数据库连接池相关
-"""
 
 import configparser
 import logging
@@ -34,42 +31,8 @@ import os
 import pymysql
 from DBUtils.PooledDB import PooledDB
 
-# 获取当前文件所在目录的上一级目录
-root_dir = os.path.dirname(os.path.abspath('.'))
-print('当前项目根目录为:', root_dir)
-
-# 读取数据库配置信息
-config = configparser.ConfigParser()
-config.read(root_dir + '/tests/conf/db.ini', encoding='UTF-8')
-sections = config.sections()
-
-# 数据库工厂
-dbFactory = {}
-for dbName in sections:
-    # 读取相关属性
-    maxconnections = config.get(dbName, "maxconnections")
-    mincached = config.get(dbName, "mincached")
-    maxcached = config.get(dbName, "maxcached")
-    host = config.get(dbName, "host")
-    port = config.get(dbName, "port")
-    user = config.get(dbName, "user")
-    password = config.get(dbName, "password")
-    database = config.get(dbName, "database")
-    databasePooled = PooledDB(creator=pymysql,
-                              maxconnections=int(maxconnections),
-                              mincached=int(mincached),
-                              maxcached=int(maxcached),
-                              blocking=True,
-                              cursorclass=pymysql.cursors.DictCursor,
-                              host=host,
-                              port=int(port),
-                              user=user,
-                              password=password,
-                              database=database)
-    dbFactory[dbName] = databasePooled
-
-
-class MySQLConnection(object):
+
+class MySQLConnection():
     """
     数据库连接池代理对象
     查询参数主要有两种类型
@@ -77,8 +40,44 @@ class MySQLConnection(object):
     第二种: 传入字典类型,例如{"id":13},此时我们的SQL语句需要使用键来代替展位符,例如:%(name)s
     """
 
-    def __init__(self, dbName="test"):
-        self.connect = dbFactory[dbName].connection()
+    def __init__(self):
+        # 得到当前文件的父目录
+        parent_dir_path = os.path.dirname(os.path.abspath('.'))
+        db_config_path = parent_dir_path + '/tests/conf/db_config.ini'
+        # print('数据库配置文件:', db_config_path)
+
+        # 读取数据库配置信息
+        config = configparser.ConfigParser()
+        config.read(db_config_path, encoding='UTF-8')
+        sections = config.sections()
+
+        mysql_config_section = 'mysql_config'
+
+        if mysql_config_section not in sections:
+            print('ERROR:数据库配置文件【{db_config_path}】没有名为 mysql_config 的 section'.format(db_config_path=db_config_path))
+            exit()
+
+        # 读取相关属性
+        maxconnections = config.get(mysql_config_section, "maxconnections")
+        mincached = config.get(mysql_config_section, "mincached")
+        maxcached = config.get(mysql_config_section, "maxcached")
+        host = config.get(mysql_config_section, "host")
+        port = config.get(mysql_config_section, "port")
+        user = config.get(mysql_config_section, "user")
+        password = config.get(mysql_config_section, "password")
+        database = config.get(mysql_config_section, "database")
+        databasePooled = PooledDB(creator=pymysql,
+                                  maxconnections=int(maxconnections),
+                                  mincached=int(mincached),
+                                  maxcached=int(maxcached),
+                                  blocking=True,
+                                  cursorclass=pymysql.cursors.DictCursor,
+                                  host=host,
+                                  port=int(port),
+                                  user=user,
+                                  password=password,
+                                  database=database)
+        self.connect = databasePooled.connection()
         self.cursor = self.connect.cursor()
         logging.debug("获取数据库连接对象成功,连接池对象:{}".format(str(self.connect)))
 

+ 0 - 0
dgp/tests/QueryType.py → dgp/tests/util/QueryType.py


+ 31 - 0
dgp/tests/util/date_util.py

@@ -252,6 +252,17 @@ def getTomorrowEndTime():
     yesterday = datetime.date.today() + datetime.timedelta(days=2)
     return int(time.mktime(time.strptime(str(yesterday), '%Y-%m-%d'))) - 1
 
+def getPreviousHourAndCurrentHourSecondTime(seconds=getCurrentSecondTime()):
+    """
+    description:  接受时间戳并返回上一小时整点时间和当前小时整点时间
+    seconds:      默认当前时间 可传second
+    return:       1602313200,1602316800 -> (previous_hour_second_time,current_hour_second_time)
+    tips:         seconds 不传参则取当前时间
+    """
+    previous_hour_second_time = int(seconds // 3600 * 3600 - 3600)
+    current_hour_second_time = int(seconds // 3600 * 3600)
+    return previous_hour_second_time, current_hour_second_time
+
 
 def getCurrentWeekTime():
     """
@@ -265,6 +276,26 @@ def getCurrentWeekTime():
     return str(round(timestamps))
 
 
+def checkInterval(start_time, end_time, need_compare_time):
+    """
+    description:  判断 need_compare_time 是否在 start_time 和 end_time区间里
+    return:       true -> bool
+    """
+    return need_compare_time >= start_time and need_compare_time < end_time
+
+
+def getSelfDateStr(times=time.time(),date_format='%Y%m%d'):
+    """
+    ## 20201028添加,阳光接口,日期参数请求格式20201028,一日一拉api数据
+    description:  获取指定时间戳
+    time:         秒 默认当前时间
+    return:       返回指定时间戳的前一日日期 。 比如 :接收20190512号的时间戳,返回 20190513 -> str
+    tips:         一天86400秒
+    """
+    timestamps = str(time.strftime(date_format,time.localtime(times)))
+    return timestamps
+
+
 def test():
     print(getCurrentMilliSecondTime())
     print(getCurrentSecondTime())

+ 59 - 0
dgp/tests/util/db_order_util.py

@@ -0,0 +1,59 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+__title__ = '订单工具类,用于查询,修改订单等'
+
+@Time    : 2020/9/30 12:38
+@Author  : Kenny-PC
+@Software: PyCharm
+
+# code is far away from bugs with the god animal protecting
+    I love animals. They taste delicious.
+              ┏┓      ┏┓
+            ┏┛┻━━━┛┻┓
+            ┃      ☃      ┃
+            ┃  ┳┛  ┗┳  ┃
+            ┃      ┻      ┃
+            ┗━┓      ┏━┛
+                ┃      ┗━━━┓
+                ┃  神兽保佑    ┣┓
+                ┃ 永无BUG!   ┏┛
+                ┗┓┓┏━┳┓┏┛
+                  ┃┫┫  ┃┫┫
+                  ┗┻┛  ┗┻┛
+"""
+
+from util.MySQLConnection import MySQLConnection
+
+
+# 数据导入表采用replace替换主键orderid的方法
+def batch_save_order(data):
+    if data is None or len(data) == 0:
+        print('数据为空,不执行数据库操作!')
+    else:
+        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);'
+        connect = MySQLConnection()
+        try:
+            num = connect.batch(sql, data)
+            # 提交
+            connect.commit()
+            print('订单数据最终入库【{num}】条'.format(num=num))
+        except Exception as e:
+            print('订单数据入库失败:', e)
+        finally:
+            connect.close()
+
+
+# 获取各平台的订单数量
+def get_platform_order_count(date):
+    sql = 'SELECT platform, COUNT(1) AS num FROM quchen_text.`order` WHERE date = %s GROUP BY platform'
+    connect = MySQLConnection()
+    platform_order_count = []
+    try:
+        platform_order_count = connect.query(sql, date)
+    except Exception as e:
+        print('各平台的订单数据查询失败:', e)
+    finally:
+        connect.close()
+    return platform_order_count

+ 140 - 0
dgp/tests/util/platform_config_util.py

@@ -0,0 +1,140 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+__title__ = '平台配置操作工具类'
+
+@Time    : 2020/9/26 21:51
+@Author  : Kenny-PC
+@Software: PyCharm
+
+# code is far away from bugs with the god animal protecting
+    I love animals. They taste delicious.
+              ┏┓      ┏┓
+            ┏┛┻━━━┛┻┓
+            ┃      ☃      ┃
+            ┃  ┳┛  ┗┳  ┃
+            ┃      ┻      ┃
+            ┗━┓      ┏━┛
+                ┃      ┗━━━┓
+                ┃  神兽保佑    ┣┓
+                ┃ 永无BUG!   ┏┛
+                ┗┓┓┏━┳┓┏┛
+                  ┃┫┫  ┃┫┫
+                  ┗┻┛  ┗┻┛
+"""
+
+import os
+import time
+
+import pandas as pd
+
+
+def get_yuewen_account_list():
+    """
+    description:  阅文账号列表
+    return:       [['email', 'appsecert']] ->list
+    """
+    return get_account_list('阅文', 'yuewen_account_config.csv')
+
+
+def get_zhangdu_account_list():
+    """
+    description:  掌读账号列表
+    return:       [['uid', 'appsecert', 'channel']] ->list
+    """
+    return get_account_list('掌读', 'zhangdu_account_config.csv')
+
+
+def get_huasheng_account_list():
+    """
+    description:  花生账号列表
+    return:       [['apiKey', 'apiSecurity', 'stage']] ->list
+    """
+    return get_account_list('花生', 'huasheng_account_config.csv')
+
+
+def get_zhangzhongyun_account_list():
+    """
+    description:  掌中云账号列表
+    return:       [['key', 'secert', 'stage']] ->list
+    """
+    return get_account_list('掌中云', 'zhangzhongyun_account_config.csv')
+
+
+def get_youshuge_account_list():
+    """
+    description:  悠书阁账号列表
+    return:       [['host_name', 'channel_id', 'secert_key', 'channel', 'stage']] ->list
+    """
+    return get_account_list('悠书阁', 'youshuge_account_config.csv')
+
+
+def get_yangguang_account_list():
+    """
+    des cription:  阳光账号列表
+    return:       [['host_name', 'channel_id', 'secert_key', 'channel', 'stage']] ->list
+    """
+    return get_account_list('阳光', 'yangguang_account_config.csv')
+
+
+def get_wending_account_list():
+    """
+    des cription:  文鼎账号列表
+    return:       [['consumerkey', 'secretkey', 'siteid', 'stage', 'account']] ->list
+    """
+    return get_account_list('文鼎', 'wending_account_config.csv')
+
+
+def get_qiyue_account_list():
+    """
+    des cription:  七悦账号列表
+    return:       [['stage','token']] ->list
+    """
+    return platform_config_util.get_account_list('七悦', 'qiyue_account_config.csv')
+
+
+def get_account_list(platform, account_file_name):
+    """
+    description:  读取账号列表
+    return:       [['value1_1', 'value1_3'...]...] ->list
+    """
+
+    # 得到当前文件的父目录
+    parent_dir_path = os.path.dirname(os.path.abspath('.'))
+    # print(parent_dir_path)
+    file_path = parent_dir_path + "/tests/conf/account/" + account_file_name
+    # print('配置文件:', file_path)
+
+    data = pd.read_csv(file_path, header=None, keep_default_na=False, encoding='utf8')
+    account = []
+    for i in data.index:
+        account.append(list(data.values[i]))
+
+    account_list = list(account)  # 若想用二维列表的形式读取即删掉此行语句
+    print('读取到【{platform}】账号数量【{quantity}】个'.format(platform=platform, quantity=len(account_list)))
+
+    return account_list
+
+
+def get_zhangzhongyun_query_time(st_unix, et_unix):
+    """
+    description:  掌中云的时间格式比较特殊,需要转换下
+    return:       2020-09-25T00:00:00+08:00,2020-09-26T00:00:00+08:00 -> (start_time,end_time)
+    """
+    start_time = time.strftime("%Y-%m-%dT%H:%M:%S", time.localtime(st_unix)) + '+08:00'
+    end_time = time.strftime("%Y-%m-%dT%H:%M:%S", time.localtime(et_unix)) + '+08:00'
+    return start_time, end_time
+
+
+def get_youshuge_order_query_time(st_unix, et_unix):
+    """
+    description:  悠书阁的订单查询是按天查询的,没有按小时查询,且每小时查询的时候要判断结束时间要比开始时间大一天,否则查询不到数据
+    return:       2020-10-10,2020-10-11 -> (start_time,end_time)
+    """
+    start_time = time.strftime("%Y-%m-%d", time.localtime(st_unix))
+    end_time = time.strftime("%Y-%m-%d", time.localtime(et_unix))
+    if start_time == end_time:
+        # 如果是同一天,则结束时间加一天
+        end_time = time.strftime("%Y-%m-%d", time.localtime(et_unix + 86400))
+    return start_time, end_time

+ 668 - 0
dgp/tests/util/platform_order_api_util.py

@@ -0,0 +1,668 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+__title__ = '各个平台的订单API接口'
+
+@Time    : 2020/9/30 12:33
+@Author  : Kenny-PC
+@Software: PyCharm
+
+# code is far away from bugs with the god animal protecting
+    I love animals. They taste delicious.
+              ┏┓      ┏┓
+            ┏┛┻━━━┛┻┓
+            ┃      ☃      ┃
+            ┃  ┳┛  ┗┳  ┃
+            ┃      ┻      ┃
+            ┗━┓      ┏━┛
+                ┃      ┗━━━┓
+                ┃  神兽保佑    ┣┓
+                ┃ 永无BUG!   ┏┛
+                ┗┓┓┏━┳┓┏┛
+                  ┃┫┫  ┃┫┫
+                  ┗┻┛  ┗┻┛
+"""
+
+import datetime
+import hashlib
+import math
+import time
+from concurrent.futures import ProcessPoolExecutor
+from urllib import parse
+
+import requests
+
+from util import date_util
+from util import platform_config_util
+from util import robust_util
+
+
+# md5加密,使用utf-8编码
+def md5(s):
+    md5 = hashlib.md5()
+    md5.update(s.encode("utf-8"))
+    return md5.hexdigest()
+
+
+## sha1加密,使用utf-8编码
+def sha1(s):
+    sha1 = hashlib.sha1()
+    sha1.update(s.encode("utf-8"))
+    return sha1.hexdigest()
+
+
+# 阅文
+@robust_util.catch_exception
+def get_yuewen_order(st, et, account_list):
+    start_exec_seconds = date_util.getCurrentSecondTime()
+    total_order_list = ()
+    #account_list = platform_config_util.get_yuewen_account_list()
+
+    executor = ProcessPoolExecutor(max_workers=5)
+
+    futures = []
+    for account in account_list:
+        future = executor.submit(get_yuewen_order_task, st, et, account)
+        futures.append(future)
+
+    executor.shutdown(True)
+
+    for future in futures:
+        order_list = future.result()
+        if len(order_list) > 0:
+            total_order_list = order_list + total_order_list
+
+    print('阅文订单数量:', len(total_order_list), '执行时长(秒):', date_util.getCurrentSecondTime() - start_exec_seconds)
+    return total_order_list
+
+
+def get_yuewen_order_task(st, et, account):
+    order_list = ()
+
+    email = account[0]
+    appsecert = account[1]
+
+    url = 'https://open.yuewen.com/cpapi/wxRecharge/querychargelog'
+    version = 1
+    order_status = 2  # 已支付
+    page_count = 100  # 每页100条数据
+    start_time = st
+
+    for i in range((et - st) // 86400 + 1):
+        page = 1
+        last_min_id = ''
+        last_max_id = ''
+        total_count = ''
+        last_page = ''
+
+        while True:
+            if start_time == et:
+                break
+
+            end_time = min(start_time + 86400, et)
+            timestamp = int(time.time())
+
+            params = {
+                'email': email,
+                'version': version,
+                'timestamp': timestamp,
+                'start_time': start_time,
+                'end_time': end_time,
+                'page': page,
+                'order_status': order_status
+            }
+
+            if page > 1:
+                params['last_min_id'] = last_min_id
+                params['last_max_id'] = last_max_id
+                params['total_count'] = total_count
+                params['last_page'] = last_page
+
+            sorted_data = sorted(params.items())
+            str_params = ''
+            for k, v in sorted_data:
+                str_params = str_params + str(k) + str(v)
+
+            sign = md5(appsecert + str_params).upper()
+
+            # 放入签名
+            params['sign'] = sign
+            response_result_json = requests.get(url=url, params=params).json()
+
+            code = response_result_json['code']
+            ## 此接口有调用频率限制,相同查询条件每分钟仅能请求一次
+            if code != 0:
+                print('阅文查询充值接口异常:', response_result_json, '参数', params)
+                break
+                # if code == 10408:
+                #     if fail_count > 0:
+                #         break
+                #
+                #     sleep_seconds = random.randint(60, 70)
+                #     print('阅文获取订单数据线程休眠【{sleep_seconds}】秒,因为该接口有一分钟的限制'.format(sleep_seconds=sleep_seconds))
+                #     time.sleep(sleep_seconds)
+                #
+                #     print('重试一次')
+                #     fail_count = fail_count + 1
+                #     get_yuewen_order_task(st, et, account, fail_count)
+
+            response_data = response_result_json['data']
+            total_count = response_data['total_count']
+
+            if total_count == 0:
+                continue
+
+            last_min_id = response_data['min_id']
+            last_max_id = response_data['max_id']
+            last_page = response_data['page']
+            order_item_list = response_data['list']
+
+            for order_item in order_item_list:
+                order_time = order_item['order_time']
+                dtime = datetime.datetime.strptime(order_time, "%Y-%m-%d %H:%M:%S")
+                order_time_unix = int(time.mktime(dtime.timetuple()))
+                order_id = order_item['order_id']
+                if date_util.checkInterval(start_time, end_time, order_time_unix) == False:
+                    print('阅文账号【{key}】,查询时间【{start_time} - {end_time}】,有不符合该时间范围的订单,订单Id【{order_id}】的时间为【{order_time}】'
+                          .format(key=email, start_time=date_util.getSecondsToDatetime(start_time),
+                                  end_time=date_util.getSecondsToDatetime(end_time), order_id=order_id,
+                                  order_time=order_time))
+                    # continue
+
+                order = {}
+                order['date'] = ((order_time_unix + 8 * 3600) // 86400) * 86400 - 8 * 3600
+                order['platform'] = '阅文'
+                order['channel'] = order_item['app_name']
+                order['from_novel'] = order_item['book_name']
+                order['user_id'] = order_item['openid']
+                order['stage'] = ''
+                order['channel_id'] = 0
+                order['order_time'] = order_time
+                order['amount'] = order_item['amount']
+                order['reg_time'] = order_item['reg_time']
+                order['order_id'] = order_id
+
+                order = sorted(order.items(), key=lambda item: item[0])
+                order = dict(order)
+                order = tuple(order.values())
+                order_list = order_list + ((order),)
+
+            # print('阅文账号【{key}】, 查询时间【{start_time} - {end_time}】,当前页【{page}】,本次查询订单数量【{total_count}】'
+            #       .format(key=email, start_time=date_util.getSecondsToDatetime(start_time),
+            #               end_time=date_util.getSecondsToDatetime(end_time),page=page, total_count=total_count))
+
+            if int(page) >= math.ceil(total_count / int(page_count)):
+                break
+
+            page = page + 1
+
+        start_time = start_time + 86400  # 天数加1
+
+        # sleep_seconds = random.randint(60, 70)
+        # print('阅文获取订单数据线程休眠【{sleep_seconds}】秒,因为该接口有一分钟的限制'.format(sleep_seconds=sleep_seconds))
+        # time.sleep(sleep_seconds)
+
+    return order_list
+
+
+# 掌读
+@robust_util.catch_exception
+def get_zhangdu_order(st, et, account_list):
+    start_exec_seconds = date_util.getCurrentSecondTime()
+    total_order_list = ()
+    #account_list = platform_config_util.get_zhangdu_account_list()
+
+    executor = ProcessPoolExecutor(max_workers=5)
+
+    futures = []
+    for account in account_list:
+        future = executor.submit(get_zhangdu_order_task, st, et, account)
+        futures.append(future)
+    executor.shutdown(True)
+
+    for future in futures:
+        order_list = future.result()
+        if len(order_list) > 0:
+            total_order_list = order_list + total_order_list
+
+    print('掌读订单数量:', len(total_order_list), '执行时长(秒):', date_util.getCurrentSecondTime() - start_exec_seconds)
+    return total_order_list
+
+
+def get_zhangdu_order_task(st, et, account):
+    order_list = ()
+    url = 'https://api.zhangdu520.com/channel/getorder'
+
+    uid = account[0]
+    appsecert = account[1]
+    channel = account[2]
+    timestamp = int(time.time())
+    sign = md5(str(uid) + '&' + appsecert + '&' + str(timestamp))
+    starttime = st
+    timespace = 90 * 3600 * 24
+    endtime = min(et, st + timespace)
+
+    for x in range((et - st) // timespace + 1):  # 分时段
+        if x > 0:
+            print('掌读跨天数查询:', x)
+
+        page = 1
+        while True:
+            params = {
+                'uid': uid,
+                'timestamp': timestamp,
+                'sign': sign,
+                'starttime': starttime,
+                'endtime': endtime,
+                'page': page
+            }
+            response_result_json = requests.get(url=url, params=params).json()
+            if 'data' not in response_result_json.keys():
+                print('掌读账号【{key}】, 查询时间【{start_time} - {end_time}】,本次请求数据异常,响应报文【{result}】'
+                      .format(key=uid, start_time=date_util.getSecondsToDatetime(starttime),
+                                  end_time=date_util.getSecondsToDatetime(endtime), result=response_result_json))
+                break
+
+            result_data = response_result_json['data']
+            page_count = result_data['pageCount']
+            if page_count == 0:
+                break
+
+            order_item_list = result_data['list']
+            for order_item in order_item_list:
+                if order_item['status'] != '1':#1为已支付
+                    continue
+
+                order = {}
+                order['amount'] = order_item['amount']
+                order['channel_id'] = uid
+                order['order_id'] = str(order_item['orderno'])
+                order['order_time'] = order_item['ctime']
+                order['user_id'] = order_item['openid']
+                order['platform'] = '掌读'
+                order['channel'] = channel
+                order['reg_time'] = order_item['regtime']
+                order['from_novel'] = ''
+                order['stage'] = ''
+                order['date'] = ((int(order_item['ctime']) + 8 * 3600) // 86400) * 86400 - 8 * 3600
+
+                x = sorted(order.items(), key=lambda item: item[0])
+                x = dict(x)
+                x = tuple(x.values())
+                order_list = order_list + ((x),)
+
+            if page == page_count: #是最后一页
+                break
+
+            page = page + 1
+
+
+        starttime = starttime + timespace
+        endtime = min(et, starttime + timespace)
+
+    return order_list
+
+
+# 花生
+@robust_util.catch_exception
+def get_huasheng_order(st, et, account_list):
+    start_exec_seconds = date_util.getCurrentSecondTime()
+    total_order_list = ()
+    #account_list = platform_config_util.get_huasheng_account_list()
+
+    executor = ProcessPoolExecutor(max_workers=5)
+
+    futures = []
+    for account in account_list:
+        url = 'https://vip.rlcps.cn/api/getMerchants'
+        apiKey = str(account[0])
+        apiSecurity = account[1]
+        timestamp = str(int(time.time()))
+        sign = md5(apiKey + timestamp + apiSecurity).upper()
+        params = {
+            'apiKey': apiKey,
+            'apiSecurity': apiSecurity,
+            'timestamp': timestamp,
+            'sign': sign
+        }
+        response_result_json = requests.post(url, params).json()
+
+        if 'data' not in response_result_json.keys():
+            print('花生账号【{apiKey}】本次请求数据异常,响应报文【{result}】'.format(apiKey=apiKey, result=response_result_json))
+            continue
+
+        for merchant in response_result_json['data']:
+            future = executor.submit(get_huasheng_order_task, st, et, account, merchant)
+            futures.append(future)
+
+    executor.shutdown(True)
+
+    for future in futures:
+        order_list = future.result()
+        if len(order_list) > 0:
+            total_order_list = order_list + total_order_list
+
+    print('花生订单数量:', len(total_order_list), '执行时长(秒):', date_util.getCurrentSecondTime() - start_exec_seconds)
+    return total_order_list
+
+
+def get_huasheng_order_task(st, et, account, merchant):
+    order_list = ()
+
+    apiKey = str(account[0])
+    apiSecurity = account[1]
+    stage = account[2]
+    timestamp = str(int(time.time()))
+
+    order_url = 'https://vip.rlcps.cn/api/orderList'
+    merchant_id = merchant['merchant_id']
+    merchant_name = merchant['merchant_name']
+    start_time = st
+    limit = 500
+
+    for i in range((et - st) // 86400 + 1):
+        page = 1
+
+        while True:
+            date = time.strftime("%Y-%m-%d", time.localtime(start_time))
+            sign = md5(apiKey + date + str(merchant_id) + timestamp + apiSecurity).upper()
+            order_params = {
+                'apiKey': apiKey,
+                'apiSecurity': apiSecurity,
+                'timestamp': timestamp,
+                'date': date,
+                'merchant_id': merchant_id,
+                'sign': sign,
+                'page': page,
+                'limit': limit
+            }
+            response_result_json = requests.post(order_url, order_params).json()
+
+            if 'data' not in response_result_json.keys():
+                print('花生账号【{key}】, 查询时间【{date}】, 渠道【{merchant_id}:{merchant_name}】本次请求数据异常,响应报文【{result}】'
+                      .format(key=apiKey, date=date, merchant_id=merchant_id, merchant_name=merchant_name,
+                              result=response_result_json))
+                break
+
+            if len(response_result_json['data']) == 0:
+                break
+
+            total_count = response_result_json['count']
+            order_item_list = response_result_json['data']
+
+            for order_item in order_item_list:
+                if order_item['order_status'] == 1:  # 1为已支付
+                    order = {}
+                    ##dtime = datetime.datetime.strptime(order_item['pay_at'],"%Y-%m-%d")
+                    ##order['date']= ((int(time.mktime(dtime.timetuple()))+8*3600)//86400)*86400-8*3600
+                    order['user_id'] = order_item['openid']
+                    order['order_id'] = order_item['trans_id']
+                    order['order_time'] = order_item['pay_at']
+                    order['reg_time'] = order_item['join_at']
+                    # TODO 花生的时间需要统一
+                    order['date'] = (start_time + 8 * 3600) // 86400 * 86400 - 8 * 3600
+                    order['channel'] = merchant_name
+                    order['channel_id'] = merchant_id
+                    order['platform'] = '花生'
+                    order['stage'] = stage
+                    order['from_novel'] = order_item['book_name']
+                    order['amount'] = order_item['amount']
+
+                    order = sorted(order.items(), key=lambda item: item[0])
+                    order = dict(order)
+                    order = tuple(order.values())
+                    order_list = order_list + ((order),)
+
+            if int(page) >= math.ceil(total_count / int(limit)):
+                break
+
+            # print('花生账号【{key}】, 渠道【{merchant_id}:{merchant_name}】当前页【{page}】,本次查询订单数【{total_count}】,即将查询下一页'
+            #       .format(key=apiKey, merchant_id=merchant_id, merchant_name=merchant_name, page=page, total_count=total_count))
+
+            page = page + 1
+
+        start_time = start_time + 86400  # 天数加1
+
+    return order_list
+
+
+# 掌中云
+@robust_util.catch_exception
+def get_zhangzhongyun_order(st, et, account_list):
+    start_exec_seconds = date_util.getCurrentSecondTime()
+    total_order_list = ()
+    #account_list = platform_config_util.get_zhangzhongyun_account_list()
+
+    executor = ProcessPoolExecutor(max_workers=5)
+
+    futures = []
+    for account in account_list:
+        #url = 'https://openapi.818tu.com/partners/channel/channels/list?'
+        url = 'https://inovel.818tu.com/partners/channel/channels/list?'
+        key = account[0]
+        secert = account[1]
+        sign = md5(secert + 'key=' + key)
+        params = 'key=' + key + '&sign=' + sign
+        response_result_json = requests.get(url + params).json()  # 获取子渠道列表
+
+        if 'data' not in response_result_json.keys():
+            print('掌中云账号【{key}】本次请求数据异常,响应报文【{result}】'.format(key=key, result=response_result_json))
+            continue
+
+        items = response_result_json['data']['items']
+        for channel in items:
+            # 获取channel_id 后逐个拉取历史orders
+            future = executor.submit(get_zhangzhongyun_order_task, st, et, account, channel)
+            futures.append(future)
+
+    executor.shutdown(True)
+
+    for future in futures:
+        order_list = future.result()
+        if len(order_list) > 0:
+            total_order_list = order_list + total_order_list
+
+    print('掌中云订单数量:', len(total_order_list), '执行时长(秒):', date_util.getCurrentSecondTime() - start_exec_seconds)
+    return total_order_list
+
+
+def get_zhangzhongyun_order_task(st, et, account, channel):
+    # 掌中云的时间格式比较特殊,转换下
+    get_time, limit_time = platform_config_util.get_zhangzhongyun_query_time(st, et)
+
+    order_list = ()
+
+    key = account[0]
+    secert = account[1]
+    stage = account[2]
+
+    order_url = 'https://openapi.818tu.com/partners/channel/orders/list?'
+    channel_id = channel['id']
+    channel_name = channel['nickname']
+    status = str(1)
+    page = str(1)
+    per_page = str(1000)
+    gte = parse.urlencode({'created_at[gte]': get_time})  # gte就是ge 大于等于开始时间
+    lt = parse.urlencode({'created_at[lt]': limit_time})  # 小于 结束时间
+
+    while True:
+        sign = md5(secert + 'channel_id=' + str(
+            channel_id) + '&created_at[gte]=' + get_time + '&created_at[lt]=' + limit_time + '&key=' + key + '&page=' + str(
+            page) + '&per_page=' + per_page + '&status=' + status)
+        params = 'channel_id=' + str(channel_id) + '&' + gte + '&' + lt + '&page=' + str(
+            page) + '&per_page=' + per_page + '&status=' + status + '&key=' + key + '&sign=' + sign
+
+        response_result_json = requests.get(order_url + params).json()
+
+        if 'data' not in response_result_json.keys():
+            print('掌中云账号【{key}】,查询时间【{start_time} - {end_time}】,渠道【{channel_id}:{channel_name}】本次请求数据异常,响应报文【{result}】'
+                  .format(key=key, start_time=date_util.getSecondsToDatetime(get_time),
+                                  end_time=date_util.getSecondsToDatetime(limit_time),channel_id=channel_id, channel_name=channel_name, result=response_result_json))
+            break
+
+        total_count = response_result_json['data']['count']  # 总数量
+        order_item_list = response_result_json['data']['items']  # 订单列表
+
+        for order_item in order_item_list:
+            order = {}
+            order['user_id'] = str(order_item['member']['openid'])
+            order['channel'] = channel_name
+            order['reg_time'] = order_item['member']['created_at']
+            order['channel_id'] = channel_id
+            order['amount'] = round(order_item['price'] / 100, 2)
+            order['order_id'] = str(order_item['id'])
+            order['order_time'] = order_item['created_at']
+            order['platform'] = '掌中云'
+            order['stage'] = stage
+            dtime = datetime.datetime.strptime(order_item['created_at'][0:10], "%Y-%m-%d")
+            order['date'] = ((int(time.mktime(dtime.timetuple())) + 8 * 3600) // 86400) * 86400 - 8 * 3600
+
+            if str(order_item['from_novel_id']) != 'None':
+                order['from_novel'] = order_item['from_novel']['title']
+            else:
+                order['from_novel'] = 'None'
+
+            x = sorted(order.items(), key=lambda item: item[0])
+            x = dict(x)
+            x = tuple(x.values())
+            order_list = order_list + ((x),)
+
+        if int(page) >= math.ceil(total_count / int(per_page)):
+            break
+
+        # print('掌中云账号【{key}】, 渠道【{channel_id}:{channel_name}】当前页【{page}】,本次查询订单数【{total_count}】,即将查询下一页'
+        #       .format(key=key, channel_id=channel_id, channel_name=channel_name, page=page, total_count=total_count))
+
+        page = int(page) + 1
+
+    return order_list
+
+
+# 悠书阁
+@robust_util.catch_exception
+def get_youshuge_order(st, et, account_list):
+    start_exec_seconds = date_util.getCurrentSecondTime()
+    total_order_list = ()
+    #account_list = platform_config_util.get_youshuge_account_list()
+
+    executor = ProcessPoolExecutor(max_workers=5)
+
+    futures = []
+    for account in account_list:
+        future = executor.submit(get_youshuge_order_task, st, et, account)
+        futures.append(future)
+
+    executor.shutdown(True)
+
+    for future in futures:
+        order_list = future.result()
+        if len(order_list) > 0:
+            total_order_list = order_list + total_order_list
+
+    print('悠书阁订单数量:', len(total_order_list), '执行时长(秒):', date_util.getCurrentSecondTime() - start_exec_seconds)
+    return total_order_list
+
+
+def get_youshuge_order_task(st, et, account):
+    # 悠书阁的查询end_date时间必须要大于start_date
+    start_date, end_date = platform_config_util.get_youshuge_order_query_time(st, et)
+
+    order_list = ()
+
+    host_name = account[0]
+    channel_id = int(account[1])
+    secert_key = account[2]
+    channel = account[3]
+    stage = account[4]
+
+    url = 'https://novel.youshuge.com/v2/open/orders'
+    page = 1
+    timestamp = int(time.time())
+
+    while True:
+        sign = md5('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).upper()
+        params = {
+            'sign': sign,
+            'host_name': host_name,
+            'time': timestamp,
+            'channel_id': channel_id,
+            'page': page,
+            'pay_status': 1,
+            'start_date': start_date,
+            'end_date': end_date
+        }
+        respone = requests.post(url, params)
+        if respone.status_code == 400:
+            print('悠书阁订单查询接口respone', respone)
+
+        response_result_json = respone.json()
+        if 'data' not in response_result_json.keys():
+            print('悠书阁账号【{key}】,查询时间【{start_time} - {end_time}】,渠道【{channel_id}:{channel_name}】本次请求数据异常,响应报文【{result}】'
+                  .format(key=host_name, start_time=start_date, end_time=end_date, channel_id=channel_id, result=response_result_json))
+            break
+
+        order_item_list = response_result_json['data']
+        if len(order_item_list) == 0:
+            break
+
+        for order_item in order_item_list:
+            order = {}
+            dtime = datetime.datetime.strptime(order_item['create_time'][0:10], "%Y-%m-%d")
+            order['date'] = ((int(
+                time.mktime(dtime.timetuple())) + 8 * 3600) // 86400) * 86400 - 8 * 3600
+            order['order_id'] = order_item['order_num']
+            order['amount'] = round(int(order_item['price']) / 100, 2)
+            order['order_time'] = order_item['create_time']
+            order['channel'] = channel
+            order['from_novel'] = order_item['book_name']
+            order['stage'] = stage
+            order['user_id'] = order_item['openid']
+            order['channel_id'] = channel_id
+            order['platform'] = '悠书阁'
+            order['reg_time'] = order_item['reg_time']
+
+            order = sorted(order.items(), key=lambda item: item[0])
+            order = dict(order)
+            order = tuple(order.values())
+            order_list = order_list + ((order),)
+
+        total_count = order_item_list[0]['count']
+
+        if page == total_count:
+            break
+
+        page = page + 1
+
+
+    return order_list
+
+
+def build_ysg_order_data(channel, channel_id, result_json, stage):
+    order_list = ()
+    if 'data' in result_json.keys():
+        data = result_json['data']
+        if len(data) > 0:
+            for x in data:
+                y = {}
+                dtime = datetime.datetime.strptime(x['create_time'][0:10], "%Y-%m-%d")
+                y['date'] = ((int(
+                    time.mktime(dtime.timetuple())) + 8 * 3600) // 86400) * 86400 - 8 * 3600
+                y['order_id'] = x['order_num']
+                y['amount'] = round(int(x['price']) / 100, 2)
+                y['order_time'] = x['create_time']
+                y['channel'] = channel
+                y['from_novel'] = x['book_name']
+                y['stage'] = stage
+                y['user_id'] = x['openid']
+                y['channel_id'] = channel_id
+                y['platform'] = '悠书阁'
+                y['reg_time'] = x['reg_time']
+
+                y = sorted(y.items(), key=lambda item: item[0])
+                y = dict(y)
+                y = tuple(y.values())
+                order_list = order_list + ((y),)
+    return order_list
+

+ 661 - 0
dgp/tests/util/platform_order_api_util_bk20201110.py

@@ -0,0 +1,661 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+__title__ = '各个平台的订单API接口'
+
+@Time    : 2020/9/30 12:33
+@Author  : Kenny-PC
+@Software: PyCharm
+
+# code is far away from bugs with the god animal protecting
+    I love animals. They taste delicious.
+              ┏┓      ┏┓
+            ┏┛┻━━━┛┻┓
+            ┃      ☃      ┃
+            ┃  ┳┛  ┗┳  ┃
+            ┃      ┻      ┃
+            ┗━┓      ┏━┛
+                ┃      ┗━━━┓
+                ┃  神兽保佑    ┣┓
+                ┃ 永无BUG!   ┏┛
+                ┗┓┓┏━┳┓┏┛
+                  ┃┫┫  ┃┫┫
+                  ┗┻┛  ┗┻┛
+"""
+
+import datetime
+import hashlib
+import math
+import time
+from concurrent.futures import ProcessPoolExecutor
+from urllib import parse
+
+import requests
+
+from util import date_util
+from util import platform_config_util
+from util import robust_util
+
+
+# md5加密,使用utf-8编码
+def md5(s):
+    md5 = hashlib.md5()
+    md5.update(s.encode("utf-8"))
+    return md5.hexdigest()
+
+
+# 阅文
+@robust_util.catch_exception
+def get_yuewen_order(st, et):
+    start_exec_seconds = date_util.getCurrentSecondTime()
+    total_order_list = ()
+    account_list = platform_config_util.get_yuewen_account_list()
+
+    executor = ProcessPoolExecutor(max_workers=5)
+
+    futures = []
+    for account in account_list:
+        future = executor.submit(get_yuewen_order_task, st, et, account)
+        futures.append(future)
+
+    executor.shutdown(True)
+
+    for future in futures:
+        order_list = future.result()
+        if len(order_list) > 0:
+            total_order_list = order_list + total_order_list
+
+    print('阅文订单数量:', len(total_order_list), '执行时长(秒):', date_util.getCurrentSecondTime() - start_exec_seconds)
+    return total_order_list
+
+
+def get_yuewen_order_task(st, et, account):
+    order_list = ()
+
+    email = account[0]
+    appsecert = account[1]
+
+    url = 'https://open.yuewen.com/cpapi/wxRecharge/querychargelog'
+    version = 1
+    order_status = 2  # 已支付
+    page_count = 100  # 每页100条数据
+    start_time = st
+
+    for i in range((et - st) // 86400 + 1):
+        page = 1
+        last_min_id = ''
+        last_max_id = ''
+        total_count = ''
+        last_page = ''
+
+        while True:
+            if start_time == et:
+                break
+
+            end_time = min(start_time + 86400, et)
+            timestamp = int(time.time())
+
+            params = {
+                'email': email,
+                'version': version,
+                'timestamp': timestamp,
+                'start_time': start_time,
+                'end_time': end_time,
+                'page': page,
+                'order_status': order_status
+            }
+
+            if page > 1:
+                params['last_min_id'] = last_min_id
+                params['last_max_id'] = last_max_id
+                params['total_count'] = total_count
+                params['last_page'] = last_page
+
+            sorted_data = sorted(params.items())
+            str_params = ''
+            for k, v in sorted_data:
+                str_params = str_params + str(k) + str(v)
+
+            sign = md5(appsecert + str_params).upper()
+
+            # 放入签名
+            params['sign'] = sign
+            response_result_json = requests.get(url=url, params=params).json()
+
+            code = response_result_json['code']
+            ## 此接口有调用频率限制,相同查询条件每分钟仅能请求一次
+            if code != 0:
+                print('阅文查询充值接口异常:', response_result_json, '参数', params)
+                break
+                # if code == 10408:
+                #     if fail_count > 0:
+                #         break
+                #
+                #     sleep_seconds = random.randint(60, 70)
+                #     print('阅文获取订单数据线程休眠【{sleep_seconds}】秒,因为该接口有一分钟的限制'.format(sleep_seconds=sleep_seconds))
+                #     time.sleep(sleep_seconds)
+                #
+                #     print('重试一次')
+                #     fail_count = fail_count + 1
+                #     get_yuewen_order_task(st, et, account, fail_count)
+
+            response_data = response_result_json['data']
+            total_count = response_data['total_count']
+
+            if total_count == 0:
+                continue
+
+            last_min_id = response_data['min_id']
+            last_max_id = response_data['max_id']
+            last_page = response_data['page']
+            order_item_list = response_data['list']
+
+            for order_item in order_item_list:
+                order_time = order_item['order_time']
+                dtime = datetime.datetime.strptime(order_time, "%Y-%m-%d %H:%M:%S")
+                order_time_unix = int(time.mktime(dtime.timetuple()))
+                order_id = order_item['order_id']
+                if date_util.checkInterval(start_time, end_time, order_time_unix) == False:
+                    print('阅文账号【{key}】,查询时间【{start_time} - {end_time}】,有不符合该时间范围的订单,订单Id【{order_id}】的时间为【{order_time}】'
+                          .format(key=email, start_time=date_util.getSecondsToDatetime(start_time),
+                                  end_time=date_util.getSecondsToDatetime(end_time), order_id=order_id,
+                                  order_time=order_time))
+                    # continue
+
+                order = {}
+                order['date'] = ((order_time_unix + 8 * 3600) // 86400) * 86400 - 8 * 3600
+                order['platform'] = '阅文'
+                order['channel'] = order_item['app_name']
+                order['from_novel'] = order_item['book_name']
+                order['user_id'] = order_item['openid']
+                order['stage'] = ''
+                order['channel_id'] = 0
+                order['order_time'] = order_time
+                order['amount'] = order_item['amount']
+                order['reg_time'] = order_item['reg_time']
+                order['order_id'] = order_id
+
+                order = sorted(order.items(), key=lambda item: item[0])
+                order = dict(order)
+                order = tuple(order.values())
+                order_list = order_list + ((order),)
+
+            # print('阅文账号【{key}】, 查询时间【{start_time} - {end_time}】,当前页【{page}】,本次查询订单数量【{total_count}】'
+            #       .format(key=email, start_time=date_util.getSecondsToDatetime(start_time),
+            #               end_time=date_util.getSecondsToDatetime(end_time),page=page, total_count=total_count))
+
+            if int(page) >= math.ceil(total_count / int(page_count)):
+                break
+
+            page = page + 1
+
+        start_time = start_time + 86400  # 天数加1
+
+        # sleep_seconds = random.randint(60, 70)
+        # print('阅文获取订单数据线程休眠【{sleep_seconds}】秒,因为该接口有一分钟的限制'.format(sleep_seconds=sleep_seconds))
+        # time.sleep(sleep_seconds)
+
+    return order_list
+
+
+# 掌读
+@robust_util.catch_exception
+def get_zhangdu_order(st, et):
+    start_exec_seconds = date_util.getCurrentSecondTime()
+    total_order_list = ()
+    account_list = platform_config_util.get_zhangdu_account_list()
+
+    executor = ProcessPoolExecutor(max_workers=5)
+
+    futures = []
+    for account in account_list:
+        future = executor.submit(get_zhangdu_order_task, st, et, account)
+        futures.append(future)
+    executor.shutdown(True)
+
+    for future in futures:
+        order_list = future.result()
+        if len(order_list) > 0:
+            total_order_list = order_list + total_order_list
+
+    print('掌读订单数量:', len(total_order_list), '执行时长(秒):', date_util.getCurrentSecondTime() - start_exec_seconds)
+    return total_order_list
+
+
+def get_zhangdu_order_task(st, et, account):
+    order_list = ()
+    url = 'https://api.zhangdu520.com/channel/getorder'
+
+    uid = account[0]
+    appsecert = account[1]
+    channel = account[2]
+    timestamp = int(time.time())
+    sign = md5(str(uid) + '&' + appsecert + '&' + str(timestamp))
+    starttime = st
+    timespace = 90 * 3600 * 24
+    endtime = min(et, st + timespace)
+
+    for x in range((et - st) // timespace + 1):  # 分时段
+        if x > 0:
+            print('掌读跨天数查询:', x)
+
+        page = 1
+        while True:
+            params = {
+                'uid': uid,
+                'timestamp': timestamp,
+                'sign': sign,
+                'starttime': starttime,
+                'endtime': endtime,
+                'page': page
+            }
+            response_result_json = requests.get(url=url, params=params).json()
+            if 'data' not in response_result_json.keys():
+                print('掌读账号【{key}】, 查询时间【{start_time} - {end_time}】,本次请求数据异常,响应报文【{result}】'
+                      .format(key=uid, start_time=date_util.getSecondsToDatetime(starttime),
+                                  end_time=date_util.getSecondsToDatetime(endtime), result=response_result_json))
+                break
+
+            result_data = response_result_json['data']
+            page_count = result_data['pageCount']
+            if page_count == 0:
+                break
+
+            order_item_list = result_data['list']
+            for order_item in order_item_list:
+                if order_item['status'] != '1':#1为已支付
+                    continue
+
+                order = {}
+                order['amount'] = order_item['amount']
+                order['channel_id'] = uid
+                order['order_id'] = str(order_item['orderno'])
+                order['order_time'] = order_item['ctime']
+                order['user_id'] = order_item['openid']
+                order['platform'] = '掌读'
+                order['channel'] = channel
+                order['reg_time'] = order_item['regtime']
+                order['from_novel'] = ''
+                order['stage'] = ''
+                order['date'] = ((int(order_item['ctime']) + 8 * 3600) // 86400) * 86400 - 8 * 3600
+
+                x = sorted(order.items(), key=lambda item: item[0])
+                x = dict(x)
+                x = tuple(x.values())
+                order_list = order_list + ((x),)
+
+            if page == page_count: #是最后一页
+                break
+
+            page = page + 1
+
+
+        starttime = starttime + timespace
+        endtime = min(et, starttime + timespace)
+
+    return order_list
+
+
+# 花生
+@robust_util.catch_exception
+def get_huasheng_order(st, et):
+    start_exec_seconds = date_util.getCurrentSecondTime()
+    total_order_list = ()
+    account_list = platform_config_util.get_huasheng_account_list()
+
+    executor = ProcessPoolExecutor(max_workers=5)
+
+    futures = []
+    for account in account_list:
+        url = 'https://vip.rlcps.cn/api/getMerchants'
+        apiKey = str(account[0])
+        apiSecurity = account[1]
+        timestamp = str(int(time.time()))
+        sign = md5(apiKey + timestamp + apiSecurity).upper()
+        params = {
+            'apiKey': apiKey,
+            'apiSecurity': apiSecurity,
+            'timestamp': timestamp,
+            'sign': sign
+        }
+        response_result_json = requests.post(url, params).json()
+
+        if 'data' not in response_result_json.keys():
+            print('花生账号【{apiKey}】本次请求数据异常,响应报文【{result}】'.format(apiKey=apiKey, result=response_result_json))
+            continue
+
+        for merchant in response_result_json['data']:
+            future = executor.submit(get_huasheng_order_task, st, et, account, merchant)
+            futures.append(future)
+
+    executor.shutdown(True)
+
+    for future in futures:
+        order_list = future.result()
+        if len(order_list) > 0:
+            total_order_list = order_list + total_order_list
+
+    print('花生订单数量:', len(total_order_list), '执行时长(秒):', date_util.getCurrentSecondTime() - start_exec_seconds)
+    return total_order_list
+
+
+def get_huasheng_order_task(st, et, account, merchant):
+    order_list = ()
+
+    apiKey = str(account[0])
+    apiSecurity = account[1]
+    stage = account[2]
+    timestamp = str(int(time.time()))
+
+    order_url = 'https://vip.rlcps.cn/api/orderList'
+    merchant_id = merchant['merchant_id']
+    merchant_name = merchant['merchant_name']
+    start_time = st
+    limit = 500
+
+    for i in range((et - st) // 86400 + 1):
+        page = 1
+
+        while True:
+            date = time.strftime("%Y-%m-%d", time.localtime(start_time))
+            sign = md5(apiKey + date + str(merchant_id) + timestamp + apiSecurity).upper()
+            order_params = {
+                'apiKey': apiKey,
+                'apiSecurity': apiSecurity,
+                'timestamp': timestamp,
+                'date': date,
+                'merchant_id': merchant_id,
+                'sign': sign,
+                'page': page,
+                'limit': limit
+            }
+            response_result_json = requests.post(order_url, order_params).json()
+
+            if 'data' not in response_result_json.keys():
+                print('花生账号【{key}】, 查询时间【{date}】, 渠道【{merchant_id}:{merchant_name}】本次请求数据异常,响应报文【{result}】'
+                      .format(key=apiKey, date=date, merchant_id=merchant_id, merchant_name=merchant_name,
+                              result=response_result_json))
+                break
+
+            if len(response_result_json['data']) == 0:
+                break
+
+            total_count = response_result_json['count']
+            order_item_list = response_result_json['data']
+
+            for order_item in order_item_list:
+                if order_item['order_status'] == 1:  # 1为已支付
+                    order = {}
+                    ##dtime = datetime.datetime.strptime(order_item['pay_at'],"%Y-%m-%d")
+                    ##order['date']= ((int(time.mktime(dtime.timetuple()))+8*3600)//86400)*86400-8*3600
+                    order['user_id'] = order_item['openid']
+                    order['order_id'] = order_item['trans_id']
+                    order['order_time'] = order_item['pay_at']
+                    order['reg_time'] = order_item['join_at']
+                    # TODO 花生的时间需要统一
+                    order['date'] = (start_time + 8 * 3600) // 86400 * 86400 - 8 * 3600
+                    order['channel'] = merchant_name
+                    order['channel_id'] = merchant_id
+                    order['platform'] = '花生'
+                    order['stage'] = stage
+                    order['from_novel'] = order_item['book_name']
+                    order['amount'] = order_item['amount']
+
+                    order = sorted(order.items(), key=lambda item: item[0])
+                    order = dict(order)
+                    order = tuple(order.values())
+                    order_list = order_list + ((order),)
+
+            if int(page) >= math.ceil(total_count / int(limit)):
+                break
+
+            # print('花生账号【{key}】, 渠道【{merchant_id}:{merchant_name}】当前页【{page}】,本次查询订单数【{total_count}】,即将查询下一页'
+            #       .format(key=apiKey, merchant_id=merchant_id, merchant_name=merchant_name, page=page, total_count=total_count))
+
+            page = page + 1
+
+        start_time = start_time + 86400  # 天数加1
+
+    return order_list
+
+
+# 掌中云
+@robust_util.catch_exception
+def get_zhangzhongyun_order(st, et):
+    start_exec_seconds = date_util.getCurrentSecondTime()
+    total_order_list = ()
+    account_list = platform_config_util.get_zhangzhongyun_account_list()
+
+    executor = ProcessPoolExecutor(max_workers=5)
+
+    futures = []
+    for account in account_list:
+        #url = 'https://openapi.818tu.com/partners/channel/channels/list?'
+        url = 'https://inovel.818tu.com/partners/channel/channels/list?'
+        key = account[0]
+        secert = account[1]
+        sign = md5(secert + 'key=' + key)
+        params = 'key=' + key + '&sign=' + sign
+        response_result_json = requests.get(url + params).json()  # 获取子渠道列表
+
+        if 'data' not in response_result_json.keys():
+            print('掌中云账号【{key}】本次请求数据异常,响应报文【{result}】'.format(key=key, result=response_result_json))
+            continue
+
+        items = response_result_json['data']['items']
+        for channel in items:
+            # 获取channel_id 后逐个拉取历史orders
+            future = executor.submit(get_zhangzhongyun_order_task, st, et, account, channel)
+            futures.append(future)
+
+    executor.shutdown(True)
+
+    for future in futures:
+        order_list = future.result()
+        if len(order_list) > 0:
+            total_order_list = order_list + total_order_list
+
+    print('掌中云订单数量:', len(total_order_list), '执行时长(秒):', date_util.getCurrentSecondTime() - start_exec_seconds)
+    return total_order_list
+
+
+def get_zhangzhongyun_order_task(st, et, account, channel):
+    # 掌中云的时间格式比较特殊,转换下
+    get_time, limit_time = platform_config_util.get_zhangzhongyun_query_time(st, et)
+
+    order_list = ()
+
+    key = account[0]
+    secert = account[1]
+    stage = account[2]
+
+    order_url = 'https://openapi.818tu.com/partners/channel/orders/list?'
+    channel_id = channel['id']
+    channel_name = channel['nickname']
+    status = str(1)
+    page = str(1)
+    per_page = str(1000)
+    gte = parse.urlencode({'created_at[gte]': get_time})  # gte就是ge 大于等于开始时间
+    lt = parse.urlencode({'created_at[lt]': limit_time})  # 小于 结束时间
+
+    while True:
+        sign = md5(secert + 'channel_id=' + str(
+            channel_id) + '&created_at[gte]=' + get_time + '&created_at[lt]=' + limit_time + '&key=' + key + '&page=' + str(
+            page) + '&per_page=' + per_page + '&status=' + status)
+        params = 'channel_id=' + str(channel_id) + '&' + gte + '&' + lt + '&page=' + str(
+            page) + '&per_page=' + per_page + '&status=' + status + '&key=' + key + '&sign=' + sign
+
+        response_result_json = requests.get(order_url + params).json()
+
+        if 'data' not in response_result_json.keys():
+            print('掌中云账号【{key}】,查询时间【{start_time} - {end_time}】,渠道【{channel_id}:{channel_name}】本次请求数据异常,响应报文【{result}】'
+                  .format(key=key, start_time=date_util.getSecondsToDatetime(get_time),
+                                  end_time=date_util.getSecondsToDatetime(limit_time),channel_id=channel_id, channel_name=channel_name, result=response_result_json))
+            break
+
+        total_count = response_result_json['data']['count']  # 总数量
+        order_item_list = response_result_json['data']['items']  # 订单列表
+
+        for order_item in order_item_list:
+            order = {}
+            order['user_id'] = str(order_item['member']['openid'])
+            order['channel'] = channel_name
+            order['reg_time'] = order_item['member']['created_at']
+            order['channel_id'] = channel_id
+            order['amount'] = round(order_item['price'] / 100, 2)
+            order['order_id'] = str(order_item['id'])
+            order['order_time'] = order_item['created_at']
+            order['platform'] = '掌中云'
+            order['stage'] = stage
+            dtime = datetime.datetime.strptime(order_item['created_at'][0:10], "%Y-%m-%d")
+            order['date'] = ((int(time.mktime(dtime.timetuple())) + 8 * 3600) // 86400) * 86400 - 8 * 3600
+
+            if str(order_item['from_novel_id']) != 'None':
+                order['from_novel'] = order_item['from_novel']['title']
+            else:
+                order['from_novel'] = 'None'
+
+            x = sorted(order.items(), key=lambda item: item[0])
+            x = dict(x)
+            x = tuple(x.values())
+            order_list = order_list + ((x),)
+
+        if int(page) >= math.ceil(total_count / int(per_page)):
+            break
+
+        # print('掌中云账号【{key}】, 渠道【{channel_id}:{channel_name}】当前页【{page}】,本次查询订单数【{total_count}】,即将查询下一页'
+        #       .format(key=key, channel_id=channel_id, channel_name=channel_name, page=page, total_count=total_count))
+
+        page = int(page) + 1
+
+    return order_list
+
+
+# 悠书阁
+@robust_util.catch_exception
+def get_youshuge_order(st, et):
+    start_exec_seconds = date_util.getCurrentSecondTime()
+    total_order_list = ()
+    account_list = platform_config_util.get_youshuge_account_list()
+
+    executor = ProcessPoolExecutor(max_workers=5)
+
+    futures = []
+    for account in account_list:
+        future = executor.submit(get_youshuge_order_task, st, et, account)
+        futures.append(future)
+
+    executor.shutdown(True)
+
+    for future in futures:
+        order_list = future.result()
+        if len(order_list) > 0:
+            total_order_list = order_list + total_order_list
+
+    print('悠书阁订单数量:', len(total_order_list), '执行时长(秒):', date_util.getCurrentSecondTime() - start_exec_seconds)
+    return total_order_list
+
+
+def get_youshuge_order_task(st, et, account):
+    # 悠书阁的查询end_date时间必须要大于start_date
+    start_date, end_date = platform_config_util.get_youshuge_order_query_time(st, et)
+
+    order_list = ()
+
+    host_name = account[0]
+    channel_id = int(account[1])
+    secert_key = account[2]
+    channel = account[3]
+    stage = account[4]
+
+    url = 'https://novel.youshuge.com/v2/open/orders'
+    page = 1
+    timestamp = int(time.time())
+
+    while True:
+        sign = md5('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).upper()
+        params = {
+            'sign': sign,
+            'host_name': host_name,
+            'time': timestamp,
+            'channel_id': channel_id,
+            'page': page,
+            'pay_status': 1,
+            'start_date': start_date,
+            'end_date': end_date
+        }
+        respone = requests.post(url, params)
+        if respone.status_code == 400:
+            print('悠书阁订单查询接口respone', respone)
+
+        response_result_json = respone.json()
+        if 'data' not in response_result_json.keys():
+            print('悠书阁账号【{key}】,查询时间【{start_time} - {end_time}】,渠道【{channel_id}:{channel_name}】本次请求数据异常,响应报文【{result}】'
+                  .format(key=host_name, start_time=start_date, end_time=end_date, channel_id=channel_id, result=response_result_json))
+            break
+
+        order_item_list = response_result_json['data']
+        if len(order_item_list) == 0:
+            break
+
+        for order_item in order_item_list:
+            order = {}
+            dtime = datetime.datetime.strptime(order_item['create_time'][0:10], "%Y-%m-%d")
+            order['date'] = ((int(
+                time.mktime(dtime.timetuple())) + 8 * 3600) // 86400) * 86400 - 8 * 3600
+            order['order_id'] = order_item['order_num']
+            order['amount'] = round(int(order_item['price']) / 100, 2)
+            order['order_time'] = order_item['create_time']
+            order['channel'] = channel
+            order['from_novel'] = order_item['book_name']
+            order['stage'] = stage
+            order['user_id'] = order_item['openid']
+            order['channel_id'] = channel_id
+            order['platform'] = '悠书阁'
+            order['reg_time'] = order_item['reg_time']
+
+            order = sorted(order.items(), key=lambda item: item[0])
+            order = dict(order)
+            order = tuple(order.values())
+            order_list = order_list + ((order),)
+
+        total_count = order_item_list[0]['count']
+
+        if page == total_count:
+            break
+
+        page = page + 1
+
+
+    return order_list
+
+
+def build_ysg_order_data(channel, channel_id, result_json, stage):
+    order_list = ()
+    if 'data' in result_json.keys():
+        data = result_json['data']
+        if len(data) > 0:
+            for x in data:
+                y = {}
+                dtime = datetime.datetime.strptime(x['create_time'][0:10], "%Y-%m-%d")
+                y['date'] = ((int(
+                    time.mktime(dtime.timetuple())) + 8 * 3600) // 86400) * 86400 - 8 * 3600
+                y['order_id'] = x['order_num']
+                y['amount'] = round(int(x['price']) / 100, 2)
+                y['order_time'] = x['create_time']
+                y['channel'] = channel
+                y['from_novel'] = x['book_name']
+                y['stage'] = stage
+                y['user_id'] = x['openid']
+                y['channel_id'] = channel_id
+                y['platform'] = '悠书阁'
+                y['reg_time'] = x['reg_time']
+
+                y = sorted(y.items(), key=lambda item: item[0])
+                y = dict(y)
+                y = tuple(y.values())
+                order_list = order_list + ((y),)
+    return order_list
+

+ 0 - 35
dgp/tests/util/platform_util.py

@@ -1,35 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-"""
-__title__ = '平台操作工具类'
-
-@Time    : 2020/9/26 21:51
-@Author  : Kenny-PC
-@Software: PyCharm
-
-# code is far away from bugs with the god animal protecting
-    I love animals. They taste delicious.
-              ┏┓      ┏┓
-            ┏┛┻━━━┛┻┓
-            ┃      ☃      ┃
-            ┃  ┳┛  ┗┳  ┃
-            ┃      ┻      ┃
-            ┗━┓      ┏━┛
-                ┃      ┗━━━┓
-                ┃  神兽保佑    ┣┓
-                ┃ 永无BUG!   ┏┛
-                ┗┓┓┏━┳┓┏┛
-                  ┃┫┫  ┃┫┫
-                  ┗┻┛  ┗┻┛
-"""
-
-import time
-
-
-def getZzyQueryTime(st_unix):
-    """
-    description:  掌中云的时间格式比较,需要转换下
-    return:       2020-09-25T00:00:00+08:00 -> str
-    """
-    return time.strftime("%Y-%m-%dT%H:%M:%S", time.localtime(st_unix)) + '+08:00'

+ 44 - 0
dgp/tests/util/robust_util.py

@@ -0,0 +1,44 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+__title__ = '鲁棒性工具类'
+
+@Time    : 2020/9/30 14:51
+@Author  : zhengwangeng
+@Software: PyCharm
+
+# code is far away from bugs with the god animal protecting
+    I love animals. They taste delicious.
+              ┏┓      ┏┓
+            ┏┛┻━━━┛┻┓
+            ┃      ☃      ┃
+            ┃  ┳┛  ┗┳  ┃
+            ┃      ┻      ┃
+            ┗━┓      ┏━┛
+                ┃      ┗━━━┓
+                ┃  神兽保佑    ┣┓
+                ┃ 永无BUG!   ┏┛
+                ┗┓┓┏━┳┓┏┛
+                  ┃┫┫  ┃┫┫
+                  ┗┻┛  ┗┻┛
+"""
+
+import sys
+
+import traceback
+
+
+# 异常处理装饰器
+def catch_exception(actual_do):
+    def add_robust(*args, **keyargs):
+        try:
+            return actual_do(*args, **keyargs)
+        except Exception as err:
+            # print('Error execute: %s' % actual_do.__name__)
+            info = sys.exc_info()[2].tb_frame.f_back
+            temp = "exception:filename:{}\tlines:{}\tfuncation:{}\terror:{}"
+            # print(temp.format(info.f_code.co_filename, info.f_lineno, actual_do.__name__, repr(err)))
+            traceback.print_exc()
+
+    return add_robust

+ 950 - 5
dgp/token_list.py

@@ -5,7 +5,590 @@ Created on Wed Jul 22 14:40:36 2020
 
 @author: chencong
 """
-token_list_qq=[['11262880','','06d454c873ecfd02836056392c8f8477','7934e0d2f48b7a9e35f990a147c024a7'],
+token_list_qq=[
+
+
+['18614402','','2d0cbae1f0cf50d967b5671b1cb065fb','97b20d002d8484863f02bbca75a03f9c','琉焰文轩','趣程15期','黄鹏','七悦','天命神卦'],
+['18614403','','657dad5203cf09b66ab2e554d5cc173e','dcb36ac4044af69ce83966a9a8b4ebcc','琉焰文轩','趣程15期','黄鹏','七悦','天命神卦'],
+['18614404','','186e5283667cdc4861a043bacfa5201a','11b7907c0b5b5396fdfeadc91448693c','琉焰文轩','趣程15期','黄鹏','七悦','天命神卦'],
+['18614405','','d47559ada2ebf2482f35d79f5ef2140c','de22024ad5290cb0910a80cc2a3b20b4','琉焰文轩','趣程15期','黄鹏','七悦','天命神卦'],
+['18614406','','80e419e91e888ede5952281bde3c5ebb','7810fde7a2c65721742eb3d72ebaa169','琉焰文轩','趣程15期','黄鹏','七悦','天命神卦'],
+['18614407','','06cde9f65ea83eb1c2c2f3a207bec13e','921def958943660fd89dfbb2c8b37a5f','琉焰文轩','趣程15期','黄鹏','七悦','天命神卦'],
+['18614409','','13072230fca1fa4474b7906c542c23b0','e4da0c3986b49a0afaa19e147be59014','琉焰文轩','趣程15期','黄鹏','七悦','天命神卦'],
+['18614408','','ab607f53b3ca2abc43aafd20f3780f05','fb3e07816c8fa8ea77ccfaefc78a3741','琉焰文轩','趣程15期','黄鹏','七悦','天命神卦'],
+['18614410','','abb0aad75d6d2954ed5d51d8c81672e4','589bc2e75983398e35c7b4c59430d932','琉焰文轩','趣程15期','黄鹏','七悦','天命神卦'],
+['18614411','','224588adb60135f1fbe03df21a6d12fb','34fb8539dafa563cbf5a56c8e860c89f','琉焰文轩','趣程15期','黄鹏','七悦','天命神卦'],
+['18464459','','b76bc2c252b372a8564f8d49e93195df','c01d4409038d7d44276fad95d4928a66','凌霄文海','趣程15期','王晖','阳光','绝世无双'],
+['18464458','','8ccf9d004fd871ec968077261978b0b8','d9df61b1a5a32635d0d759b5543d56a3','凌霄文海','趣程15期','王晖','阳光','绝世无双'],
+['18464457','','984422c1384d1e6727a0ce5f4e8931f9','81bd8f39f77b8778c98286b71a50aff7','凌霄文海','趣程15期','王晖','阳光','绝世无双'],
+['18464456','','b6063b689b6e994ac72ce441faad11b1','fdcf9c6caa8d905c48e8715411b73b54','凌霄文海','趣程15期','王晖','阳光','绝世无双'],
+['17800812','','072e60ea8e02a853a19bd69bc3d073c4','6588d0842760a9921b3c0e98be75c27b','惊涛书海','趣程26期','董平','花生','无敌医神'],
+['17800810','','34d7919e185c42292b14f9331aa604a3','f3e02276070d910dad481ef24d99601a','惊涛书海','趣程26期','董平','花生','无敌医神'],
+['17800808','','53da7c827c698838abe50f447771bc9b','89835a40004bf1b663308dc100c3be8b','惊涛书海','趣程26期','董平','花生','无敌医神'],
+
+
+['17801399','','608cb1453e145e8494233acfca98fa3f','8f61b62cee4f521529320760c7fdcf12','东云文海','趣程15期','张琦','阳光','绝世无双'],
+['17801361','','c7063d84606237988b2739dc56f7d8e4','7baa7cba57133e6a0064cd7511d046ef','沙云书海','趣程15期','张琦','掌中云','烈血狂枭'],
+['17801360','','874415cd2346de065253a56fc4557d53','bed4f84e0c7efef02f354ebb26ebae63','沙云书海','趣程15期','张琦','掌中云','烈血狂枭'],
+['17801362','','e41da7db2f907626ea633e5a60b61cf9','5f161e02ca4d46fadac9af4265dc6428','百瀚文苑','趣程15期','张琦','文鼎','都市之草根崛起'],
+
+
+['18589696','','094c9d60c4aa0a9ed098dce4ba614f0b','48f4f23b639a63800d5060478e8e52f8','景阳文阅','趣程26期','张婉','文鼎','时代之王'],
+['18589697','','f1b96a78d9a4c9c40b6424703df017f3','fe0a72972cc7311d47910c3405b699e8','景阳文阅','趣程26期','张婉','文鼎','时代之王'],
+['18589698','','e2dcb48eab60d17c2d52ed9df7545e4b','d261d84083e8fa02866d85199c960a83','景阳文阅','趣程26期','张婉','文鼎','时代之王'],
+['18589699','','1b9f6fa4cd6bd5e9d0fcd87064368c91','f016dc64800525dbda5cf9b6619a8cde','景阳文阅','趣程26期','张婉','文鼎','时代之王'],
+['18589702','','ea4bcf92f74be9136d2fe13700dcb6fb','12cceb97b2f98da751003f5b421e6f0f','景阳文阅','趣程26期','张婉','文鼎','时代之王'],
+['18589704','','208204b4ac54c63bc72fd5a773a24603','c9f612edd39c34efaa7a18e24b0d872c','景阳文阅','趣程26期','张婉','文鼎','时代之王'],
+['18589705','','ca0ae0f11b1bb34f33d6cfe4a8b27f87','10d36adf8c9183e971abc534e102cc9f','景阳文阅','趣程26期','张婉','文鼎','时代之王'],
+['18589706','','013c4f138c164f2e20b41f9a1ef962f9','a6b1475018176b5eadf4bfefa26950f0','景阳文阅','趣程26期','张婉','文鼎','时代之王'],
+['18589707','','ae699349b3060cb48f530a4fee7c727f','9b20b6a6e768d1b797d8ee2c02227c5c','景阳文阅','趣程26期','张婉','文鼎','时代之王'],
+['18589708','','1b39e265825ad846fe3d56ae19c0a39e','e63ad64f437a98fec0a108d507390e59','景阳文阅','趣程26期','张婉','文鼎','时代之王'],
+
+
+['17801410','','fee14c35986c839a37f2766a40fc431c','692b8add60b970f7dac85799546c9d4e','听雷阅读','趣程15期','张琦','悠书阁','一胎双宝:总裁娶妻套路深'],
+['17801409','','36dfd2f503b852ece15b0bdde37be430','e7c4783271f6d5b4684228f92fb0ffe4','听雷阅读','趣程15期','张琦','悠书阁','一胎双宝:总裁娶妻套路深'],
+['17801408','','119d565bee419348ad1d098f21a4e842','119d565bee419348ad1d098f21a4e842','听雷阅读','趣程15期','张琦','悠书阁','一胎双宝:总裁娶妻套路深'],
+['17801407','','b9d054d06fd69e26baf7fac4077175bc','2f0f5e762351d253f572ab7ed571d3b1','听雷阅读','趣程15期','张琦','悠书阁','一胎双宝:总裁娶妻套路深'],
+
+
+['17801900','','ad6d43575564ddce46a92767dc897869','cf17e99c55ecf0c2f2e194344a249eb1','星海文轩','趣程15期','贾婷','花生','绝命魂医'],
+['17801918','','f623d08024ec765d7b86c7074978b358','30ef9c8383e2d451e2f06b0421a70111','星海文轩','趣程15期','贾婷','花生','绝命魂医'],
+['17801922','','70d8dd028f9fd5fe9a1ebb0ef400b41a','2cb0d6af9937aa7ce49950f4a81dbf4e','星海文轩','趣程15期','贾婷','花生','绝命魂医'],
+['17801936','','fd1203fb571065a41a70c186247349d6','7244f8bab1f2a61a395d2fe454e305f6','星海文轩','趣程15期','贾婷','花生','绝命魂医'],
+['17801949','','8c50f1bd9d8c3d3cc48f278b02626bac','76e13035982de0f931e11eab96e86837','星海文轩','趣程15期','贾婷','花生','绝命魂医'],
+
+['18492172','','2296f009f27b0aae00a83e886f18506a','bf676e0c12a4e46108dc6157350e1264','宇墨书楼','趣程26期','贾婷','七悦','天降神婿'],
+['18492159','','697b6e87e2f066ecdd19084643ecaaf3','febdd7c03b602760875586479d29c55a','宇墨书楼','趣程26期','贾婷','七悦','天降神婿'],
+['18492158','','3994c3be3cc55a5e6ed8606c4a3d173f','9090a27fb2c3cdc64240f1047a0e1fb8','宇墨书楼','趣程26期','贾婷','七悦','天降神婿'],
+['18492150','','cdcedd331920dfbe4a0a8535caa91261','9e5e58944ad251b6515c4644372dfdfa','宇墨书楼','趣程26期','贾婷','七悦','天降神婿'],
+['18492144','','2a2cb1f8c86ace2f1f9a4653ec532239','d64d24f4639b24455be2b9d1607c5b3b','宇墨书楼','趣程26期','贾婷','七悦','天降神婿'],
+
+['18464470','','4a306d602ab40f06130bf941eb774619','f07bd13ffa883b33308a883c8eb5497c','凌霄文海','趣程15期','王晖','阳光','天降绝色老婆'],
+['18464469','','dc5854ffae70509971f0806c97ee6fcb','60aea61b569e60567c509f69ab29338d','凌霄文海','趣程15期','王晖','阳光','天降绝色老婆'],
+['18464468','','2d583f4432dd81519ac70e55b1b85876','8bf22fda4ba30acbfdaea9c1512cff20','凌霄文海','趣程15期','王晖','阳光','天降绝色老婆'],
+['18464467','','d2174b6638ae4e0eed034664d23459eb','bfe7dc7620f78f979ec7735853da3bfa','凌霄文海','趣程15期','王晖','阳光','天降绝色老婆'],
+['18464466','','3214532b2e191f477d5a396838810f91','2f8348588bc99eb9f8f45a9f6dccfdfd','凌霄文海','趣程15期','王晖','阳光','天降绝色老婆'],
+['18464465','','caae8c4a875dbe7ad3d10bcb35a2fae5','622cc65d83a4d72add1a63bbf3f20f97','凌霄文海','趣程15期','王晖','阳光','天降绝色老婆'],
+['18464464','','7b1cd771e9c19e6360ad356d84e5701f','5a48f19e10dd71c9a063cc2da6b26416','凌霄文海','趣程15期','王晖','阳光','天降绝色老婆'],
+['18464462','','69c6805491c720491146efa2166e8236','050b4d835c79f7e7c6e09c694e8f8a4f','凌霄文海','趣程15期','王晖','阳光','天降绝色老婆'],
+['18464461','','ecb211b448aaad7192a3460e1aa7ce96','750dbaf5bcdef50ec4f0dede206910ee','凌霄文海','趣程15期','王晖','阳光','天降绝色老婆'],
+['18464460','','7090b258031f516593662e995c3de1e7','14d831e4870bcb82edbe724a96704a27','凌霄文海','趣程15期','王晖','阳光','天降绝色老婆'],
+
+['18502705','','8e273764a4e2cc5ea9196d13ed8a08a7','d4e05d60649755e261b0d2c8ea954d4f','神风文阅','趣程15期','王晖','悠书阁','夜少的替嫁娇妻'],
+['18502706','','8248d083715c61166b9f967c946c7121','ddbcaa2c67e65eb219a2cab9c0603a28','神风文阅','趣程15期','王晖','悠书阁','夜少的替嫁娇妻'],
+['18502707','','02e5e281802aa529d028aa9150ac1ea3','156cf3ad0daf688d8daa7f790f5b5faf','神风文阅','趣程15期','王晖','悠书阁','夜少的替嫁娇妻'],
+['18502708','','4c6621d6f897b4f25d8447d57b039c80','8c07e62572d514d53f7f6883dcbb3674','神风文阅','趣程15期','王晖','悠书阁','夜少的替嫁娇妻'],
+['18502710','','1adadd34c0df59869e4e6be550466670','f797b6181597171e6b907e413dec28b7','神风文阅','趣程15期','王晖','悠书阁','夜少的替嫁娇妻'],
+['18502711','','bd31a8604dca16dc74e85f46ab0fcc52','0b834d7ab094267638983d810e0e30ba','神风文阅','趣程15期','王晖','悠书阁','夜少的替嫁娇妻'],
+['18502712','','3674020c2bf73637aea9b77825914eb8','fa6daf8e57a22173af9c3ec05ffd0afb','神风文阅','趣程15期','王晖','悠书阁','夜少的替嫁娇妻'],
+['18502713','','af976da745cbf45ca5cc469818cf19a3','1453eee72f7be56214f1a0f6a61400b6','神风文阅','趣程15期','王晖','悠书阁','夜少的替嫁娇妻'],
+['18502714','','b3063d7256b5154fed6a5c7b1ce61d69','69eabf5d59d957add25622d2052cc1f4','神风文阅','趣程15期','王晖','悠书阁','夜少的替嫁娇妻'],
+['18502715','','7530ba154e7286785bab92831091ac23','6480b5d446a81defd5d8cad9fb5b94fa','神风文阅','趣程15期','王晖','悠书阁','夜少的替嫁娇妻'],
+
+
+['18464500','','cbb8b9373fb1d40930fa673596fc7333','f01a60959d1eeb6f7ec6a56af4aa6161','云溪文阅','趣程15期','王晖','掌中云','天降三宝:虐渣妈咪超厉害'],
+['18464499','','71d7a44f34d212168584e755ed73c1b8','a549dca23e60b31c404e0370e3a30642','云溪文阅','趣程15期','王晖','掌中云','天降三宝:虐渣妈咪超厉害'],
+['18464498','','88de4a40c6fc8ad66b421fec0ab3b7d3','bcd1313d7402c59aa3d423bcf980817d','云溪文阅','趣程15期','王晖','掌中云','天降三宝:虐渣妈咪超厉害'],
+['18464496','','7cf2eb52e1adb2d4cb8ca60e60591286','314f85613876733ec4a8933eee387845','云溪文阅','趣程15期','王晖','掌中云','天降三宝:虐渣妈咪超厉害'],
+['18464494','','ba980ca04fc1eeb6128cb609deaf2b10','5d3cc20e5adcb5f02dda866c2e3b8be3','云溪文阅','趣程15期','王晖','掌中云','天降三宝:虐渣妈咪超厉害'],
+['18464493','','ec9decc8a19cac118e55b583c30ac946','8c62b0b82e1ae82e2f48b2a47b8e6189','云溪文阅','趣程15期','王晖','掌中云','天降三宝:虐渣妈咪超厉害'],
+['18464492','','4ac4036c3c7daaa35b567d95dccad0ab','bb62bbf337f999de03881a9a23cc2aca','云溪文阅','趣程15期','王晖','掌中云','天降三宝:虐渣妈咪超厉害'],
+['18464488','','8142caa17b9e4a7ece8e0b02fd02afae','6a9a9c83e4741b151aec2fa83370188d','云溪文阅','趣程15期','王晖','掌中云','天降三宝:虐渣妈咪超厉害'],
+['18464487','','9e2e2bab0e189f2e9843ebaafcaaf616','5ba74463900d1af53cc7abfc0b8904df','云溪文阅','趣程15期','王晖','掌中云','天降三宝:虐渣妈咪超厉害'],
+['18464486','','0b8694d1217288557108b4b4349f95f4','ef56bf60c75f8f34927cd71a2d0bae71','云溪文阅','趣程15期','王晖','掌中云','天降三宝:虐渣妈咪超厉害'],
+['17801369','','48663d069b7b2f6b951c046970072c25','8ff8b3975651df334fb1339df707d04e','星影文楼','趣程15期','张琦','掌中云','天降三宝:虐渣妈咪超厉害'],
+['17801435','','65856de7010753f76dbe8661846b9849','dd36f941d96c512234efbbcf31d8d2cc','星影文楼','趣程15期','张琦','掌中云','天降三宝:虐渣妈咪超厉害'],
+
+['18435852','','6c2ed51044c7e4deff3eadb1e178ff8d','b687182019aae5b06f585d932d9c935a','云景文阅','趣程15期','王晖','悠书阁','绝世医妃'],
+['18435851','','ce569b61561bcd1158c97623f3e7c42b','a799b89eb48d033358f7748eca6d00ff','云景文阅','趣程15期','王晖','悠书阁','绝世医妃'],
+['18435850','','4c82722aaa3216b89b91aacb46e6e90a','52e96ad82293a42e0e7cfd1a90748df0','云景文阅','趣程15期','王晖','悠书阁','绝世医妃'],
+['18435848','','576112e2d40b45b05896c7f315a5b1d4','5c3f44491f24b5a31cc2acd7aab3618e','云景文阅','趣程15期','王晖','悠书阁','绝世医妃'],
+['18435849','','5f56de00a1872152af917f4f9fc36f56','0b110cac811d08efa2d04baef26b0b36','云景文阅','趣程15期','王晖','悠书阁','绝世医妃'],
+['18435847','','7eedeff497ed812b243674713fa70cf1','7506f78bfe7fb56db743aa7d3e506516','云景文阅','趣程15期','王晖','悠书阁','绝世医妃'],
+['18435846','','4ae369da076b431d27b3ac7cd7440a7f','07bea7557a323a1bfc405085a412883b','云景文阅','趣程15期','王晖','悠书阁','绝世医妃'],
+['18464504','','c05591343deb8c6be2771cee518a04b8','2cadfa6b9910cd7959bff307270a9661','云景文阅','趣程15期','王晖','悠书阁','绝世医妃'],
+['18464503','','dac20dc5aa8495e89a4a199ff2ca09e8','5aad50d1c822de355e44d386010607b5','云景文阅','趣程15期','王晖','悠书阁','绝世医妃'],
+['18464501','','0af1138d91a19385ea405f4b45564ba2','8d9b7cad26ba0f52e8f04c8fe8e2f84c','云景文阅','趣程15期','王晖','悠书阁','绝世医妃'],
+
+['18464485','','b1d476bb570784d0d2f2e03a2f9f9a29','03baad36685000cd59f3bebe622dc427','苍松文海','趣程15期','王晖','文鼎','绝品透视'],
+['18464484','','51e8ebcce3187ab16162ddad0a921a1c','0eb190531376b797cfe7cb7eb19e5172','苍松文海','趣程15期','王晖','文鼎','绝品透视'],
+['18464483','','07d3953fad1abdd8b44ab05ce67f214c','52ba5cdf4e2af32c5dd19eaff4ca6938','苍松文海','趣程15期','王晖','文鼎','绝品透视'],
+['18464482','','f8446d054418ba9010340fe1bafe1873','dd507855069d9026969dfbc346f40622','苍松文海','趣程15期','王晖','文鼎','绝品透视'],
+['18464480','','b01aec4c99555625c8682a4144609133','a4961c24cd49b2620770d0b7ba5b6196','苍松文海','趣程15期','王晖','文鼎','绝品透视'],
+['18464479','','ea60f17cac7db2a85fc92ad77bc4c6ed','5018ca16d98b7896166f331feed942cd','苍松文海','趣程15期','王晖','文鼎','绝品透视'],
+['18464477','','434c266a8f0737ea6e40d61ef6230ff4','695ad44621b40b8a974a91fa5b6ef1c9','苍松文海','趣程15期','王晖','文鼎','绝品透视'],
+['18464473','','91bc92d6011e632e555cf0505f8072af','df533f03f5dcac853917ba0bcb55abd0','苍松文海','趣程15期','王晖','文鼎','绝品透视'],
+['18464472','','19578e448f1735102e2ef563f2fed67b','e45599330c5e8aa7f111f1ce772599ff','苍松文海','趣程15期','王晖','文鼎','绝品透视'],
+['18464471','','0dc309d1d9913c11292aced0644490a7','24f106bb7f33ad5de25934d70cf51357','苍松文海','趣程15期','王晖','文鼎','绝品透视'],
+
+['18493561','','e453b81f1b2731e38772fb11e0327c05','8f665b0f53b66b695a37d35b727b796b','骏驰文海','趣程26期','王晖','七悦','天降神婿'],
+['18493555','','dcace34e933749d79b880302df3b36ab','cb3ef06011db8de9924265c6e111a2eb','骏驰文海','趣程26期','王晖','七悦','天降神婿'],
+['18493552','','c5a6249b1765ae45ce698e0f5498a6f1','40ca7c14fa4ced669847b6b0a3994784','骏驰文海','趣程26期','王晖','七悦','天降神婿'],
+['18493551','','bcf14e806876ce297f3a0e335a1ed2b9','85667b22f9ddcbae894d2b44811edaba','骏驰文海','趣程26期','王晖','七悦','天降神婿'],
+['18493550','','5e8760618921542b3258ce17c54480d3','60d5a06751750cf421f363a164c350d0','骏驰文海','趣程26期','王晖','七悦','天降神婿'],
+['18493545','','777013ed63e168d4ad019f3e32ce1b94','6a109785303c4205de4186fcfe15f18a','骏驰文海','趣程26期','王晖','七悦','天降神婿'],
+['18493542','','a409502aceb21c46d7d4709531366c71','757634c778acc7132fab6da0a4d185b9','骏驰文海','趣程26期','王晖','七悦','天降神婿'],
+['18493540','','b1b11d84cd84c50b7945d6649b4d491e','a619fbb7ac83feb547bec0b0b034e088','骏驰文海','趣程26期','王晖','七悦','天降神婿'],
+['18493537','','e70085ce675758eb9092b9973f38f6e8','9b750e238dcec9b5db8b5445068aefd1','骏驰文海','趣程26期','王晖','七悦','天降神婿'],
+['18493531','','762081319e7626aeea110c111b3c7522','3cf94b544e6e757adbb616be4783ab9c','骏驰文海','趣程26期','王晖','七悦','天降神婿'],
+
+
+['18446794','','191665f4568acc2455f3f0f336820596','c008ce6de26308060dc15ca72749ce22','狂浪书社','趣程15期','唐怡婷','七悦','天降神婿'],
+['18446788','','0bb4bb40328197dec89f7528b22e96ab','6e7ff2ca7d674aa92d2eeef839ef5b86','狂浪书社','趣程15期','唐怡婷','七悦','天降神婿'],
+['18446787','','bbc119f113cab8525eec552df6cffe87','5b6d387af0b35825054ec76c519f877b','狂浪书社','趣程15期','唐怡婷','七悦','天降神婿'],
+['18446786','','cb89aa19a19d901e5be47dbca9ce2fa5','8032f6ab22d14c3e1b383fe3c691deda','狂浪书社','趣程15期','唐怡婷','七悦','天降神婿'],
+['18446785','','e8c6c30f9347ded0c8fd45a7646da26e','e83a18983cb38bc533ae32ae313e33a4','狂浪书社','趣程15期','唐怡婷','七悦','天降神婿'],
+['18446784','','5435b79c9b6292eec23a8ac2344fe62f','4daeecb3ec0d3217ea74d37b1493d73f','狂浪书社','趣程15期','唐怡婷','七悦','天降神婿'],
+['18446783','','379e3f83ea72d717c813c5ddf01627a7','64ff72e56280c147fb8cb33386070092','狂浪书社','趣程15期','唐怡婷','七悦','天降神婿'],
+['18446782','','2726a990016d18a864096cc89ef1bd75','8dd7cef4acdf6317976d9ebdc9c37ca7','狂浪书社','趣程15期','唐怡婷','七悦','天降神婿'],
+['18446781','','e3ba1a2bec91b07c5df8ee8d92b86cf2','289e714d671ff3a28ab1ca9babff069d','狂浪书社','趣程15期','唐怡婷','七悦','天降神婿'],
+['18446210','','9d42049889e7d1f50bc5b2b0dfb7d4e0','25b83de7dd826eebfbfdc936bfb43ef0','狂浪书社','趣程15期','唐怡婷','七悦','天降神婿'],
+
+
+['18446296','','cf60b598d41659e54d0eabe322787c12','222c5c918317fdbf7e87f3fdfcf0d6eb','天武书楼','趣程15期','黄鹏','阳光','和女神浪迹荒岛的日子'],
+['18446295','','22838b8a162bccfdc2b033faecb7899c','b6200ce48bd7048010f3f86faed45743','天武书楼','趣程15期','黄鹏','阳光','和女神浪迹荒岛的日子'],
+['18446293','','6238dafc5fe7e9d2ba8c1953595614c3','16fd4ce17f0faf22a7c8ad712587031e','天武书楼','趣程15期','黄鹏','阳光','和女神浪迹荒岛的日子'],
+['18446292','','128a4682c7c4ec9aef077832375ee285','af23a45f855214c61015b634bdc8d234','天武书楼','趣程15期','黄鹏','阳光','和女神浪迹荒岛的日子'],
+['18446290','','9833e59ec5e3c7d311a2cb83d6e0fb50','0df7a5dea238029de8f2e6562df3de5b','天武书楼','趣程15期','黄鹏','阳光','和女神浪迹荒岛的日子'],
+['18446289','','ff5d0af5ca1a13de38328c2f4d09afb9','7133bff1ca9b1ca761bb1e394b58d079','天武书楼','趣程15期','黄鹏','阳光','和女神浪迹荒岛的日子'],
+['18446288','','508f22b091feaceccbf27d1d0b42fa72','25124f533bb695bf5db5badd0fee056c','天武书楼','趣程15期','黄鹏','阳光','和女神浪迹荒岛的日子'],
+['18446287','','2211831782dda9a0067106a24d29b064','a40c1289fee60a1b505234c3a27038fa','天武书楼','趣程15期','黄鹏','阳光','和女神浪迹荒岛的日子'],
+['18446286','','777b61417e1f8f5f5888e26dc8b4d58e','0cf8f163f1bf865f5aa0f02ad8720adf','天武书楼','趣程15期','黄鹏','阳光','和女神浪迹荒岛的日子'],
+['18446285','','ff1fbb1238d35485c3ef878845cd6c48','ae9f1427ed96c11395b408cd122a5fd6','天武书楼','趣程15期','黄鹏','阳光','和女神浪迹荒岛的日子'],
+
+['18341444','','8565131fb5cfb6310567ca68919753cf','de6fc758f179e6bccdfcde0e66cce262','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['18341443','','37dbae721b98b2095f9ad25f58ab37e8','a657c651fa8dec5c7746dc194990d84f','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['18341442','','38e177cffdf850fea6de1a36748acbe8','05cad9c275c1b78135fe70307c62c9cb','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['18341441','','9b1a5b8aeaccf350802c0faa779219dc','2330dce7eb45342e13d17bde179725f6','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['18341440','','6c6a90b422e61e6ebcb5ad270f73298c','6b2776fc8fd18c7173e9645008057884','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['18341439','','52ec38f0594c7bc5c3842bc059e95537','c4c8b61e0fffc4fa69be474e1f9a9edf','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['18341438','','062c2b9a3855e52c0587dea9866f060f','a5ebf91ad9e68902a77939ee1e1398d0','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['18435855','','699a525b9994717eefafadd0b4c67c08','c4deca52b0b5fb5faf9053c9cec95038','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['18435854','','cb56273cf29f1605dcb6b1900baddf27','d93740ee069ac76b9538c8d1effb990d','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['18435853','','3b6af22dc8af74da8544331992c68fa9','18c534b5fb46518d09e7640159660460','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+
+
+['17801139','','ba492dfc68d39960d8c39b787d3c8186','e536d47d5aeef9481fb9b13f4a4f328c','钰龙书楼','趣程15期','贾婷','掌中云','超燃狂少'],
+['17801137','','f4bbd9914913152b71b6f803afc85cde','0434d86087bb44d4c6c4b2ee290f2aef','钰龙书楼','趣程15期','贾婷','掌中云','超燃狂少'],
+['17801134','','13b4ba643b5b84b049a6c91219cdb275','41f13f9a215c4ba7f414b03a8bd5b71e','钰龙书楼','趣程15期','贾婷','掌中云','超燃狂少'],
+['17801130','','724407a4567fdd7ebae463079c14027d','7fab43e96056e98061f337cf9d5ba6ad','钰龙书楼','趣程15期','贾婷','掌中云','超燃狂少'],
+['17801128','','0d9cd7ec37d44f4d00f5a1b6e89f1acf','e471a677a45d38ddf48acf53424a339d','钰龙书楼','趣程15期','贾婷','掌中云','超燃狂少'],
+
+
+['18353745','','348e035208ed485e36aacea832e8922a','2c3395df33b87b532ca64381ba24ae47','乾城文海','趣程15期','董平','文鼎','仕途天骄'],
+['18353744','','2d1c965ff2a7608aec1ad7baa6455ce0','b09e877adba47f9827e3d087ecb3d18d','乾城文海','趣程15期','董平','文鼎','仕途天骄'],
+['18353743','','7c27bff5464266c81929e024bb120b36','1366f89a0e55de466ed625841037c431','乾城文海','趣程15期','董平','文鼎','仕途天骄'],
+['18353742','','29050e6cf0cca097230b9e6a0e72c92f','b862dc8e2b841ad84a088bde8e2f6bea','乾城文海','趣程15期','董平','文鼎','仕途天骄'],
+['18353740','','e3bd5633f0d472c2ea3be517b56cef1f','cfb24c4529ac0204e0dd2642ca271105','乾城文海','趣程15期','董平','文鼎','仕途天骄'],
+
+['18353737','','8c169e379e32bb9bbce278add14db4c5','c8874d07f302bb995d26b633423ad65e','雷政书阁','趣程15期','董平','掌中云','天行医尊'],
+['18353736','','d46f0e4c6d489cd1f7a2f3825455d1a7','4070e79dfe7fe4c02d1139d31170a18e','雷政书阁','趣程15期','董平','掌中云','天行医尊'],
+['18353735','','8cb945f3193ef5bd0de8df8f47f5a046','18be5dabe149918286a107c444ac37d7','雷政书阁','趣程15期','董平','掌中云','天行医尊'],
+['18353734','','70e362e615b81fc85d96ca2df6ecfe35','d88d0431c08bb0d5df8e383f636aef07','雷政书阁','趣程15期','董平','掌中云','天行医尊'],
+['18353733','','04a14ce6b83c901ee7055c2d2767e23b','df1a33bb31215d1f194c5148ede61f0c','雷政书阁','趣程15期','董平','掌中云','天行医尊'],
+
+['17800849','','903c6c0b64dfbe449e24f008e705be20','e42aaa01f9dd8fb01af1ef0c54362f8a','星河看吧','趣程15期','董平','文鼎','绝品透视'],
+['17800846','','a54eaf6b776184b200c5c538f4997984','4e131108976a8ef3a4fe224049831a87','星河看吧','趣程15期','董平','文鼎','绝品透视'],
+['17800844','','454bb952bd4467115844d9d720bb3dce','839536ebf4992f77d3b84ab0743c5d37','星河看吧','趣程15期','董平','文鼎','绝品透视'],
+['17800842','','f6e0ac866cf52d0407cab22fdb6ad154','a64ad8279f8c1aa2f10e25c1cc801df2','星河看吧','趣程15期','董平','文鼎','绝品透视'],
+['17800840','','9fe9621b1c26ecd3a175c66b95d81625','b93caaec84f27a5e852d083cff3fce6e','星河看吧','趣程15期','董平','文鼎','绝品透视'],
+
+['17800838','','3f45158fb9c891201681a557c376ada5','bc199ebf3ffedc46d624ef76c56f290a','月华文苑','趣程15期','董平','阳光','狂妻来袭:偏执大佬宠上天'],
+['17800836','','555a1fcc7c3da059d8b1c37066994d78','0b68c827db02dcc00a4e0981167eb207','月华文苑','趣程15期','董平','阳光','狂妻来袭:偏执大佬宠上天'],
+['17800834','','13ad18de0dc005ccc1e17884710a1517','7b026523095c6df9ffd107f522602ecc','月华文苑','趣程15期','董平','阳光','狂妻来袭:偏执大佬宠上天'],
+['17800829','','d01b7249795d0868500e4e285749c275','e4bc52948c8593abc316294fd1791493','月华文苑','趣程15期','董平','阳光','狂妻来袭:偏执大佬宠上天'],
+['17800826','','ba23e290cb578104e512221bd649eb5b','996bb592a8f1ddecc1ab0efe3b1f8e6c','月华文苑','趣程15期','董平','阳光','狂妻来袭:偏执大佬宠上天'],
+
+['17800824','','2c5611291558135e0ad90511be4c6705','a753c4eaaf7c152670e7c5b6bb42b3e3','吹雪文库','趣程15期','董平','掌中云','今夜星辰似你'],
+['17800821','','e9ffdc76de3504574814c3727f72bd70','3802e6b74b236aead1290e89275fa6e4','吹雪文库','趣程15期','董平','掌中云','今夜星辰似你'],
+['17800818','','334cdf4a809f57a98006e227716ca5e0','ff6c9d751ca176ab0b4e223b5ab474a0','吹雪文库','趣程15期','董平','掌中云','今夜星辰似你'],
+['17800816','','824bfe760cdaff3cec9b3d095fe8d347','4486c94911f03faa6315a08316083393','吹雪文库','趣程15期','董平','掌中云','今夜星辰似你'],
+['17800814','','f078b7808419e7f65699abd35aa75e28','1cb61933f6423eb6501edbc443bb27fd','吹雪文库','趣程15期','董平','掌中云','今夜星辰似你'],
+
+['17800965','','9f9b40a5a12eaba0313865f5684f8860','dab1599ad220bbe1d159a2861ef8da95','瀚文书海','趣程15期','贾婷','文鼎','我的绝美老公'],
+['17800959','','988d2c913f69fe4883d100c0e0c61318','4ecc3a5dfbe8f8b9952c21b85f3fdf6d','瀚文书海','趣程15期','贾婷','文鼎','我的绝美老公'],
+['17800956','','e73affb89533f2dee2f3070e1045d876','7d7a3797eb8c252331f9531794b5381e','瀚文书海','趣程15期','贾婷','文鼎','我的绝美老公'],
+['17800926','','2b155376d1f109ed785541d6d1ec91c7','ff94cf7fa71ad20cec901151b9686fef','瀚文书海','趣程15期','贾婷','文鼎','我的绝美老公'],
+
+
+['18384368','','c76311e5e97f5f4653bd55258726d560','f67847247b1952b0f41b693f132a9b50','天虎书楼','趣程15期','黄鹏','文鼎','仕途天骄'],
+['18384369','','f1cb6fbfbe3923add6e31724d28282e0','630ef83c3b03898b8ac0dc7109604c72','天虎书楼','趣程15期','黄鹏','文鼎','仕途天骄'],
+['18384370','','5a52424be492fc63ae1555a41329f47f','8a71168f02badae85265ece79dd930db','天虎书楼','趣程15期','黄鹏','文鼎','仕途天骄'],
+['18384371','','d24ac88f88b48a7a8a47df1b2be41f23','947e28b5deecda7f85fa75cb7592c8bc','天虎书楼','趣程15期','黄鹏','文鼎','仕途天骄'],
+['18384373','','9b6d2ef6c74bbd1e765a97d0d11639a7','b5196c7a0748a80f44e4196f813fb2ef','天虎书楼','趣程15期','黄鹏','文鼎','仕途天骄'],
+['18384374','','19759270172f1141420bc1669a8020d7','9ab716363aca43a4e17773c57711c93a','天虎书楼','趣程15期','黄鹏','文鼎','仕途天骄'],
+['18384377','','3ce88954f5256f9f3c58a13fea6348e9','4238a0de4d1b07ee3c0a727bde25aa24','天虎书楼','趣程15期','黄鹏','文鼎','仕途天骄'],
+['18384376','','44b43408db364cee33c27ce2348373df','5c897f9cad7cc15e6f4bed7ec2caa8b5','天虎书楼','趣程15期','黄鹏','文鼎','仕途天骄'],
+['18384379','','4fafe6bb1df8dd0c7f0e20082b76fb9a','09521e52b369d781d7f7d00fb9d44f34','天虎书楼','趣程15期','黄鹏','文鼎','仕途天骄'],
+['18384380','','d8dc5fd66b001a595f95d1baa9d8ecf6','b91d7656fe9af0f7d2a1366d5f0fe663','天虎书楼','趣程15期','黄鹏','文鼎','仕途天骄'],
+
+['17800986','','31f18382cd7faa8eb422ca24eb6c3656','83ed95eda771ffcadb6aca6b0be94ac9','枫轩书楼','趣程15期','贾婷','掌中云','天行医尊'],
+['17800985','','7006cee6c0077594d2e78100f423814a','672f11b826739f4454f65b6bb07ca4d5','枫轩书楼','趣程15期','贾婷','掌中云','天行医尊'],
+['17800984','','c598fca089d5c16bb0f2812cfb2271d2','4eb21058f75374b40ed466c01ab80075','枫轩书楼','趣程15期','贾婷','掌中云','天行医尊'],
+['17800982','','b5b9629ccbc5ad8bb7ce821effa1a6ae','aafe83b0e00760d3b21e7a0cc5e5b2c5','枫轩书楼','趣程15期','贾婷','掌中云','天行医尊'],
+['17800981','','245d9ae3edac5a7846eecd6048869858','9495c76f943c82f04afaa010e5eb2541','枫轩书楼','趣程15期','贾婷','掌中云','天行医尊'],
+['17800980','','d7d8f361c7a7cbc7ebce9b6cf7b93531','3fac8afbd791b20669f31c0e737c6358','枫轩书楼','趣程15期','贾婷','掌中云','天行医尊'],
+
+
+['18353753','','2d4b374a65158d196a61c53f4d385a8e','6c46e240332121e2df5f6407f48a671b','乾城文海','趣程15期','董平','文鼎','仕途天骄'],
+['18353751','','0a50d6970cedc5184c7b75be8919d74c','45d1bec5ae3a09bf54e1c2e31d42966b','乾城文海','趣程15期','董平','文鼎','仕途天骄'],
+['18353750','','06f9cf13b6fb56eb01466b1120edb7db','b24f7795b8e4d77718410a441dfa999b','乾城文海','趣程15期','董平','文鼎','仕途天骄'],
+['18353747','','c91a440ef082379ea06cca0dc584d403','5955ae52ad5896a41ee196754f26ffd3','乾城文海','趣程15期','董平','文鼎','仕途天骄'],
+['18353746','','a69494fc07423a43ce844787ca3b59dc','bec06e231c4bfc32c722a05b4afb5f29','乾城文海','趣程15期','董平','文鼎','仕途天骄'],
+
+
+['17922856','','b2e5c4197b6a39fdadfba617b43ad237','9ad40f3d0ebeaaeabf64e3aab0d678e4','泽宇文海','趣程15期','黄鹏','花生','战神医婿'],
+['17922855','','d1ef8161ef88902d508f4632a5cbf408','49f83345c1b142d40ea4e1a3034ad3b6','泽宇文海','趣程15期','黄鹏','花生','战神医婿'],
+['17922854','','bc395bc31559b8f0361e9f24c698ddb3','e8c2d7ad1be2571883a490940a73d341','泽宇文海','趣程15期','黄鹏','花生','战神医婿'],
+['17922853','','92a2cb88b8b9ae2927f334899b45dd48','a959b571cd58708b0c25e7d839c96627','泽宇文海','趣程15期','黄鹏','花生','战神医婿'],
+['17922852','','24b9a6e6fa6800339650d34e629d3fc0','f51986f34b65d6faee5f2ab9be312c73','泽宇文海','趣程15期','黄鹏','花生','战神医婿'],
+['17922851','','c5746a2f620b61753ac0805bdabfc5e9','f52633f77c8d36993b9850ed0e48412d','泽宇文海','趣程15期','黄鹏','花生','战神医婿'],
+['17922850','','a8da3323386c87dfaee4cce1736688f5','23dc4c13b614a5fecc5cf30937d51653','泽宇文海','趣程15期','黄鹏','花生','战神医婿'],
+['17922849','','1f78a81b33e2590645afeea1c508d3c4','5db61a59b287811997cc7d46aff67bbe','泽宇文海','趣程15期','黄鹏','花生','战神医婿'],
+['17922848','','30c45b90548fdd90219d8d7253e9b6ce','d726b2f3fcf5d8451b8e5237e16b2038','泽宇文海','趣程15期','黄鹏','花生','战神医婿'],
+['17922847','','72c8c535c205b91fcad5853b136aa05c','11444707a8377a9f247832f6145a6b7a','泽宇文海','趣程15期','黄鹏','花生','战神医婿'],
+['17922846','','4bd00c6a184ed4ae5c8eb9000581c74c','01b0038a4a5879a29f6db181725cc697','泽宇文海','趣程15期','黄鹏','花生','战神医婿'],
+['17816585','','712034cffb859187dafbfda2026fbacd','6ecd163f31e856145bae7b79b2b6fdaa','琉焰文轩','趣程15期','黄鹏','阳光','第一兵王'],
+['17816583','','152680d5cbe34884fc1d066b124f02ab','e95b29857fddc2ca26c221d3408510f5','琉焰文轩','趣程15期','黄鹏','阳光','第一兵王'],
+['17816582','','be4dd68835975107764001dc2fe82dfe','3204cad7556fbf88df84e3fb3bf12dae','琉焰文轩','趣程15期','黄鹏','阳光','第一兵王'],
+['17816581','','44444291bf1a4d708b180c1bdbe85147','37a1e2015ea6bec3e18394ab02f1acd4','琉焰文轩','趣程15期','黄鹏','阳光','第一兵王'],
+['17816580','','20073a081dbd18b12e4d6a51e260d193','ee05857a72cfb981a704f4a597be336f','琉焰文轩','趣程15期','黄鹏','阳光','第一兵王'],
+['17816579','','f2328493cc428985f4dc302719600ab8','13f6b55bac967936686edf16ffa87c25','琉焰文轩','趣程15期','黄鹏','阳光','第一兵王'],
+['17816577','','11224eedcfa46affed46eee9b2c031d3','c85bc42ea207e9e22e1af5d0a2745366','琉焰文轩','趣程15期','黄鹏','阳光','第一兵王'],
+['17816576','','2342cf88ea2e091192d3633c06c42f1f','a8da2e59c1edccf70eda2e743ba8cdf0','琉焰文轩','趣程15期','黄鹏','阳光','第一兵王'],
+['17816575','','b4f7df9490e37779ba7d53b7bd68ff02','27317be1fe886324c81502721d85fc2c','琉焰文轩','趣程15期','黄鹏','阳光','第一兵王'],
+['17816574','','aada94f43d63ee2d4f7f0d3d5336cac7','b8724380116d26feeb01810fec35c96f','琉焰文轩','趣程15期','黄鹏','阳光','第一兵王'],
+
+
+['17922897','','b397c4be803ad04062fe339f3a7db996','0870f88284063c85dd8b37c14e68aa2a','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922896','','a12a3b384778c5b81d37f10bf42694aa','5b38418dc69d54d590ffe26371171ef5','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922895','','46118b068bb24a499fbfa19596748ef6','0858fcaacc6df835c7654de4ba0d7678','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922894','','36611f4800d1f66e88826f71db9f25d9','0f8a717ae7043b7847e2f916203e0a6a','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922893','','ec218b4b831cdee441be2a9123791f48','735cda75e5632af784cc91f97000d727','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922892','','4d69dac5be3efcc338b1cf58dd0d32cf','92b3e61ba34f3cb455b8ec5e13ab099d','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922891','','40d1af75eea4db01aaeebf84941b44cd','46d27347ce700a47f71357d5dec11b66','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922890','','bb9c6ee07fb808e3ca93035504338f64','687cb734aeba77a4a16424ab3bd880b6','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922889','','dfca3663b9f5847531491052a59f4daa','080f8b0f85a8ee63344a29f8639c0e1a','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922888','','e0a3bdcd0317eb92e0ce9269896c1dc4','f4e000e765a72a342bf8c34ad64ca15d','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922887','','5123aff5f4d3078928f1c71f43b1d982','3885208c8a4069d80a169f3f7e6429af','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922886','','13a82074c2364dff3d5549b995f70420','d0884ad5ec2ff10e3f7d13a5517e1f7a','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922885','','88902083ad7c11e634619d0d71d9ea12','0fd53e375f4c636bac125735b6e71a33','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922884','','dca0916fc4d90b2d396f0a262b28dad1','01d647775cbea619dedb65bfa6b74eaf','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922883','','4c3fc89127fc3486ea7da1138e5cfcdd','5d4ee01d03e4ba13199ab53bef63b951','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922882','','889400a8f338eda1f397f2debd09729a','65e76a7ec5cce165d1947822601aaf27','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922881','','d164a0e4040212557b2e98e3ffe5bb40','026bd3a40b38555755ad156e03059b6e','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922880','','fb1b88c2c9ffd011ecaee489fee0dc4e','bbf1df0049f7528cd2a73f91876a7543','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922879','','0576fe8358ec57e8dd4968e41e3edfbe','df182e240c53176178af424b908fe69f','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922878','','88c419bf1335bfbfa49bf2f744dd7b68','7e3df60084b42e71f4b08922f10e1a64','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922877','','cf98b6954debb17847a5b33d5c0f8c90','7f1aa0bab9c22422635fe86d1991d60e','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922875','','2c81687f42e7ca46b29541c02928bdf2','14867cc7fc67cf6a89f707968754d501','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922874','','733c18177b0b152350bcb87b95eac4f4','52b642420c28aafe6c48649961c4a381','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922873','','b2320f541a4ae4b59e4490077d793847','091c374bbf5687fc20e59b8c4e1b4744','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922872','','004ec178682b942da35688eddcf29355','c7e7b24ba0a5f990bfeeaf7b28801874','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922871','','644f45a554e65a6bd923c7e20f7be3d8','fa6910cf2d376afcb45a674424758d5c','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922870','','93946a4e0f44729eb88b56ee0881ba00','24fc585ce3ced8ce1ff2607135552a49','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922869','','514bd2a1f4db5bbe428ac45d2507f4d0','261d883cbb740ab90a11fe939f92df2a','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922868','','e9134fa37c78fd5091c77e7af5426441','315429dffd6e52f80df8cc2acdef48af','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922867','','dcb63fbf6d29be35382c25b99db39e8d','695bc2ab7e115c24d503ea0e87a0b7f0','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922866','','52dfc2af7ae92bcfe5d10a14e6bef3c1','20f2bad3a4ef835840f6009e1e866662','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922865','','b5a66b14be5f3ad4ac5dc94db7faa06a','76758d5d08b45cd137bbd908e1caa9a9','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922864','','4642942aff31f853b9ea9b6deee8fb65','9c0610ffdfd88f0dc7e438764345c345','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922863','','f65eda8f5db881d649ec245101fe1b10','7069a5a3a307900da342a37707f00099','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922862','','62f13719b589c703c3d0a17bf98f5bd7','302cc578686d84fd78027a6dd18a88a9','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922861','','846e110be6c66567277c596531eeaa5f','0f404271b227a692d383512d42fcbd37','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922860','','38617e2c80598e270922b583f6c309a0','ede07427ef3709ed11d7832674f537a2','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922859','','fc8e15654daea58f324809a5a7e71b03','fd65851c0feb1fef00e61b038252eed0','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922858','','81e0675b117327e2488be227225b7d79','2e2f95e427a4dc2239621defcdb1a978','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17922857','','5ad08fdb9342892875b118f78549c95c','b28b5ef1409e9f03b7916c21f1004183','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+
+['17800863','','a66cf296e162af2cd23ca43e53e1a8c4','720ed4de52f5ac4bed4b52037c563ead','星河看吧','趣程15期','董平','文鼎','绝世风云'],
+['17800862','','200e392bca298a9c1cf08db03d246d4c','b6c553b2a92c37e8f643cdf83531d27d','星河看吧','趣程15期','董平','文鼎','绝世风云'],
+['17800861','','42639a870368e46aec28ca1674ff26a8','3810c4a46bc32dae18bd3beab4d9c62e','星河看吧','趣程15期','董平','文鼎','绝世风云'],
+['17800860','','ced8774c55001e9f6f86a612046eea30','4f3b5644da6c817687a802fbcdad1fbc','星河看吧','趣程15期','董平','文鼎','绝世风云'],
+['17800859','','2eb4869e536dac89776d0063c03a9bd6','6e126a1f2a162bbb1b5180ecccd1784d','星河看吧','趣程15期','董平','文鼎','绝世风云'],
+
+['17800858','','74a042ccea01b01d2851702fee406ed8','6cd1efaeb35a0a98bfbfae6b098a2552','吹雪文库','趣程15期','董平','掌中云','今夜星辰似你'],
+['17800857','','ea576110dbfa90ceebcae05356b49fa8','66737d9259481081dd825fd452de668f','吹雪文库','趣程15期','董平','掌中云','今夜星辰似你'],
+['17800856','','6ca272ccc951e023b491850d12c2be2b','67195ace402baa46d4c5d9584ad7544d','吹雪文库','趣程15期','董平','掌中云','今夜星辰似你'],
+['17800853','','699511e8fd5286ea536aa8f3d2732c16','ff0e865519b62a673b9034c338df2a93','吹雪文库','趣程15期','董平','掌中云','今夜星辰似你'],
+['17800851','','2021de17829531acbb01d947cde67869','849c43b8560a6ca1fd5b774483a29195','吹雪文库','趣程15期','董平','掌中云','今夜星辰似你'],
+
+['18341526','','287905a6a0f03fdc380a7847c926a386','b9e9de8f0422f86ecc154b35211dabbb','云景文阅','趣程15期','王晖','悠书阁','我与你的情深似海'],
+['18341525','','849c51876811ed78f9c66f1b341c9300','fbc389b258640c96574800b37bb59f27','云景文阅','趣程15期','王晖','悠书阁','我与你的情深似海'],
+['18341524','','bd8f1e17c67d6d30b873335e46ad38ec','2782e88424cead7adc4c89925bf68207','云景文阅','趣程15期','王晖','悠书阁','我与你的情深似海'],
+['18341523','','35f65d675e3eaa34dbbd4e254cf1500b','ce265a91c9026e0199f93eb2142c33e2','云景文阅','趣程15期','王晖','悠书阁','我与你的情深似海'],
+['18341522','','b6d0f91eae9eb48febf7d3d54b62d6c8','38d90e028eb577d585eb40ca4b6514ae','云景文阅','趣程15期','王晖','悠书阁','我与你的情深似海'],
+['18341521','','c4e8d723f9c2ccffad6b1ca540334f3c','139afb13816e4ca200be97aa5812c01c','云景文阅','趣程15期','王晖','悠书阁','我与你的情深似海'],
+['18341520','','531f18506d4c485a31b0e721380ee2e6','95e1c5cf59b39c9e1fb90439285d4dc9','云景文阅','趣程15期','王晖','悠书阁','我与你的情深似海'],
+['18341519','','5ce338ffaaef928f0035b2991f4b35c2','65daebb16a281e7de9a3d873eb171f20','云景文阅','趣程15期','王晖','悠书阁','我与你的情深似海'],
+
+['18341518','','7054624d03393891ff9523becc39094b','b505e384f251d217260d27d8275105d7','云溪文阅','趣程15期','王晖','掌中云','今夜星辰似你'],
+['18341517','','127d0ddbd91fe17ae61886169a0e7bd3','59049929f18a050e16a8c25402aedc20','云溪文阅','趣程15期','王晖','掌中云','今夜星辰似你'],
+['18341515','','2d38846533ff01af15cdce7f1d3a1bf1','38a7dd9e605a1955377c513edc1c9c72','云溪文阅','趣程15期','王晖','掌中云','今夜星辰似你'],
+['18341514','','302d473adf61fac965748141631845fb','f29ee202d229eeba0b41a925fa1f45ba','云溪文阅','趣程15期','王晖','掌中云','今夜星辰似你'],
+['18341513','','6bc0ad35e29babecb5a18659cdcf08d8','3cbb781c588268608bb89cc1446f0400','云溪文阅','趣程15期','王晖','掌中云','今夜星辰似你'],
+['18341512','','30769828dd6d7ee55998a606d9d86d4e','aea7d6e9dc37b086f07569c19029bd78','云溪文阅','趣程15期','王晖','掌中云','今夜星辰似你'],
+['18341511','','b275ef7108c23555c1893fe663867441','0d6bad82149e348cc10c11bf7078649d','云溪文阅','趣程15期','王晖','掌中云','今夜星辰似你'],
+['18341510','','49584e5a4757b4065487cf60b9bacb8e','8e6d523803c79851a9741125c5e7ce5a','云溪文阅','趣程15期','王晖','掌中云','今夜星辰似你'],
+['18341509','','c20df45e5d167459e2bf93b30dbb598e','3ab7c03d054e033bd78809ddbc567d33','云溪文阅','趣程15期','王晖','掌中云','今夜星辰似你'],
+['18341508','','8752b7cf79168f64e1849c312ce86705','ecedfcbca817d2c8509927f1031e6b45','云溪文阅','趣程15期','王晖','掌中云','今夜星辰似你'],
+
+['18341507','','08f243215963f28615ffb9d89431d178','064d95073171ba92c115591227c11f5e','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['18341506','','561ff189f0dd60aa5034d04583db697e','f9b3113d046cd99f79ca5f01608913ac','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['18341505','','26fea7b829caadf2855cd7c58756b196','fc81d4c84c33ce684312bddcaa81aa11','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['18341503','','e52d37bba95eddf960fbe85f4bbeb0c2','784527212f8e4726e314e015001b75cc','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['18341502','','19433a41fe5ee31593d33f471c2e883f','9665c701609887c5de4c5e51432ab655','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['18341499','','87e1fd65626e6571ffb2c88fa06b711b','87e1fd65626e6571ffb2c88fa06b711b','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['18341498','','a54995c8f0872a1036e729f908b98e15','289e44ba86add18d9494f91ac7e17c7a','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['18341497','','414afb958051659d1e5e2f2e85ad2066','e2c3fc4eda662c1f77ab254b3e149bbf','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['18341496','','ecb4e219b5266406a868de5b402c6992','03f737a3213b19e03ad8eb9905efb910','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+
+['18341495','','8ac11f86634dc5e063c7e3f562f4a039','dd1f71c2360773c738bf3c637b577010','苍松文海','趣程15期','王晖','文鼎','绝世风云'],
+['18341493','','f95f47a909f9472bed06d27ecbb7af5a','0297bb7bd02dd154d6135d52d644ce96','苍松文海','趣程15期','王晖','文鼎','绝世风云'],
+['18341492','','4967cb8478e6608f9d796add07743679','d78de90bd8fe94f9a535ca3ad65d603e','苍松文海','趣程15期','王晖','文鼎','绝世风云'],
+['18341491','','68ddb3ab5d674cbf7a49086f041dd07c','98ca9172723b803c7ee40deff9901069','苍松文海','趣程15期','王晖','文鼎','绝世风云'],
+['18341490','','021a638ab1393d78160bd6ab7611fd70','7836a8a0b6564e77af271d98ded04bfe','苍松文海','趣程15期','王晖','文鼎','绝世风云'],
+['18341489','','08b1b4e014da115727d28e2c2fce3c89','fcdf5c7f6942a5b22a5f517df841d174','苍松文海','趣程15期','王晖','文鼎','绝世风云'],
+['18341488','','197d7529e0a24fda502452da2970a7f7','7afe547950214fd40fd355b317b64491','苍松文海','趣程15期','王晖','文鼎','绝世风云'],
+['18341487','','87b52f80445d4aff74facd261511bf28','9ef19df93555ab225e2a83a3b6dea8c0','苍松文海','趣程15期','王晖','文鼎','绝世风云'],
+['18341486','','f27b4f21fdd134b9abd5ab7914703557','cf42eed433c651d6f7a2190e7efc1fe8','苍松文海','趣程15期','王晖','文鼎','绝世风云'],
+
+['18341485','','00ba876be22b74e7be1db570c08fc86a','1e2768be6c54bbe832ce3ef93ad501b8','凌霄文海','趣程15期','王晖','阳光','天医归来'],
+['18341484','','724531da3cd1b1e8cbf8cad4ccf0fa48','4cb49e8c9f79c55ac48ab10ee7da3ff7','凌霄文海','趣程15期','王晖','阳光','天医归来'],
+['18341483','','ade0c5402950b373fe57b6afae16f0ac','da1d7a3099c5e958216816cc6dace8fe','凌霄文海','趣程15期','王晖','阳光','天医归来'],
+['18341482','','63003e13f94ec1b4e7f3b39d3ef72416','a7c95d29245b684f51f01b3e644fe54a','凌霄文海','趣程15期','王晖','阳光','天医归来'],
+['18341447','','c336541ac0446a5f677282eba26cf72b','d06f802586a31f23544c9dedbcd412e5','凌霄文海','趣程15期','王晖','阳光','天医归来'],
+['18341446','','f6ef9246da5a584264b47106c2118147','a87fa6a25d35a48212051b1566bae57e','凌霄文海','趣程15期','王晖','阳光','天医归来'],
+['18341445','','ed44adf40c8e6a95c068a6e7255c7c88','d3c22ea65d561619ccaca4360278d399','凌霄文海','趣程15期','王晖','阳光','天医归来'],
+
+
+['17922913','','0073dfbf72ef8e437123638319257432','5211b478c232d15afa9f29ec01ba6641','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922912','','fae92d2e489435e8db84c615870272a2','849cd4a8efe5e457fb77b7e6d617787e','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922911','','a7be134fb6d3521b7d217a03d98a00e8','e3615ead2c69d88d5b4c6dd69b7a02ce','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922910','','94e0ee601ddbaa4e08d3f0b111147b77','d295bb2ffc0c6fd34af284b85041ba43','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922909','','973acc80004e7215b177fd754efdea79','ccd95664070de836fd7e7a6b1bbf7171','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922908','','89bd6796a4f68e3d2f9e0ad1b15d7503','86f931019f731bd406bffea2575545a8','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922907','','c57682194471ce7006eb838a4938018a','1c1c83ec12330f61ff7f3aa28a937c7d','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922906','','a0d5b2c2346a9ccd654f613cd5859508','3c5d769a8ebae11816daa055a0f98cf0','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922905','','9ed8682f927312d50368f76b05c28fac','da18ce84da3748a8e42bfb8eed370734','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922904','','1248045fed4dcd64a1fc4dc4aa6b71a7','4541cbcb2116e24e765f6306b95efc79','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922903','','c078530f100e02b1a40fd1f0a807aa60','182379187054ef1e1f4eab3908a4ff4c','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922902','','4b1596142aedfed85268f4bf5ae10d06','58de9d72ae80f4e8b48cddc0d7049a4c','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922901','','0d2c88e13d96b8971c6c25d703487b60','e0338bf49b8959faa6d9c5f45607feed','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922900','','ce1e8e20b0a4718ab6aebc865d34cdad','e4344576603bfd42478ee21674d94a9c','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922899','','f06888c13230e39ff203f8bcb5d140be','b1284850241bf1ca98f058bc4b858185','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922898','','ff8d1ad46d2f7ccdd0500004cfbe830f','222fbe07fdfbbccac7160e722b6cb7ef','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17800992','','65bff05fcb157f178624e8d6b3bf6e6d','948f62049e3c3506a0d1e11de00b9c35','盛德文苑','趣程15期','贾婷','悠书阁','蛮荒神女'],
+['17800991','','ed541da345670ed36bf98581887b986f','8eaea9a66a4641d11bc3d7b7f2528179','盛德文苑','趣程15期','贾婷','悠书阁','蛮荒神女'],
+['17800880','','8c9cd3acb737351c273809e1c130b604','f702b2146a19e1d53e66cdda6e597e41','盛德文苑','趣程15期','贾婷','悠书阁','蛮荒神女'],
+['17800878','','121d6cf018167b88449134e4588c5233','be1198179531d0acd76f7dc7241a924c','盛德文苑','趣程15期','贾婷','悠书阁','蛮荒神女'],
+['17800876','','b3d869077e263a4ac08176119c2cbc9e','c592f5080c0ffecbaf8916d2015c29df','盛德文苑','趣程15期','贾婷','悠书阁','蛮荒神女'],
+['17800889','','88d6489073800b3905b9fae987836c9f','4319b7699b55e4cac07fa34a014d4dd8','川江文海','趣程15期','贾婷','阳光','狂妻来袭:偏执大佬宠上天'],
+['17800888','','1e21df29d893a994b519b2072b26392d','51740b623955833d3b508ad63c95067b','川江文海','趣程15期','贾婷','阳光','狂妻来袭:偏执大佬宠上天'],
+['17801002','','6fb89445d25b8d9b52c46a65b1ae0064','07f49d823648fac712daf1e5d9587334','川江文海','趣程15期','贾婷','阳光','狂妻来袭:偏执大佬宠上天'],
+['17801000','','419913be270c5285cb84ab3f2d63bd59','0b28b74b13bfff8bfa2c978ded823e3a','川江文海','趣程15期','贾婷','阳光','狂妻来袭:偏执大佬宠上天'],
+['17800922','','661b2fcfc84097b23d6da7781a14299e','5ca349cedcff0c6a22ec7e0697bed764','骁骑文选','趣程15期','贾婷','文鼎','逆袭人生'],
+['17800921','','bc9479d758f4b0d1d0fea873673554f5','92d8ba54beb8c88edf44e50822103da2','骁骑文选','趣程15期','贾婷','文鼎','逆袭人生'],
+['17800920','','03be8032bb1a9fee473d9667b0bd0869','8d4828f52995eb15ceeb7a52b51f52b0','骁骑文选','趣程15期','贾婷','文鼎','逆袭人生'],
+['17800801','','f6c4171143f43b68f84e1489cf4daaa3','3e6bbaf0257ae0c91c1464163eb9c38c','骁骑文选','趣程15期','贾婷','文鼎','逆袭人生'],
+['17800799','','cb2f21e348ab0ae2844d71b95afea3c4','60f5e76a802d603e5ad40a0179c1fb76','骁骑文选','趣程15期','贾婷','文鼎','逆袭人生'],
+['17801385','','b5ca681f6a2760b15f6d46ab06e1be69','8ac0d254d5bc0fdc9780f6a0cbb781f8','沙云书海','趣程15期','张琦','掌中云','天行医尊'],
+['17801384','','5c7ebb3537474a2ee13be94531393df0','9829089e0243a09bbf45777042e85e11','沙云书海','趣程15期','张琦','掌中云','天行医尊'],
+['17801383','','65d4b273da608e2a9b7dc43c043b6e6f','4caca66c3dbbec8fa2740b2a43290db1','沙云书海','趣程15期','张琦','掌中云','天行医尊'],
+['17801382','','ff8c67f66ee129e0eb25dba0c9b4dda2','f5c4726e39baa957090e85940beea8ad','沙云书海','趣程15期','张琦','掌中云','天行医尊'],
+['17800961','','2bb8ade7b42c691559b1a3010a08f213','9cabd49380a5139f92dd5704ec954e8d','沙云书海','趣程15期','张琦','掌中云','天行医尊'],
+
+['17800869','','d2a9f4c458f8e197788728dce4e3af88','9812e37466c6e6ce589c8371b166f2b6','月华文苑','趣程15期','董平','阳光','狂妻来袭:偏执大佬宠上天'],
+['17800868','','bdb6cfdd67e8dc4d843201bdaa2ee42b','7e07e5244f15f2d7570405b27e7dcace','月华文苑','趣程15期','董平','阳光','狂妻来袭:偏执大佬宠上天'],
+['17800867','','181b2a45430a973da7daf34ce33fa6e6','fee329d1d48f74254766405442d8d083','月华文苑','趣程15期','董平','阳光','狂妻来袭:偏执大佬宠上天'],
+['17800865','','b59f015a007678365119604abd1eca43','549c6e15ace9244429b6bdc2cbf27acc','月华文苑','趣程15期','董平','阳光','狂妻来袭:偏执大佬宠上天'],
+['17800864','','eab904173d905fcd2d623e97cc64018f','65b1dbf8581270e16e03d1ea2b6411e3','月华文苑','趣程15期','董平','阳光','狂妻来袭:偏执大佬宠上天'],
+['17801260','','042d8bd03d0f1e66e85b8eb51410602e','3e9926db291d78d7064e3d848ed36809','星砚书海','趣程15期','唐怡婷','悠书阁','蛮荒神女'],
+['17801256','','38092f1abc5a2bc575c07fe9ae22a38b','ba731ca4ab0f677084888b4f4ddec8b4','星砚书海','趣程15期','唐怡婷','悠书阁','蛮荒神女'],
+['17801252','','176f1a8296cd38501a59a02193c2666e','2aee01582ded8adec9982694a17d129d','星砚书海','趣程15期','唐怡婷','悠书阁','蛮荒神女'],
+['17801234','','dacf514076599f966663c7130429eecc','433b48f500cf4d84fe541cae90661b2c','星砚书海','趣程15期','唐怡婷','悠书阁','蛮荒神女'],
+['17801230','','69bbf9279db0708505d1711c5522baa2','82fe3001ba210efbd348d4eac0869cde','星砚书海','趣程15期','唐怡婷','悠书阁','蛮荒神女'],
+['17801227','','84b5dcfdb73542993bb1a111a3f5d12b','f97f2feb1ae014f548d09aa8e3fa4081','星砚书海','趣程15期','唐怡婷','悠书阁','蛮荒神女'],
+['17801221','','ab0cf3fe150f4875e01edebcafa9af95','f5ec50386258090405b416a3e39134ef','星砚书海','趣程15期','唐怡婷','悠书阁','蛮荒神女'],
+['17801217','','625baff1968770d709b1359830dbabe1','1a7beb47ca85b452f8992c9f73508c00','星砚书海','趣程15期','唐怡婷','悠书阁','蛮荒神女'],
+['17801215','','500d823aa4252771c02f81eaa569c873','9eb784977d95d27771e4c2c0e0272b5a','星砚书海','趣程15期','唐怡婷','悠书阁','蛮荒神女'],
+['17801213','','1094bb5a2e18cc972ec5e8f7f8ec466c','62aea11900b25d4760e94b2622786411','星砚书海','趣程15期','唐怡婷','悠书阁','蛮荒神女'],
+['18141885','','c3d1b599225b396411e40f0037940c33','a66fec11ef62ad21c66f5dedf7acd7a1','神风文阅','趣程15期','王晖','悠书阁','蛮荒神女'],
+['18141875','','dbc8eda1effdd4302ec52d4407c94da8','875c62a6b837ccc6cd5f06b78daeb8b0','神风文阅','趣程15期','王晖','悠书阁','蛮荒神女'],
+['18141879','','ee45b8abaa71f6e204cb260132a7cade','28896df58b0ca411968d982de3dd2ca4','神风文阅','趣程15期','王晖','悠书阁','蛮荒神女'],
+['18141883','','183e492d767326c1598f736814826a47','85c1faa3e197146e477f772ba5cbe87f','神风文阅','趣程15期','王晖','悠书阁','蛮荒神女'],
+['18141876','','d3ea365390bf7c63e8d22593302593e6','bfcd6e2651db6d8fbba0b8cbf278eefd','神风文阅','趣程15期','王晖','悠书阁','蛮荒神女'],
+['18141882','','b8aa3259295f019a63511b567d3d69f9','d73340fda88be57ffba84781316eb392','神风文阅','趣程15期','王晖','悠书阁','蛮荒神女'],
+['18141880','','51e19d4bf19bb8bfd4b1796456c9cc0f','830a978d8db1b114049d8a775b59a93f','神风文阅','趣程15期','王晖','悠书阁','蛮荒神女'],
+['18141881','','217dda0685604bb5d68c2fb3cd36ca76','e9d2e53667286bf758c8ef6caac69237','神风文阅','趣程15期','王晖','悠书阁','蛮荒神女'],
+['18141874','','69f5673039976a71683a8e31d0a80a99','42490e87d506c1d2d56706c7ed06ad1c','神风文阅','趣程15期','王晖','悠书阁','蛮荒神女'],
+['18141870','','c1a327347cd7d75edb161fe3952edea2','707908125183fc27386ff776b132af25','神风文阅','趣程15期','王晖','悠书阁','蛮荒神女'],
+
+['17801955','','13824b2ecdc9702e7c81615caf7bfd7e','375f045aa7f2d6b90e34d84d5bcbb083','云景文阅','趣程15期','王晖','悠书阁','我与你的情深似海'],
+['17801895','','db52abcb7ad4747f435aeafd163b0ff7','d1eaf55f9057e7dc7418910694aa8b63','云景文阅','趣程15期','王晖','悠书阁','我与你的情深似海'],
+['17801894','','a75eb2d2e5675dd8167bd48994a56aa9','c62f63b1f465f938a8389068ef3029d3','云景文阅','趣程15期','王晖','悠书阁','我与你的情深似海'],
+['17801893','','3e42988910e54269a332eab1940543b6','360eff589bd73c4697eab3ea11a866dd','云景文阅','趣程15期','王晖','悠书阁','我与你的情深似海'],
+['17801892','','1b62b677c31f1d4bef9b453db77f63c3','8d002b6b3542ba3c7d689494b2231b51','云景文阅','趣程15期','王晖','悠书阁','我与你的情深似海'],
+['17801891','','f8d899134c798001227b49db7994f7b0','ae4dd248e5567220f65abd11b0f43c75','云景文阅','趣程15期','王晖','悠书阁','我与你的情深似海'],
+['17801890','','eb125bf75f938720b9ad8497c3136520','1f3332a00113467378feb797138bfbba','云景文阅','趣程15期','王晖','悠书阁','我与你的情深似海'],
+['17801889','','1bf1f82ec5f56cc30bb015574401da13','02294acc9baed13029fe8c6e1b465c14','云景文阅','趣程15期','王晖','悠书阁','我与你的情深似海'],
+['17801888','','f0ab17974df4495f365d927b4bb21606','ad546f1a4bdc0ccd421a088a28204aad','云景文阅','趣程15期','王晖','悠书阁','我与你的情深似海'],
+['17801887','','0779d2d72059b439f70b085c8d74d06c','4d3674ef66a0796d1d7bf3fe50428dce','云景文阅','趣程15期','王晖','悠书阁','我与你的情深似海'],
+['17801954','','5ec13fc050d2f72847e1211eba3c4a71','7fbab521d2ae3e88d513141457692658','云溪文阅','趣程15期','王晖','掌中云','今夜星辰似你'],
+['17801886','','c2e92a7157e4545980dfb1bab275e9bc','3ed267ca6d4bb5bc054377950e32fd79','云溪文阅','趣程15期','王晖','掌中云','今夜星辰似你'],
+['17801885','','1e490bf8f768cc0d172b56ac4e600ca2','360bf204055643189cf9747a580d53d1','云溪文阅','趣程15期','王晖','掌中云','今夜星辰似你'],
+['17801884','','cb9033617743ff51940e0b76be64a2be','6f658ed9e13048f74b9a53cce6acaf3a','云溪文阅','趣程15期','王晖','掌中云','今夜星辰似你'],
+['17801883','','b8a40d4cb29202fbf6a64cc01839131e','9a182b86390739c886ffc21de203a04c','云溪文阅','趣程15期','王晖','掌中云','今夜星辰似你'],
+['17801880','','4aa919d19d0d34c2d3508d37d04abf95','89f0e48bbd67cdc73b70956ded43295f','云溪文阅','趣程15期','王晖','掌中云','今夜星辰似你'],
+['17801879','','9bcde0adf2e0d49407d3b66f1bf1a713','e0649365ed7719594f2bb27783ab852f','云溪文阅','趣程15期','王晖','掌中云','今夜星辰似你'],
+['17801878','','52744ef4a9185036838b1d6d5abbb5ec','f5ce5b8e97d0c7c83499868b58e32834','云溪文阅','趣程15期','王晖','掌中云','今夜星辰似你'],
+['17801876','','81b5573b86cc1061ea8e3a25de995d37','38c94e483e703212d487d59b3630d7b9','云溪文阅','趣程15期','王晖','掌中云','今夜星辰似你'],
+['17801875','','5a08df89b1fef00f11b5d24f3a869047','45013a9163e3d876d69f6bd2d9a1e998','云溪文阅','趣程15期','王晖','掌中云','今夜星辰似你'],
+['17801953','','66de6f8b0cfbbe2bced1bc758a60d8d2','b0e756350fb859acf3c0f864db375a9e','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['17801874','','c0bbd933961e0becceeb4c8b0c263620','e8edad64eaaf76793916d58e526bdda3','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['17801873','','3a74bea95512d8722f1722b16028cae6','850ba236fff3a0898e26fb340004f370','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['17801872','','8e1245dcab81eae3e42de77cf1f2569b','460d5a3606c2fa61b82de557c452f39e','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['17801871','','644dfc65fb5177705ce0fb0286902551','ce3630491fa45a867211b70687b2f01f','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['17801870','','2efc82d59e35d3d334a6090a65032e0c','83036f0ccb19f09bc18d8f978c980b82','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['17801869','','3055a3da3af7568bafa9f94776ce649d','a23ac70c44557d6b15d0951bd237d787','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['17801868','','df55f87bead3b74fe25c7df117844489','e1734ff490f011ccb6aa24481930a8b4','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['17801867','','4cee78987e6fc32012dd57559e628eeb','be83c89acccfaa6e18c3190334b0ad61','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['17801866','','b736638a5e1cc1962cce9d03aac520ba','f4cfde284d3e3985db25b5360bd96b79','华阳文海','趣程15期','王晖','掌中云','天行医尊'],
+['17801952','','cc1d1d07ae94c0cb067eeb01429a4103','3bbe387b65acb68f958c98f2c0f7d4dc','苍松文海','趣程15期','王晖','文鼎','扶摇直上'],
+['17801865','','3e171eaecede26842c89db570ed389ac','d1a0967e0ab92ab2c7801450438f2918','苍松文海','趣程15期','王晖','文鼎','扶摇直上'],
+['17801864','','97c34937e292ae1c34d8ea4d297b0bda','f97d09749aa2d06a8515536024360f5b','苍松文海','趣程15期','王晖','文鼎','扶摇直上'],
+['17801863','','0a60b51dbb74bd6ddd1876d499023666','44f7763285f589edb3917bd0268faac5','苍松文海','趣程15期','王晖','文鼎','扶摇直上'],
+['17801862','','959e69e9477cf7bf8eebe0a02d2c7146','57aaf04daf4cef5c16e7d62d82947be5','苍松文海','趣程15期','王晖','文鼎','扶摇直上'],
+['17801861','','2718a8a1ed97f1efd788bb48578d6c86','ce2314b50279e18abfa585af5c22a05a','苍松文海','趣程15期','王晖','文鼎','扶摇直上'],
+['17801858','','f933e1e91b039edbfa209dea3aadfee0','0d2dea4434bb916ebae68131f7f86fc9','苍松文海','趣程15期','王晖','文鼎','扶摇直上'],
+['17801857','','a7828450c2061f41621c0308621c7735','464280f814b8cb12fc020d3b93aaeb92','苍松文海','趣程15期','王晖','文鼎','扶摇直上'],
+['17801856','','971c84513a3c21da012cdf1d7f621100','3e94df53ad657c7642eb02476fee44c8','苍松文海','趣程15期','王晖','文鼎','扶摇直上'],
+['17801855','','4daa70f3db1ef8017829f424a283e35b','e78d4330c3e22cc68a586c7f2bd26bfc','苍松文海','趣程15期','王晖','文鼎','扶摇直上'],
+['17801951','','ab253a0ded1bdc18624e515fc7a1a3d5','70d37090a506103cf7345442523d7858','凌霄文海','趣程15期','王晖','阳光','天医归来'],
+['17801854','','75655c928cb85dde3781b673427dac64','59a4b81cfa5e03c5cec7384d90b446e6','凌霄文海','趣程15期','王晖','阳光','天医归来'],
+['17801853','','662d248d11998a047767f2affb6ffaf7','81b5bbd357f14504adc5a4d93b067623','凌霄文海','趣程15期','王晖','阳光','天医归来'],
+['17801852','','60eec929dc3ac667a65bcfe9e90772b2','76ad04b0dd57c4c0cd942b068011c44a','凌霄文海','趣程15期','王晖','阳光','天医归来'],
+['17801851','','a55661c4e2f7267c44e9d062490f2743','0faad3b652c8e315d974392859996e2d','凌霄文海','趣程15期','王晖','阳光','天医归来'],
+['17801850','','2dc634dd9ab8595a96e325f402748b61','d9ab925349a9c8d6f79b28ec310cdbe0','凌霄文海','趣程15期','王晖','阳光','天医归来'],
+['17801849','','3b50dc2f8b855dd757d019744ebcbdf8','1e45477c40d8f8d9a63e08dcf4767919','凌霄文海','趣程15期','王晖','阳光','天医归来'],
+['17801848','','d030e00440f11d02a94d7eb3bc713455','20f01f68dda872e0a64b0919010005f4','凌霄文海','趣程15期','王晖','阳光','天医归来'],
+['17801847','','f57b6dbc2fe23ffdbe6562fc442d2edd','bd11c40fdc1c0fae2bb5fae1ec3fbd0a','凌霄文海','趣程15期','王晖','阳光','天医归来'],
+['17801774','','92e3af8b04fc9e2c96445afe91cfa392','df275939fb96abd8a553e3880fde4449','凌霄文海','趣程15期','王晖','阳光','天医归来'],
+
+['17801351','','b7e589a7ab64e1e008fb820b186e63ce','ef82f8a3aaaf845e8194aedca439728f','文阅看吧','趣程15期','张婉','掌中云','九爷一宠成瘾'],
+['17801349','','f7ed6414bd2defaf118d87d23442386c','98438e0598024ca11bc4710a6f237583','文阅看吧','趣程15期','张婉','掌中云','九爷一宠成瘾'],
+['17801347','','dc527d0b7ede5f6004e1b7d1ea856649','bcdad1b9948593db91918ee8535668a8','文阅看吧','趣程15期','张婉','掌中云','九爷一宠成瘾'],
+['17801345','','85d65c124958abccd5ddb6e83e03e05a','0be1ae08e0e18641d54686a5eba8b300','文阅看吧','趣程15期','张婉','掌中云','九爷一宠成瘾'],
+['17801343','','0e656b6f31cc8c2a70fef7470be3df30','39746a5b0f25852cb490bd65650f5c6d','文阅看吧','趣程15期','张婉','掌中云','九爷一宠成瘾'],
+['17801341','','6acfcf772fecf71ef06c92fd669aacf9','5e700a0f966490df57d787a1300b0456','文阅看吧','趣程15期','张婉','掌中云','九爷一宠成瘾'],
+['17801339','','187ddce6b0a963c6cb52e4231cfb719a','207885e9112ab9d05b8295cbc28701c9','文阅看吧','趣程15期','张婉','掌中云','九爷一宠成瘾'],
+['17801330','','53ec466d0e819fcd551acd81a06847f8','d5cab6173642ad72e5cf4c8cab7fdeb0','文阅看吧','趣程15期','张婉','掌中云','九爷一宠成瘾'],
+['17801326','','716de7545c0026f9195f8d7438425b51','da22bad0aadedfceb0b277cd41805f80','文阅看吧','趣程15期','张婉','掌中云','九爷一宠成瘾'],
+
+['17801323','','feb7f86f8d74df5638523cb48de598c7','99ca0e46cf8078c9cee2fd0189021384','星辰文海','趣程15期','张婉','掌中云','天行医尊'],
+['17801321','','53fb29c2b52773efb053a3342b61ebb4','3789a57382e795456945d3bca033acf1','星辰文海','趣程15期','张婉','掌中云','天行医尊'],
+['17801319','','6dc03af6d7209d2e45e9e99bde830d54','d4111549a2516df8ac9b6d5059b92382','星辰文海','趣程15期','张婉','掌中云','天行医尊'],
+['17801315','','ebedd4592dc2dad4987c31cb837df5c8','450b3780bff980a41b23f292b16a9f88','星辰文海','趣程15期','张婉','掌中云','天行医尊'],
+['17801313','','505a899d783866ddba14a2d87b7d2689','24cc3f9780bf06fda17da5cf0279e750','星辰文海','趣程15期','张婉','掌中云','天行医尊'],
+['17801311','','c0d336be09f591b1177882844b6f3511','96fe0b9f469fea792e0fc2336f81ad7d','星辰文海','趣程15期','张婉','掌中云','天行医尊'],
+['17801309','','b1aa2c9812a4c31626348248877825ec','1750bd1d744767efba68bbeabedb12d0','星辰文海','趣程15期','张婉','掌中云','天行医尊'],
+['17801306','','e0224f7d5a8e520367e24b47d7c8685a','6e5f7abf08441b3ec9bc135ac37b3a3f','星辰文海','趣程15期','张婉','掌中云','天行医尊'],
+['17801305','','fc63540bcfb2b85774ef0b5d33b9e3fc','16353853b944c7dd0521b692f3cdaccd','星辰文海','趣程15期','张婉','掌中云','天行医尊'],
+
+['17801439','','c1c08bb93aa08e859e7b4353dbcf169a','b5d959805027ae57f30411b968b45dc5','锦程文阁','趣程15期','张婉','掌中云','护国神帅'],
+['17801437','','9a8350d026200b1627911080c12afc45','61e88d0c544bbe265fdd1d675d1fd94c','锦程文阁','趣程15期','张婉','掌中云','护国神帅'],
+
+['17801358','','fb839c206d63eac5cdea5d6207e50f5d','a7d428572cb5aa18ca602d08cc831314','洛林文楼','趣程15期','唐怡婷','掌中云','今夜星辰似你'],
+['17801357','','d8db139ed21d6893632bb6b0868c1340','d7641d576159d8fefe441de159f6dcde','洛林文楼','趣程15期','唐怡婷','掌中云','今夜星辰似你'],
+['17801355','','f244436d55b2541d783461015183bbc3','6fb344b82d64ca8d6ec22dd313a8aca9','洛林文楼','趣程15期','唐怡婷','掌中云','今夜星辰似你'],
+
+['17801415','','9e594275e6f71fa8026721052a0b4e2b','6f6d18eda067a9c9dc49d84745682f31','听雷阅读','趣程15期','张琦','掌中云','今夜星辰似你'],
+['17801413','','395985a58bf040f3a0d7edc5c07a1c71','8a0b758209abc38fba9ed0337e64f4e8','听雷阅读','趣程15期','张琦','掌中云','今夜星辰似你'],
+['17801404','','2aedf27d1d7d2f1fa9276002105952e6','89cc2597a6d51dd69037870c4ead7d12','东云文海','趣程15期','张琦','掌中云','今夜星辰似你'],
+['17801403','','b9cbf707b9b0ea955e24180e1eae0a11','1bfb360bee7602e588e452ff4cf17d71','东云文海','趣程15期','张琦','掌中云','今夜星辰似你'],
+['17801402','','8b092cabff3844b05f70c3e97dc52c18','efffd99c0009729ce1a7e0ac8db4295b','东云文海','趣程15期','张琦','掌中云','今夜星辰似你'],
+['17801401','','eaa7405375105663ad1b70cb5932623b','9ebcc108f47b5b009d09e52b3c49f7b6','东云文海','趣程15期','张琦','掌中云','今夜星辰似你'],
+['17801400','','55e2ede2e860af2170e6af335b2bc72f','cdcd4f18f8f3be237dd5d63bb21c616a','东云文海','趣程15期','张琦','掌中云','今夜星辰似你'],
+['17801394','','4947693cd49bd814aeeb6ee7fb1a2e2d','b5a99d9b5b5012e6ee22cae8014d8904','沙云书海','趣程15期','张琦','掌中云','天行医尊'],
+['17801393','','22f6429dc29a2ffab2a9b1824fda8c18','1df5530b4691c21c604abd70ac6c8302','沙云书海','趣程15期','张琦','掌中云','天行医尊'],
+['17801390','','37b5ec3e7e7c96f01158caa45d7d55c1','1616704fd6bf752064795e0c31f4068e','沙云书海','趣程15期','张琦','掌中云','天行医尊'],
+['17801389','','155cc936ab7f47be647b2f98c31c6f54','08c62c3f931b3cc398d09021b0c5021a','沙云书海','趣程15期','张琦','掌中云','天行医尊'],
+['17801387','','6a5119c0cbd7a58d6f5eea9c01a3f1a3','f85af78482004635313d74a7cb2c8bd9','沙云书海','趣程15期','张琦','掌中云','天行医尊'],
+['17801381','','ff0442d917ba61fb3a8f770be6235b70','aee927b8b29d00606e9052ca0b9cf1a3','星影文楼','趣程15期','张琦','掌中云','九爷一宠成瘾'],
+['17801380','','c56ad314ac90ace21c2b8e94c64bdaea','a65836b3733a8e4f3e35f04f11dc8ed3','星影文楼','趣程15期','张琦','掌中云','九爷一宠成瘾'],
+['17801379','','3eb99bdd3c517d477e8f72392dbb61c1','afdfeb26e911e292fff37b644468290c','星影文楼','趣程15期','张琦','掌中云','九爷一宠成瘾'],
+['17801378','','4b84e6d3ca8d81eaca278eb708b4a379','5441b17f9e01ba9e018ba60ec6b1bebd','星影文楼','趣程15期','张琦','掌中云','九爷一宠成瘾'],
+['17801374','','7df588b0724261b7ca5b41d1de6a4c1a','15d0b796d7eeabfc09062dba42be60ab','星影文楼','趣程15期','张琦','掌中云','九爷一宠成瘾'],
+['17801367','','4f6657782d3d2466254254979528a0e7','022706ce46612d5bb85e3e555101a4ab','百瀚文苑','趣程15期','张琦','掌中云','九爷一宠成瘾'],
+['17801366','','e7e2ca122b7c7ab1f33d402d3b75a988','ccef4c797e85edb1f23f22c1275ec7db','百瀚文苑','趣程15期','张琦','掌中云','九爷一宠成瘾'],
+['17801365','','3b030fd4c360c3883011c812f8b3f4be','2210e64e91eccbbeb0b033d2f1537ad2','百瀚文苑','趣程15期','张琦','掌中云','九爷一宠成瘾'],
+['17801364','','4829555300da36f8ee79493b1ef64af0','8a5535155b0854624fab746e1555a595','百瀚文苑','趣程15期','张琦','掌中云','九爷一宠成瘾'],
+['17801363','','cebfa57b1c58e34e2ff3b946f44166bd','4da569c42a36be24c2c4db91ed7ff959','百瀚文苑','趣程15期','张琦','掌中云','九爷一宠成瘾'],
+
+['17801179','','075f2a7e1c69b3069e4f86e60e3ef69f','8578a379d3d0cc6a828ce885e55c551c','乾城文海','趣程15期','董平','掌中云','天行医尊'],
+['17801177','','134efe3e8bd0064706b1a13774c4f265','67507c42067541dbd39a2eeb1e9e40ba','乾城文海','趣程15期','董平','掌中云','天行医尊'],
+['17801175','','24231bed600099df562c15a34c80a2ec','a58eee44ac50f40a35374ea4154ec84e','乾城文海','趣程15期','董平','掌中云','天行医尊'],
+['17801173','','368e727bcb212f7b3948e74df8915621','e2803723c349358fec45e69d9b2cf4d9','乾城文海','趣程15期','董平','掌中云','天行医尊'],
+['17801171','','f783c24c451c41e4527b8c668e987f81','133030141d6766cd26d3a6899aa08c09','乾城文海','趣程15期','董平','掌中云','天行医尊'],
+
+['17801169','','affe5c3d16d599854d88c4c41c59acbb','ba4491b03a106930d64af1969f2d7525','雷政书阁','趣程15期','董平','掌中云','天行医尊'],
+['17801167','','402979c334a13764fa86841c22e94e2b','4b3a7b0a5897b68149e04a04d1587853','雷政书阁','趣程15期','董平','掌中云','天行医尊'],
+['17801165','','2f41557ea0ce02ec681ce5b7cef69d86','07d3bd2c006d002a8a5010266917a91a','雷政书阁','趣程15期','董平','掌中云','天行医尊'],
+['17801164','','62cd69158fc7731f3e00cf45a6c84def','ace26128c3caf688ebd2acc6016622f9','雷政书阁','趣程15期','董平','掌中云','天行医尊'],
+['17801085','','a050465117b49026d43217a0f0ad8cf7','868fe35fc7bce2762049ebfc3a6ad1f9','雷政书阁','趣程15期','董平','掌中云','天行医尊'],
+
+['17800979','','29f40e7ff7e0da2258cd7134589f8053','5eb545a1423f802b8a201b17f9153b4e','星河看吧','趣程15期','董平','文鼎','扶摇直上'],
+['17800892','','2ad2e139b2d064f0c9b9f273d499923a','ac27abbd695aff3e89753f910b54f79b','星河看吧','趣程15期','董平','文鼎','扶摇直上'],
+['17800891','','29f53c8302ece52a6abd30c3e5f391b0','1506bfe7d678210c86b6a2855ab46b90','星河看吧','趣程15期','董平','文鼎','扶摇直上'],
+['17800890','','6c28ed1b297e116b95026d3a43db2333','e06730e845cda76aaff96e5484d342b6','星河看吧','趣程15期','董平','文鼎','扶摇直上'],
+['17800887','','7f37f8ec761ddee2a363cd9478ce34e3','5ad520437ad49d4a147c939d76e79d78','星河看吧','趣程15期','董平','文鼎','扶摇直上'],
+
+['17800978','','2287d132b5bd8238b33e5818a52e22c4','237b52652794c442a679962facfbc9a7','月华文苑','趣程15期','董平','掌中云','今夜星辰似你'],
+['17800886','','d1ba52b65a77601d5e79731c03b64f1a','a656a31a280709efa3f44e16b8a319e3','月华文苑','趣程15期','董平','掌中云','今夜星辰似你'],
+['17800883','','0aa56b1db1c3d24671f7511b84c77ca0','48d9e76edc01329a5a6ac8c927f66d0e','月华文苑','趣程15期','董平','掌中云','今夜星辰似你'],
+['17800881','','589c9b2b0af3fb8a66f1076178701e87','b958e4f35fb468a16d04b636456e915c','月华文苑','趣程15期','董平','掌中云','今夜星辰似你'],
+['17800879','','164acb7eb010fac6d105caf62f544987','166f9a8b6fa6625294c6f4a3ab219905','月华文苑','趣程15期','董平','掌中云','今夜星辰似你'],
+
+['17800877','','072a21fa1199685272ec13f019ad59ba','9172076208c38cee7cd822a41353a8bd','吹雪文库','趣程15期','董平','掌中云','今夜星辰似你'],
+['17800874','','301f8e3f0c52c4e9a8cd3f7a3503c050','403cd5486e809f6890fe7c4887938f1a','吹雪文库','趣程15期','董平','掌中云','今夜星辰似你'],
+['17800872','','a0c013d5e18e6d1766fe62ed045cfaf6','f28a4f8b1fcd0ce2c74a40a870f2eb82','吹雪文库','趣程15期','董平','掌中云','今夜星辰似你'],
+['17800870','','d1e32b9a9014ad31b04395a9d9b136bd','c0399d76905c42ce188e32755187829c','吹雪文库','趣程15期','董平','掌中云','今夜星辰似你'],
+
+
+['17801433','','09ca05d17053b4378c5e484f90bb4477','8ea6902700a54265dc76f2f468a51db2','叶然阅读','趣程15期','张婉','掌中云','九爷一宠成瘾'],
+['17801303','','c7500006abd950a57835bac9f8b7c185','7e1cd5d5d53358236f75c658512f069f','叶然阅读','趣程15期','张婉','掌中云','九爷一宠成瘾'],
+['17801301','','9d7472cefb92810489a7ffe0257a29aa','08e276cb7f2dfea127fb45a0d8b7ce25','叶然阅读','趣程15期','张婉','掌中云','九爷一宠成瘾'],
+['17801299','','57448028070070beb341eea6c71acd12','b931f6946c75acfa3ceebe6d4bc08689','叶然阅读','趣程15期','张婉','掌中云','九爷一宠成瘾'],
+['17801297','','06bf51192708b66ea1fb12d913c80915','01ced14939b5041959bb576b7dbf1349','叶然阅读','趣程15期','张婉','掌中云','九爷一宠成瘾'],
+['17801295','','a54c885fa7caac57a49eba9bed6af11d','ce4820bea4632e08d20816fddad3dc4a','叶然阅读','趣程15期','张婉','掌中云','九爷一宠成瘾'],
+['17801291','','6464fd8f6dbe936010fd86164a5b9155','5f83f5ab9e5cb9be62441647b42f982d','叶然阅读','趣程15期','张婉','掌中云','九爷一宠成瘾'],
+['17801288','','365047f2c056e99b27895dade528ca7b','4ea04c9e36f999d345e4489e5a7ba4fa','叶然阅读','趣程15期','张婉','掌中云','九爷一宠成瘾'],
+['17801286','','45ca36d0db2a1bc30823da4a945d4277','4fa3def96222b69f586fd9a9aa95106f','叶然阅读','趣程15期','张婉','掌中云','九爷一宠成瘾'],
+['17801285','','c9ff5e0eb686851429cbb4cecb80d725','c9892195e13b05f0db7576250e1dbb07','叶然阅读','趣程15期','张婉','掌中云','九爷一宠成瘾'],
+['17801432','','ca170de473aca911819b0b02c8ebf207','1c88a3a198cc88f493e11a25d725ca64','青轩书涯','趣程15期','张婉','掌中云','天行医尊'],
+['17801281','','b5a49ead57ca6594b42fbd1cb3fd9e80','f957e573e465d158a23a7a8baeb70591','青轩书涯','趣程15期','张婉','掌中云','天行医尊'],
+['17801279','','3c616c09d2cd4133a53b7e4570ac818b','c9ddcc6ed700f090ae87f3fc503093e1','青轩书涯','趣程15期','张婉','掌中云','天行医尊'],
+['17801277','','bf890e81f7d64ee8e4559c77965e411e','ff1a4c8d19e6956c533f4f5599d44ca9','青轩书涯','趣程15期','张婉','掌中云','天行医尊'],
+['17801275','','f24ce376ce27374fca86121e1e2ed60b','389420ee7cf3f9c4985de5818ba6faea','青轩书涯','趣程15期','张婉','掌中云','天行医尊'],
+['17801273','','9e4c6d3d9d28dc38e63d6195828282c6','f8b2f9ae2f6011cf3619ff04a466fba8','青轩书涯','趣程15期','张婉','掌中云','天行医尊'],
+['17801269','','bfb943b813bc1ae68dfcd8830ac56577','14d48a3334bcf74e55f816f481e9c311','青轩书涯','趣程15期','张婉','掌中云','天行医尊'],
+['17801266','','84c1ddc7145257446dcc642992567ce8','caa65eebeb60e80c515ca2b55bbab3af','青轩书涯','趣程15期','张婉','掌中云','天行医尊'],
+['17801264','','c3bce9cd741fc955a61568a5bdc1ad4f','49b8a538cc0a93110972a2ad974fac57','青轩书涯','趣程15期','张婉','掌中云','天行医尊'],
+['17801353','','b2b860cc91082854f607dba19e7bb836','22ddeeb48a54a5a09437ed229b82d3a7','青轩书涯','趣程15期','张婉','掌中云','天行医尊'],
+['17801431','','c83e426657e5782f52bbf4eca618faf0','a03b28fe7284de4ff9fe1f6d85a93c0f','洛林文楼','趣程15期','唐怡婷','掌中云','今夜星辰似你'],
+['17801430','','4c78aa5856b268231ccbc1a68cb141f1','ef20c16ca221f881be88bf26ff98793f','洛林文楼','趣程15期','唐怡婷','掌中云','今夜星辰似你'],
+['17801428','','467456b016e62c71a6c76d479f6f32fb','446c4c4b85ec7ceb316cb15ea15c1538','洛林文楼','趣程15期','唐怡婷','掌中云','今夜星辰似你'],
+['17801427','','c9dc96745335ddca4b49673d6e6e4b29','b150b9a9033cac89d19c1d6336017762','洛林文楼','趣程15期','唐怡婷','掌中云','今夜星辰似你'],
+['17801426','','423b8617ef9f4f94961b6697a8f876f2','6e55545c4641645a8a5ea7667a450613','洛林文楼','趣程15期','唐怡婷','掌中云','今夜星辰似你'],
+['17801422','','070ad382d8607186a99fef2f5894ba64','e4cf62e4c8a8bc18e7b36e78725da180','洛林文楼','趣程15期','唐怡婷','掌中云','今夜星辰似你'],
+['17801420','','1c2d435a498471495abff5cfe5bda5f2','546515fe4ab95e95b1572271113b2b28','洛林文楼','趣程15期','唐怡婷','掌中云','今夜星辰似你'],
+['17801418','','faeec37a46194eba37363485bb433d42','4809841968be031eb5d1e1f55a94ac13','听雷阅读','趣程15期','张琦','掌中云','今夜星辰似你'],
+['17801417','','451e3c60b0e251defd06093586d119c9','9c8711fc3c68b99365d1fdd500543ccc','听雷阅读','趣程15期','张琦','掌中云','今夜星辰似你'],
+['17801416','','2d5bc8fd6a30605a1bda3382a8bb1d35','1173e1cb8056f61406c841be9226080c','听雷阅读','趣程15期','张琦','掌中云','今夜星辰似你'],
+
+
+
+              ['11262880','','06d454c873ecfd02836056392c8f8477','7934e0d2f48b7a9e35f990a147c024a7'],
               ['15132153','','23e885e8e26a773c31ddb1eea789b9bd','75c97e3eacee95e7fc0a6fa0297a9a5b'],
               ['15132139','','06f5f51bbc68cafe6ed041217acb43db','7ab1a9da6840affb93c3dd556579dc82'],
               ['15284260','','9a15e6b520226c618c786950c0f1b478','cf733a42c45e583f47d2c18d37acebd6'],
@@ -487,12 +1070,339 @@ token_list_qq=[['11262880','','06d454c873ecfd02836056392c8f8477','7934e0d2f48b7a
 ['17801029','','ce52df1577b73f04cbb7234e7660ee18','770b6df478a465d50c59ae09c844a8c3','瀚文书海','趣程15期','贾婷','文鼎','凶猛夫君'],
 ['17801028','','cf0ba346a027253e6f5d3f0e013b9952','5bf96274535c8ab29b4d6724b2729e78','瀚文书海','趣程15期','贾婷','文鼎','凶猛夫君'],
 ['17801027','','dbe44f00a79b0a96381c18c0adfa9f61','bc191472339d3d2daf28e9ce20a7d471','瀚文书海','趣程15期','贾婷','文鼎','凶猛夫君'],
-['17801026','','8e528aeb46d5ca18a93931c44ef2db71','0a6c9c2476c945f60c31aeefd5b78c62','瀚文书海','趣程15期','贾婷','文鼎','凶猛夫君']
+['17801026','','8e528aeb46d5ca18a93931c44ef2db71','0a6c9c2476c945f60c31aeefd5b78c62','瀚文书海','趣程15期','贾婷','文鼎','凶猛夫君'],
+['17801162','','d306e4bc664ade575062a9927658e5c3','a8b7f1d637729d043b1c58b8172cbf49','高岑文轩','趣程15期','黄鹏','掌中云','陆少霸宠替嫁妻'],
+['17801160','','e854c0b1fb430f2215ea79a55a99419d','c1aa76dfd6fd32cd4f03328eb997868b','高岑文轩','趣程15期','黄鹏','掌中云','陆少霸宠替嫁妻'],
+['17801158','','dc7aa152e2b4480cf418e6c141c4d1ff','b8626eb5db0220f1d24efd53f7dc3388','高岑文轩','趣程15期','黄鹏','掌中云','陆少霸宠替嫁妻'],
+['17801156','','ac0027e75989f333d04772b2e9e95fc9','329063cda4073230350425a08f163ad4','高岑文轩','趣程15期','黄鹏','掌中云','陆少霸宠替嫁妻'],
+['17801153','','713a7b900adffe86a6a13fafac7d9874','5c64981d15e4b4ce4de7385bc974717b','高岑文轩','趣程15期','黄鹏','掌中云','陆少霸宠替嫁妻'],
+['17801151','','24606cba827671df16a7c4ff89698f7e','99c7dbbe755972b41d811e7180477986','高岑文轩','趣程15期','黄鹏','掌中云','陆少霸宠替嫁妻'],
+['17801148','','3d152106478c73c391b758143d4f31fc','c98bca25e89df0d8db9f4337e378d9d3','高岑文轩','趣程15期','黄鹏','掌中云','陆少霸宠替嫁妻'],
+['17801145','','b141541110de5ec0e911bfe8694d566c','65df7f9bd83021ecf1383f99f260d1b9','高岑文轩','趣程15期','黄鹏','掌中云','陆少霸宠替嫁妻'],
+['17801142','','75ed4b7abac71bc7b7677e63185d6afa','6ee76244bcfc55bfc54deb9ae2924b5e','高岑文轩','趣程15期','黄鹏','掌中云','陆少霸宠替嫁妻'],
+['17801140','','a8d8e366a6dc3bcfa7ea3e08bf9b635d','a6abfeeb718e5db69e5d1018e858c079','高岑文轩','趣程15期','黄鹏','掌中云','陆少霸宠替嫁妻'],
+
+['17922946','','2e156bc6b2c27d2998935870b0d0a732','40eea37e6b92bf0510b08aed30357cf1','泽宇文海','趣程15期','黄鹏','花生','王婿'],
+['17922945','','b17029a771eaadec4fbd4274329d7e4a','151e136f4e25bfe96793e749bc838ea6','泽宇文海','趣程15期','黄鹏','花生','王婿'],
+['17922944','','96eb6d6ea4ab633868d43432dd5ffacc','75ababee17f192022844db121b0f3fb1','泽宇文海','趣程15期','黄鹏','花生','王婿'],
+['17922943','','1f55bbd7dea82f67b6e162dcd729312e','db2b92317baf2fcf4775c001e9c15633','泽宇文海','趣程15期','黄鹏','花生','王婿'],
+['17922942','','6ed33380d2f11e71f62b7f3777b35252','b561e237587e98ad16f80c316b64c03e','泽宇文海','趣程15期','黄鹏','花生','王婿'],
+['17922941','','f20eb45af6c53a8e24bce5493cbf6d29','1ddaae41058a40e9720ac0b356f2bb53','泽宇文海','趣程15期','黄鹏','花生','王婿'],
+['17922940','','d16ba4f9849610023d1ae9ec74865780','a3ca9076a7b63501d83a6abf60d39b8e','泽宇文海','趣程15期','黄鹏','花生','王婿'],
+['17922939','','9450abb7ab887a65f07e96f88ee0314f','f9ada8aebf060dcf5b9060e2f787ab69','泽宇文海','趣程15期','黄鹏','花生','王婿'],
+['17922938','','57181b75363efda09ee15295267cea88','102ad2104c9cdf5801765cb5494a60cc','泽宇文海','趣程15期','黄鹏','花生','王婿'],
+['17922937','','12588c835137a174b434ad23dcb30481','d643399dcb1658508f9e64947982669d','泽宇文海','趣程15期','黄鹏','花生','王婿'],
+
+['17801138','','311ab0f44ab47745cfb686984fcb3bd3','b004d5ca5238fcc4afcdfe83adba2571','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17801111','','f7203688cce19507db4d354f2c4a62ba','4ce3d8f715f11fad5ec42b27553b42f6','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17801109','','6e3aba03640e05a9734969fe274bb660','bcd7c72233a3b12080c11eff5a2aeeab','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17801107','','4bafc8da648a5f50e11bbc9de1b32762','87c5b8d2cbcbd319876413b2914a4057','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17801104','','123f2d855d8cab3a5b3386ede8776101','a31be8f6399591e570aaab08b53adb19','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17801100','','f256622f816431807ef25e03774f7bb5','94a478c1bbca8ffadd60b62f6821fab1','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17801098','','3ab24b191006c8307ca4ea218757861f','e60435f2411babe4c80547046bf06bd8','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17801095','','828b9af35e2bf75f7af75688f2b8a8cd','f1cc18ce60f6d9404adc0ee66b08087a','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17801090','','6fb64dcc5378d6d11ef00d0919bdbddd','ceff85ffe093ae0b03bf71774c6e911b','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+['17801087','','6eec627242c5eb3c302708f43248f56e','7995d3734129785348eafac7a4230827','吉本书海','趣程15期','黄鹏','花生','无双战神'],
+
+['17816602','','130bc1ba03bd00326bac174c0ec9619a','bc67bd8e6c604722d00a26dfe8cabff3','琉焰文轩','趣程15期','黄鹏','阳光','天医归来'],
+['17816601','','bc5533af635db33d7add4fd46aec3ab1','e6aea13418dca4282ec4553e7d330b49','琉焰文轩','趣程15期','黄鹏','阳光','天医归来'],
+['17816600','','95defa593cfd46f3e25acca1222d3545','6d4fb9313789fa7a4797ff66351116f3','琉焰文轩','趣程15期','黄鹏','阳光','天医归来'],
+['17816599','','3c642254c6ebe7347e709574629113c7','329ea01d294806e9e3073561926c330e','琉焰文轩','趣程15期','黄鹏','阳光','天医归来'],
+['17816598','','3c8ea1c8c6279dd3daebe33fa380bc60','a05ebd236385064813951fc5ebe11bab','琉焰文轩','趣程15期','黄鹏','阳光','天医归来'],
+['17816597','','96004b9ce10d849fbabfb98052692e0b','8a6e8d6250c6bba9cdc45ba34e0ccb3c','琉焰文轩','趣程15期','黄鹏','阳光','天医归来'],
+['17816596','','af2e4e277bfcc50c7a3984aa310b443a','0dbb9fa1179b69f8deb758748d4388d8','琉焰文轩','趣程15期','黄鹏','阳光','天医归来'],
+['17816594','','48c1db219dcb2a8acdfc688a10ee32a0','c119abd4c6fe51df47cddd1f39ab8656','琉焰文轩','趣程15期','黄鹏','阳光','天医归来'],
+['17816593','','e511dd605111b14b287661dc3f7e0d2a','3f384d8f837f1175ddaa56f7c5548ab3','琉焰文轩','趣程15期','黄鹏','阳光','天医归来'],
+['17816592','','85d43c24a767d6d31f1405f467852a5f','5339d2833fef29aa99d25afc20923688','琉焰文轩','趣程15期','黄鹏','阳光','天医归来'],
+
+['17800999','','6b2ff567f4447e7ed2e32c9eb12b3c91','7bd432a9ad72b21d26b2e6b12bd744ce','恺风书楼','趣程15期','贾婷','阅文','乡村妖孽小村医'],
+['17800997','','c08fac9389ebfb62f51a5cc51c515b14','13913881ecc9d93318e23241bc84e01e','恺风书楼','趣程15期','贾婷','阅文','乡村妖孽小村医'],
+['17800995','','91671e0b2c898e86754e6b6c6910aa06','52864247b20b75af4014d98acc33c1ae','恺风书楼','趣程15期','贾婷','阅文','乡村妖孽小村医'],
+['17800990','','4a3a0c64d9db850f5c366abb5c31e922','dd45efca9203d250088969b01d23f8ba','恺风书楼','趣程15期','贾婷','阅文','乡村妖孽小村医'],
+['17800989','','26d1a93fad3cf16b862dcb8a3aaaab35','fd0705470e8e0d319eb7c9c2013117c3','恺风书楼','趣程15期','贾婷','阅文','乡村妖孽小村医'],
+['17800968','','b72462b9a226ffdf1d466c8dc6ea72d0','6e28cc4b95b15b3266efbe0e1e82d0d1','恺风书楼','趣程15期','贾婷','阅文','乡村妖孽小村医'],
+
+['17801356','','71dd742174194ea6c149d03ceaa785bf','54c3b2c02d59e5fd1300af97b6934d26','黎辰文轩','趣程15期','贾婷','掌中云','天降小妻霸道宠'],
+['17801354','','c58afb96aa90f76a166e8eca3045b8bf','786f668b06bbdce2ffe4098986b4de0b','黎辰文轩','趣程15期','贾婷','掌中云','天降小妻霸道宠'],
+['17801352','','e42d041d68b04dd09c9d89c35b2ddc10','b053ee82129b168b2e1e935b49e5a016','黎辰文轩','趣程15期','贾婷','掌中云','天降小妻霸道宠'],
+['17801350','','e5d6f23429f1e9bd2b3031744aa21091','f6a6401c880c5a4d997ae7649fa1d4f3','黎辰文轩','趣程15期','贾婷','掌中云','天降小妻霸道宠'],
+
+['17816590','','1532c98442f39b71779f2f4c814eb6cd','e64367639f44f1495026bec1267ea273','天武书楼','趣程15期','黄鹏','掌中云','神医龙主'],
+['17816591','','f35df1a5254c3484f626736d7783b06a','0d322d1510177ec35282ec5424a29be7','天武书楼','趣程15期','黄鹏','掌中云','神医龙主'],
+['17816589','','1bc0116b277523ce69be0ec9241f06d2','e46d3475c8e08f3fe828c2f43d8f2f34','天武书楼','趣程15期','黄鹏','掌中云','神医龙主'],
+['17922936','','42cf937354e6f5b6817011bc929dc8c0','6e1e2f24a6f8f21c8593a77d6d974096','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922935','','19364e526e6de59b86b9e8b80a3041d2','3d840ab97a2c85f4199948a4b279feb1','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922934','','00fff156ae50f7df2857185dd2919efe','fac4c12395ff03a52b22c53c9fca8673','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922933','','43032cc8d0a6b9efc7b2aeb604d28bfc','f78c1550ffb82d8cee67c6ba619092a3','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922932','','85f6a705abc5b5c448dae65b96fdb3d1','2ad275b966ed79c3f5a2a7353364498c','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922931','','0752ca73c0513cddce38372d38b6fc84','cf897cffbed4300a9d6d3386b0f475fe','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922930','','075a8131ecbec517267b6f100f64379e','249f6455f149e822a6ecb93c0b3439a4','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922929','','b65d06a398a7d58b5c95d5154345525c','63f41f06a393d9d5b81f0445c442fed1','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922928','','e69583d84e9a65495f7cad77b6cd1250','2f763bcb5a18a02ed60ede084923e31f','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922927','','264faed79305a31250c9f9970bc88812','18d31e5842e94570049e2516dfd70133','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922926','','5b3114cea2b4699502b17b805bd321d9','35262e16ba8ba6925dadecc8b4a2be7e','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922925','','9d00468abc27e927ab05a65431b3cebc','40e9fb070cc83cbc421caa59290e1781','正德书楼','趣程15期','黄鹏','文鼎','绝品透视'],
+['17922924','','45f6b3cc8d57948f917beb6175c04b5e','0a186ac99ee9498dc91f5a75809c6743','正德书楼','趣程15期','黄鹏','文鼎','绝品透视']
 
 ]
 
 
-token_list_vx=[['15349240','wx37e82ed25970841f','164b43c212b3a7ebb71902bb08761b7c','a2ace0fa784562967c5caf60cd2ad585','坤地文海'],
+
+
+
+
+
+
+token_list_vx=[
+
+['18463947','wx0e5d88cd4eda2055','1aa28a749227dd33da571c86069bbdf0','ee66edf235af10ba0e765efe5a48b897','星晨文海','趣程27期','李瑞明','掌中云','镇国战神'],
+['18461853','wx7095cd532234ff8b','7153fdd9a8520eb3b6958387a1656bff','c4961df447a9d8ab662d98d02863209f','景圣文苑','趣程27期','李瑞明','掌中云','镇国战神'],
+['18463956','wxc4b9b3849c8b72e1','d4de74b240081d84b8d3bca2691e8b41','245abe5605897656f5e74856dc8f0ec3','文博书海','趣程27期','潘晨虹','掌中云','镇国战神'],
+['18461459','wxd6f47bac84b9a894','762210e24d1a9542136cb5e15f77fb1e','e39875f7c6ffb31caaec088c20f2c182','文鹤书海','趣程27期','潘晨虹','掌中云','镇国战神'],
+['18461870','wxe8aaf45d204a5dbf','157ffae4f42f328fb8c0977759ce8940','a0fa04da42af062dea7911a456b4a13c','瀚承文阁','','','',''],
+
+
+['18590643','wx5b6fe5da189d22d2','bf0e4077e13ba494951946da90967dae','20fee9fb20b68c8d2de051f23c41815f','木瑾文阁','宋1期','陶涛','掌中云','医道狂尊'],
+
+['18588123','wxdb76aafcc9f9c7eb','9a2e4df8d2a1291b948e0fda0c22f116','0ac52180c0f5a108a596c6d3046d9ba8','天神书涯','宋1期','汪成','掌中云','医道狂尊'],
+['18587345','wx89954681fe5c168e','700a679737649b446518bdf4b9d85cbb','fdb3de92e1eed37cac25095277c90b71','苍穹看吧','宋1期','叶灵燕','掌中云','医道狂尊'],
+['18589056','wx27d3513511867c66','ca323dd8e1f3049d702e4bcafd722bb5','cf19ee23504399018f70b62fda83c4ba','麒麟文楼','宋1期','王永鹏','掌中云','医道狂尊'],
+
+
+['18574064','wxe6d18398ea796669','fee0d7c1d1a324e29b396fbd37931369','9e3890d5adf7f6e4d2d0e4a27293031d','文森书楼','宋1期','何源','掌中云','医道狂尊'],
+
+
+['17643699','wx41ff0a301ebb8740','f8387f5318ca797d6a0a0be9177c2dfa','2cb4ab3b6e2152b673929bf28f1918e8','清城文海','','','',''],
+['17643751','wxb1e44b7144dd9e2d','2e365390568759ae5d90b944cd5fd924','d17501cdf24354f7025c9d4432933f29','羽书文楼','陈冲1期','金康','阅文','都市少年医圣'],
+['17643767','wxfad8663925da2d10','fc75568edcb6ddae69792979b73b5c40','de72e6748ebe49cae744206be7563523','雨鹤书涯','陈冲1期','金康','阅文','都市少年医圣'],
+
+['18546078','wx05d17450da455081','1b47cdcf348a383a60cabd73fd56c62b','0b4551e24edf2d8df171083a3489d350','云峰文海','趣程27期','薛森','掌读','都市隐龙'],
+['18546059','wx55432de005ea17bf','f70cb62af4f8047b2db264858926b14d','4be027d4cf78f286f5b9c7456f1703f1','星月文阅','趣程27期','潘晨虹','花生','神控天下'],
+['18546056','wx6ceeed11885d5fcd','8ef6cb10b4e7fc6d5c6accce3c4d0bbc','05a8b9b93f302c5485e64dc4c56e1ec0','光耀文阁','','','',''],
+['18546073','wxb8c1ddb5c1ce584d','edb4d31fe4a30885d39458e784aa5515','8b42e88d279a66a7f359dc8f0ce81d18','玉轩看吧','','','',''],
+['18546082','wxed87b5e8bba42551','782ce1e16bc87adecf5aace2bf590853','247f93d4b2d8495d8f410f97f6a8c8bc','子豪文学','趣程27期','薛森','掌读','都市隐龙'],
+
+
+['18508601','wx04ee2e0965a049b0','78b342e13c3b2defcb568033662a3eda','28aa9602df961df17e83c0c37924049f','浩承书海','趣程23期','臧昊','掌中云','神医少年'],
+['18508595','wx161553e7cc3cdaf1','7c0329e7266bd7d3de9ce3567904e3a2','f6e4861756535ab8723c6adf77ee577e','鼎雷文苑','','','',''],
+['18508629','wx485c8f8535962458','afed4f08259b19d07bc1aadb103debf3','e0cf424407acad14c2fc5cdfb62ca373','光耀书海','趣程28期','宋刚','花生','傲世神婿'],
+['18508613','wx6d4a11db329ee767','9f0d905323a0535bef0bb28d490ef767','d2ea0ad8a2f1c8a830ac5423eddcf0a8','鼎苑文轩','趣程23期','臧昊','掌中云','神医少年'],
+['18508616','wxa2241680898f402b','f431d32b6a55c8b05834f6dd8046a039','fbd54542cf1402315274f56ed6b08d01','暮松文阁','趣程28期','宋刚','花生','傲世神婿'],
+
+['18558865','wx1b383ceb21db2161','b8c4517cb5fc4437005bf202e9caa862','29420f9c75a4eba3dba72e12ffc6e335','夏阳文阁','趣程24期','姜杨','掌读','都市隐龙'],
+['18558863','wx699e079a37dfe117','b0c2d83f666896e6e1aa6ff3043914fc','56a6d4730755a06a07cab4cd8dfe5ea9','鸿飞文海','','','',''],
+['18443353','wx7c233a2d862167f3','7d57b83bcbebd629d5f46cef1018b30c','ba37db5e20b3445508908deaeb2c5709','云鹤文阁','','','',''],
+['18558871','wx95b3bd91844ce2a1','3797ce4c221f7e4fd5f399390059ddf7','b7453fc06b8db8184af821f1ed365f95','博文文轩','趣程24期','姜杨','掌读','都市隐龙'],
+['18561894','wxf2fe9c9fbed74bd1','0a1add456d32b564c698f121d4b07832','274f2cd6c9930cac64f033dabcc32fb7','龙鸣书涯','趣程24期','姜杨','掌读','都市隐龙'],
+
+
+['18455381','wx0776ffa15d9f0e29','3cc379e4c67b611859130f77813a51d3','352b6c46c0df6949045b6d9efcf2bc1c','松轩文苑','趣程27期','薛森','文鼎','时代之王'],
+['18451582','wx6831012d9eb33de7','b74909ecfe03cbaee726dccd0b579d97','ed9384bcdfd0f15c666e318e1c58dcf3','傲南文苑','趣程27期','薛森','文鼎','时代之王'],
+['18453868','wx76872164bb1cc57c','429e292610a4f97cdfc04a233a6681f1','83344e46d30fd8369bafa4c50bde3d86','文翰文海','','','',''],
+['18453878','wx90b1385b9f2ceb4b','382167e505953f88a6602ba5e923a27d','ed2873010b7fee5c5c5f0f3ebc84ec5b','嘉豪文阅','','','',''],
+['18451576','wx9394a7a0ddaebc74','b362c8f2d66c9cb2776a85157b53534b','c03a4430189cd6a7ce1654de9940853f','鼎苑文阁','','','',''],
+
+
+['18411422','wx06e7cf6c76bcaa0a','6bd0d0ca227c2bc6ffd880410614a340','038b5748de5c9b496a8213f45a3459f9','志成文阅','趣程19期','徐伟杰','文鼎','至尊武魂'],
+['18410453','wx2350e16268bdb514','539fe18c9482639b24d7fa0093b3d940','cc29fd6ae336cd1648e55522b9a1f74e','天佑文轩','趣程19期','徐伟杰','文鼎','至尊武魂'],
+['18387640','wx54e693f51f4b0a7b','822ecc582064d9be73b1d2cbf00db5f7','548162ad4510e4c8244ac228c91200a1','安易文阁','','','',''],
+['18140786','wx7321338e5776f236','880665b795f0f3fff7e1b887322702c8','f091f92a8b8e1e4eb8d2bddf752bd9c4','文耀文海','','','',''],
+['18140805','wx7f7d6876ef7966af','82869848c06084587984107c4ce944a8','cc30e79211cfd31bcadd892b48e20276','问鼎文阅','','','',''],
+['18387623','wx7f93dd3ae468167e','bcad474f4d0e73c251a5f32a003389a2','bcaa5e6f4f43b5a44468454c8d560659','星辰文轩','','','',''],
+['18392086','wx802be9f2e30e5227','f39d38d348eb338e550292c12f2a6f12','fc2481ca67df07d9cd6f55ffd61de853','易凡文海','','','',''],
+['18410442','wx84575403d099e6e5','5f718380cc83e9dda2e5380c5b071737','5abaadbe501d6153a2f1cc3bd951cfd1','星海看吧','','','',''],
+['18387646','wxacedda3cfd9653fc','6d09f8ce48d8e3e85893535013cead7e','ae9af0b70c795509e9b2a4bd26ee3157','安然文海','','','',''],
+['18376513','wxc542a5e51b7a531f','78f8c02ccc94002511bde99825f989b1','6a385ae99b1595988d143ed086602511','子轩文海','','','',''],
+
+
+['18387910','wx51fc71a171cd9973','c1d85e565075975d2d7414b4f2c5bcd9','f8207aa14ba776c9fa19115392a8e0d3','天兵书海','宋1期','王永鹏','花生','战神医婿'],
+['18388020','wx85897b521b72d0ed','5a2a0c4bfd275ffaeda0aa75fcd059a9','f2fde2dbe8486155205bec9e6bf0ddd4','微光书楼','宋1期','何源','花生','战神医婿'],
+['18392731','wxe14faf7dfbaafbe9','ced01d235a2832de9d808d24b1f4e06a','e4b686f23ccf6b9d594fa43d43effa19','流云文海','宋1期','叶灵燕','花生','战神医婿'],
+['18388349','wxe8137c9a9a6c0da0','e79fcc5a98ac2499ad9cea1212835a88','ad29f3ddb038fcaa533faca355700107','莞陶文轩','宋1期','汪成','花生','战神医婿'],
+
+['18393136','wx94d806ff9a320d22','22c68480549164fd0b7008aa1cdeac60','ea8ddb5aa7f73f14396dd5e72c6f5d3d','龙鼎书楼','宋1期','陶涛','花生','战神医婿'],
+
+['18376385','wx162ae9908e19e5f2','696df0837603853e9996562ef1ad7bd4','ab3f4920aaa1ccab0629bcb157dc1324','暮染书楼','宋1期','陶涛','花生','战神医婿'],
+
+
+['18430324','wx3b602e436780c219','bccd3c8030415a1c921ce053305c94bf','267f0755568af0774c0b820d9b0bba51','安宜文海','','','',''],
+['18430769','wx3c6b917754346a22','01f5a62553061fcee0ed15a0c91bd73b','2bc63a6149f8def31cb63bb738af82ca','夏宇文阅','','','',''],
+['18400880','wx5628e825d8510142','6a5290aa5a49ac7d465c6f133ebadf1e','2b3392cdbe11db950a8ef9be1dcec12c','逸书文海','趣程28期','宋刚','文鼎','逆袭人生'],
+['18430308','wx6ab3d7ae87a23b33','f460d0f7d2f2ddb569af262f5d118b07','3e55ccca1b5243ea976cabe2af8d1de8','星尚文阅','','','',''],
+['18434619','wx7a55f14350136d00','03b2d85518b0f5b9f7b56e53c0fd07aa','6b88349bc3f71bdb9c4444e0c829d316','玉轩文阁','','','',''],
+['18400889','wx84828b82a869e6a2','c6656f715ebf2f1856716890e7dae33e','cf61931da8251527b6a0692e398950e7','玉龙文海','趣程28期','宋刚','文鼎','逆袭人生'],
+['18430316','wx9527881fae471f31','bd8899932abf48ce24fcc00330fbbc3d','bb1f81495fa75de7ca5c389443283f3d','成文文苑','','','',''],
+
+
+['14870662','wx088b2c61e3c00ced','1834be2104f3b915b2572d64f9153bfc','97f16f0a9479fc452ad318951c118b4d','林鹿文苑','','','',''],
+['14406798','wx15a90452088a6049','bcf366f5f306c834b0e9db3e26db02f3','7c33ee23e320b185532045cfcf00db3f','富豪文苑','','','',''],
+['14406789','wx1c6a0590eaa3acc9','f8a9cdc4767cecdd7fc4818857784a49','4a37a1409f08b4e99b668ec3ab79aa76','富豪文轩','','','',''],
+['14086023','wx69b22b29f7c0ff9b','e2c98f8992e9abee425403db10c7928e','0c3f2033ae22ca03fd462785ed5624ae','炎海书社','清勇11月','徐小楠','阅文','至尊龙帝'],
+['14406770','wx85e8b9e4e69abcbd','1078d220359dba5f900dd3f18380f416','611e0e42f941cb8177999f3c91df4b87','向阳文轩','','','',''],
+['14870673','wx94733de704e56c3f','61ab5a9ca539ef38c294e407fa2b16ad','966a7947823185bc4a85a4321a9104dc','梦醒书楼','','','',''],
+['14406824','wxa2082a9bfeee858b','faf53aeb876383ab08a43e48381e96fd','d37d034e56f3bef2da3a4eddee5ff9df','桃李书楼','','','',''],
+['14869500','wxa92a619ab69d2c1e','0222283e27f78d9ea6663067a78addce','17ad622f5c71d8d3aa8a4a9df00a3ca9','问心书坊','','','',''],
+['14406819','wxd1bb2ab55c79b5ff','0c0b0f71e218860207f7f7271add8d0f','982cb834e3bd6839d3fee394f1783c8b','白石书楼','','','',''],
+['14869489','wxdd614adc5f810771','9654e88c95ab21a30c7463ff68a0404c','d2ef74a5bba63c11adb29247763116c6','海澜文渊','','','',''],
+['14869497','wxe0eeeaff67016096','55648fcdc4efe8fa50fb39ce284fb4eb','847da735494abd43bd963462c27fd4d8','浮烟文阁','','','',''],
+['18034130','wx698b548aaa80c1ec','c853934882ee3f5e4680bb88308cf78b','d6e4706f1a36f52393f3877c6b31cb29','易天文轩','廖一期','方梁鸿','掌中云','美女的超强近卫'],
+['18034152','wxdb8c082bdfadd21b','56ddc0f9918086c755afcec078037256','cda1fc2f5ae61d47f7925cb541a0e694','成文文海','廖一期','陈万钧','掌中云','美女的超强近卫'],
+['18034194','wx7c1a64cb2d3bd937','2911c3b8c44b69cd3543664cc9b85926','630982f3c1b9821e0b8a77ac89ff9993','宇龙书海','廖一期','聂世超','掌中云','美女的超强近卫'],
+['18032722','wx00c6cf3e6181e998','414b3939feab8508801ca15318d0d885','5b46ad0a9893ec002c2b3239d4bc0bc4','鼎雷文海','廖一期','孙茂兴','花生','战神医婿'],
+['18034092','wx0d6fe9b3a08c5e68','c2f303ae7389eaff477b12a02c0b7d9f','c670921a7f3e867a88dfa4fce3d2762a','晨铭文院','','','',''],
+
+
+['18387649','wx28c61ba10956692a','9720bc0bca68efb9cc0a6a17a981c97d','a0e94f9858a1e0e9f3dad5fcacb5f9c1','一鸣文阅','','','',''],
+['18443361','wx28dffa22c4c4a628','bc0cc79e2daceb93a8cea40f58803a2c','0fc4418428477c7703b2a1fce2e8f24f','铭扬文苑','','','',''],
+['18443668','wx7029e4da79b1ee16','e5df6572155668918998eb124589b472','9f13d8f06e54c192f5a096e89a06b072','景山文阁','','','',''],
+['18443358','wx9c637eecb6930f8d','900c4f17f769a8d7ed9043ced38400f0','fb05f5e77b7d1f97419c1a6d768b4b57','成泰文海','趣程27期','薛森','七悦','我的超级老婆'],
+['18443360','wxa874da0e2bc3d44f','5ab1b571fe6b0f7a78e8d1af287313d9','7ea927ed4dd76a114ab7685308fd6cec','俊豪文苑','','','',''],
+['18153834','wxe70c3217b89a67c4','a699b5efbce5cb9eb0ef692bc667578e','83eea6882561a7224228f65097f56ac6','浩广文海','','','',''],
+
+['18361704','wx02b3e509ab36c78b','c2fd8cf7b60cad236d165de8a2c09084','49266c8e737dec4988481ca0778ba92d','鸿远文阅','','','',''],
+['18361675','wx12f076cd594ba46a','d66a3b9b05c2ef6c37a15f60a8834a65','793c3e4e47d190f2d86fcef005c259fd','浩宇文海','','','',''],
+['18153954','wx787a1222a944b1f7','699c4d9afc940e51e2ed659ac2dce778','47ead8b4328c31bef31219b3f54ea19d','毅元文苑','趣程27期','郑小强','七悦','我的超级老婆'],
+['18361680','wx8cb816d1372f25c9','bb592f290a5160ebbdeebb8f3bdf51f1','ac0313404ac07ba710f3d675e49970b3','博文文海','','','',''],
+['18361695','wx8d8b43d10f27b7f7','cbefcf5a262dae3a185df68aba89cee9','8f56bf61e84ab66dcd326814a30feb08','易天文学','','','',''],
+['18153920','wxd711fc0750166eef','f58a730daae8cae5c9ceca882d1a2645','2084d7165eec0a9903f51628cc141d58','子墨书海','','','',''],
+['18358456','wxecd484146eba4ab2','b8b56cf928a42bf1e9a3395d6dae132b','2a5ca26890f7666d7a8ae8ab10794b41','天佑文海','','','',''],
+['18153946','wxfb8bef6ca2f686f3','570ef4e21810b688ac0cae1712506ef7','012ccb8c50d27c71b86c466093c94599','晨皓书海','趣程27期','郑小强','七悦','我的超级老婆'],
+
+
+['14922041','wx0b9fcb0723013f0a','20138501780e0ebce3e703b6e59b5bdf','450bd3926a5d42edbff586336dc39567','白鹤文渊','','','',''],
+['14921954','wx3a56401ad9cc9209','cc06faf6861b567b23abb28068a5209e','07b84e80d36fd9e196a7373e387aad8d','竺沉书楼','','','',''],
+['14921968','wx4943947d2e58d258','5186a1d234c3e5d51cfd01ec931de506','4981cac4bb79d513d9a54fd3dbc13973','无尘文苑','','','',''],
+['14921942','wx4ee39a1d3d484e06','660046a66162a51c54c2790c53dad7ab','3a029e2aef06531b34180e2d487f2399','如烟文园','','','',''],
+['14444380','wx5bfe1535e42a811d','c71e2353aa080db7a616cece90bd2efb','5177c4541ea973c4f3b17ebc401eaa53','灵犀文轩','','','',''],
+['14921948','wx6e25b4b6e30e1baa','7aa2ebccc490217e39f2a0e9bd04a07c','c76a8e018b66f6c23f44487a5fcbe350','玛瑙文阁','','','',''],
+['14921962','wx906c4078c7d1be71','f9024267e9407e5b0443b0119841ed0f','d1e7d9bed88da991ebb70a35b12d9cdf','青墨文房','','','',''],
+['14444387','wx9c31fbb7924366b3','21f51d751d723eaf5102be50e0f7f2d7','ea9e32e0b5dedc0f61dcf727b294aaa2','清梦文轩','','','',''],
+['14086084','wxa3b78b32b2bb3554','ae7c75d73d5f15900584702f473c7853','582918e771f95763d18eba6e68ec2e32','鸿鹄书社','','','',''],
+['14444284','wxbe4d26be5ddc9be3','c64403eb2d428de195132992d42f6ae8','5fdd1abb3ef1741d1654797f9d74ead5','墨兰雅文','','','',''],
+['14444359','wxcd5a61354bd97c52','c5ddf32134e61a316322b600f10d254f','9ff74807842f6150f4e972b76c0d28ee','苍月书楼','清勇10月','黄海军','阳光','女神的上门狂婿'],
+['14444370','wxe9b147deb7a10a67','47c2582bfdaabb2a3d318a409b19cbad','ed053c5391595d809a749427ff1a2e9f','柏舟书社','清勇10月','杜广林','阳光','女神的上门狂婿'],
+['14922778','wxea0605cd519ad34c','d8fee1b58e4c4d457628b91dd2c0d9dc','a9d29847cc814fa6d4878eaf9947c800','碧波书楼','','','',''],
+
+['17977310','wx45faf64c7d065009','92ba9789e78179761f96b02a53105baf','7cbd35780e4fd317b3a08ceacf33547c','凌豪书海','','','',''],
+['17974946','wx64dbe476d97965a9','79329f12cb6ac069bc54f432c00281e7','d4f642dbcffdb0ffdfa927cf4df27a17','浩龙阅读','趣程25期','王俊杰','七悦','麻衣神婿'],
+['18411429','wx77fb03c26db1e14b','f0db8e5c866e9857594560ba969f247e','fc79c4e4b49015a65007511ff1468077','浩天文阁','','','',''],
+['17977334','wxa2276989d756bec0','193cca99ee705a92d488f484abe3fd36','ec133e4a08989e41040a6108d628a41b','明剑文阅','','','',''],
+['17974972','wxb2642c569a349826','bdda65e2e4db771bd70735478fd20c0a','8285e577289537916e550dd0975e0e40','南羽书涯','趣程25期','王俊杰','七悦','麻衣神婿'],
+['17981501','wxe144c5e3da49e353','b62e145d23bafbef87b2b4c6d6931f8d','b13a777045896fe37395cd3455c5c215','策腾文海','','','',''],
+['18410463','wxfcdb824b8a70af29','3be1b819cb173af031a5c9efd4b7ebfa','5b8e013db58a4719bc6dd30a5d8d1393','青云文海','','','',''],
+
+
+['14293097','wx1052586d0ddc320e','cce9f943031a2a7981225639227aa9ac','01053abfb5765ae20197ed6f7682bbd3','天天刊读','陈冲1期','陈冲','阳光',''],
+['14128789','wx1f7a14c697029006','be077ed4fe45b3920194b4d309df61dc','6f9cf6adb373c8d78132e06cfb8ae892','青虹文轩','陈冲1期','陈冲','掌中云',''],
+['14128763','wx3b2a8e3d29c0925e','9a36b8134c2b48e171e59f710ece60a2','517ed12a07047c08252113a3dcc0f841','集意阅读','陈冲1期','陈冲','掌中云',''],
+['14580144','wx3eb810732ea6b93f','c52f3684ee20fbba5e85f930fb707de0','83da7322e63a7bb0b82db3b64c8203ff','海览文阅','','','',''],
+['14128785','wx4943818d082731cf','9f6aea3c6aeb523691b75dd3b3338771','2aadb27b3e4b5036f710a5e867bd9422','九鼎文海','陈冲1期','陈冲','掌中云',''],
+['14579565','wx4c00a06b03bbf73c','26639392d3f5d34c6ace2dfb11cebe32','65542fc2fe863d91272bddf4405ea544','生猛海鲜现捕速运','','','',''],
+['14460373','wx4c09213a355849d7','8b11eeba61dd2bc12828446172446cb1','311c33664457b53c28a717ca87f34f94','浩瀚文选','陈冲1期','陈冲','阳光',''],
+['14465655','wx4dd4ed7d556353b0','78d8c2bd8c99e2cf60539f2534d1a909','d254fe677b780749fe680d7a593b5616','奇峰阅文','陈冲1期','陈冲','阳光',''],
+['14293096','wx58f99f86c74ab622','64f4f8effbe0474a281466b89f5aec5d','38d3e9dbda22b70b031b6909fe9eacf7','墨然文轩','陈冲1期','陈冲','阳光',''],
+['14293101','wx61b7fee49460737c','e5c3c9434fd01c30cdf717e3cf0779f9','a7785999df30721a9eb6ee3957a01eed','忠武文学城','陈冲1期','陈冲','掌读',''],
+['14460127','wx63267bc5bc75f1de','d8057a440988490a4f85d017118a0bba','fa94536d33254c595646ae1d782509ba','月落文阁','陈冲1期','陈冲','掌读',''],
+['9697622','wx7b778ebbf2537868','0e5b102f45f57f59683396f8b0b0fd72','4268a4190e675551e246aa020db4ecc1','成功男士喜欢看书','','','',''],
+['14293095','wx7dbc686e76e4478b','853ea74dd1b0b76acda6ffb8ebc3c30f','fba1e29eb46244f35d194c7bb47b4f52','启天文苑','陈冲1期','陈冲','阳光',''],
+['14580148','wx7fd80f7eedccef5c','38da31c2d6d63332f64dd609d247fdda','2976be6163a0f47913a40c0c95a5eda9','生猛海鲜海港直运','','','',''],
+['14128782','wx9471421fe16cbd0b','a7aec391d1987a111a0e98fe2fc5517d','2f9384df9030ffd5709db914179b4d29','化蝶文海','陈冲1期','陈冲','腾文',''],
+['14482372','wx9d6bdfbfa0cf6509','9b8249f20e22e92648202693cb954345','2f23b6944d84a3fce15ea307af867cd1','雅阁文社','陈冲1期','陈冲','掌读',''],
+['14293099','wxb80b6b0151d67e29','f4c585446e435ce56d7e4fe4f2b881e7','a463626d9f82c1e0fca3edb610498f93','知隐书香','陈冲1期','陈冲','掌读',''],
+['14460402','wxb9de87df5c97a2bc','f4a04ef8d8b1bbf7af857a153a122a7e','42ff58d709402b088486ea30983ff0ba','月夜文选','','','',''],
+['14128773','wxd4efa1b25d8b24a6','627b9d9ece1caf94c448b930bb45d5d5','899126e1644ec84410eecd996eb7d74f','昇龙看吧','陈冲1期','陈冲','阅文',''],
+['14460142','wxd83580fd275ecff8','a158e9bbffc16f365ee5e9937f4ea8e3','df13365d5bce6f3c97a8aea94fe8b1bb','昱墨文海','陈冲1期','陈冲','掌读',''],
+['14253780','wxecadb6744ef9f32f','6aeccd66973267cc8d5677f124802108','b685acb8550541f23e86b006c9086f54','苍焰文海','陈冲1期','陈冲','阳光',''],
+['14293098','wxf04cae73982b5f63','506284500870a93d6069eca14ceda07d','93a226cbe74bda0b56025f8c4947aca0','阅欣文学','陈冲1期','陈冲','掌读',''],
+
+
+['14490993','wx006697598bbbb29e','5a41016aabb97da29a51214ddf9c0e14','6e855bcda61fa92ad17d51ab94ebe2ca','清飒书楼','清勇','','',''],
+['14490973','wx1b2297ce57cce706','a5a241b9d3ea680407e15437a8367d0f','b47b858d9250e54183501448c5501454','优尘阅读','清勇','','',''],
+['14406628','wxb92c1c41bd4bdc89','3294231225f76925a0959a729addbb8f','7c5c28ccc3ce1adda24285f83fdc8b1a','清枫书楼','清勇','','',''],
+['14490987','wxd2e3b7b0c2f0ad9c','bad09cccc78b32d60ed68973bd4e62ad','71b38d5b9cf43cf0af4cd19a33331c3a','风吟书楼','清勇10月','蒋瑜','掌中云','风无痕深爱无言'],
+['14492424','wxfaf2caea6962ab19','8e3ed6a2bc5cba9dd55c248669ab1b27','0401570eb3ecb3e651b577e06f939d93','风宇书楼','清勇','','',''],
+['14491001','wxffa1c6757b93279d','cce8779b383a699a71ac6094475727db','798010ed2a75fd717edc5a99496e2564','风飒书楼','清勇','','',''],
+
+
+['18019181','wx29d8f8908cb1b679','2e4e63bcba4bc1523deb0f24fe8610bb','82f592f56dbffd4903e907ac045f0a1e','星雷书涯','','','',''],
+['18019147','wx677f72ee4445b039','0b1745549e3ef332cc75abab079118f9','025e53565867916cbefec94421d82575','叶天书海','','','',''],
+['18019206','wx7def205a3870af66','0cc5eaba63849e8d1f296b1216bf23c8','8525bc0a3c3449e6f50f75a0a6e53c08','星萧文海','','','',''],
+['18019109','wxae724fec4981111d','b9945e53c830594238844463ea2b4f94','8234222a373252aa5a393dfa6f5e7ace','古龙阅读','趣程23期','臧昊','花生','战神医婿'],
+['18019042','wxedb5fbbc21c6efcd','115e9b1c39ddda8e153e3bcd540239a4','1b8ab3140e4a8935086a0c3ef9ecce73','华鼎阅读','趣程23期','臧昊','花生','战神医婿'],
+
+
+['17949475','wx17500e2bc35c6ee6','31cf12a07e66ca87a288671f244a48ca','3452410885394537a0653e38b4f6b7b0','霸龙文海','','','',''],
+['17965285','wx1a7cda78a36f52be','22ff0c730f7e2a8f8f5d8505827b3ddc','5c9706efe76ab2665590b2f5755e0215','神兵书海','趣程28期','宋刚','掌中云','超燃狂少'],
+['17950317','wx2dd0c3551680f328','55ef0d5c8d79347ab67ef3c3611b01d3','f8c9c8f6769710aa4b554ad97e57e31c','云翼书楼','','','',''],
+['17949212','wx451829795407966c','74aa054bd128a2e7aad184c7bf71c6e5','d2390219e6dcd11348221bb0ce773bdb','俊豪文阅','','','',''],
+['17965275','wx6293fb868a75616a','b3a67602830cbe3d621a309bcf7d4f97','42b6a66708276b377c00e1bd37fa4f62','罗海书涯','','','',''],
+['17965303','wx7a09792e33f3ef1e','6efcaecaba1f950a4c2c7e4e112055d1','1ad8e158a2c5afda990a406e4160bb39','山阳文苑','','','',''],
+['17949248','wx7d011f6473840211','6a758669ce84faf9b779955524bc166d','c3be90dc98188b3e1885dd8514997385','璟璐阅读','','','',''],
+['17965263','wx8d5964a1e8fcb65a','b1a0d460c7793643bc1350e3be91e3ab','e15b4819e130329bbfbb2242ff808feb','洛神书楼','','','',''],
+['17949187','wx8f53426b6f37b9f7','d1533df88c5d03ed6cce4d628c99df1b','636aed735196e4935d68d4ef1309eac5','元洲文楼','','','',''],
+['17965246','wxeacd4b5cd3bdcd08','371ba24d9ca4dabb3aa360ab68865ca6','a5b94cabaae1fccbd4b72f2505e8d70b','鼎剑书海','','','',''],
+
+['17993793','wx009e682c997b7989','221a1a9e8dce9d57d9dd773f2fcfe21b','f8f4cba11bb281df25e03c9452155f09','神锋文楼','趣程28期','宋刚','阳光','猛虎出山'],
+['17984125','wx3e00287eaa7ef236','3473d1c033004e9fa87b7dce1cc040da','5715e9d20b3d76bfe37a04e98edffeb3','云豪书涯','','','',''],
+['17984316','wx5089b2cf020f0a2c','6448453fd58f569dcb099a99fde43d00','02fa1f134ef39ec84301bedc18f15123','浩鹤文楼','','','',''],
+['17993816','wx5fd4b8e0f9b25ac9','0ed874d143c1316a995ad9a4a8b715db','6d1ad55eed3b90d393dcbcd7108b57ec','凌霄文楼','趣程28期','宋刚','掌中云','超燃狂少'],
+['17995203','wx69e272ca8c46cbdf','dd9562fd4e35bef4d5513c2231f76535','9a01474fad202bc0dadf60db13551c6b','冥锋文涯','','','',''],
+['17984336','wx7c174b0276786fd5','fd2d17af562dfde9e734fbfcf18b8d5e','8c35d0bc2145259a17aa405c9642c31e','圣龙书海','','','',''],
+['17987770','wx7ee8e06ec472d137','c6b2b4c9ea886aa40b92a7f43ac5e41a','9a768b16516dcd85c0f5bcf114d031ef','新阳文海','','','',''],
+['17994040','wx8ed4c15c49d7c847','82e4cbc867d83f43172b2f24e9c3c7cf','a1d324c0b8d9ab345d812b576a869b3c','玄虎书海','趣程28期','宋刚','阳光','猛虎出山'],
+['17998283','wxb7e84bf22f0a4970','d0fbd2d082ff5c1525fa9d22f8fe4e15','d5d14e48beb4374868f8f8b8a0be52c6','霆鹤书楼','','','',''],
+['17984165','wxd4ac6cc1a18f0fda','02b66e3b6637897167c30445137e7571','100351b19832679df2b283b910c176da','腾云文楼','','','',''],
+
+
+['17730984','wx3bf598d98f17c80f','24cceb49aed399f0f7ddf36a7ddc84c1','af779b36baf1803d49e484696f6e9c48','寒龙书海','','','',''],
+['17731016','wx60fe5ca6359e5cea','4dded21db71810fe9bda602ced6557c9','d858217e889acb7c19a0480d7460c0b3','风星文轩','趣程27期','薛森','阳光','猛虎出山'],
+['17730916','wx91a2dac9b3a6767b','441190c192b755ebbf8f156b2b8a2e9c','f17a8d60e30ffb1d83ee8be64bcb3c25','启明书涯','','','',''],
+['17730968','wx99cc0f4b14a5eff4','832262175af24f50d7e14031a5b85f11','a009eb222a800003e2b96e903f25ee47','观云书海','','','',''],
+['17730955','wxfdb9a9a5780bc0f7','7a5f911fcf52dd491020a67f08793bb7','f28a79ee9175dbac92e4044bd996fddf','寒霖文苑','','','',''],
+
+
+['17643493','wx02222bdb55dc9bb3','dfe8ad0e55a59b351865ae048d085f70','ed0ad0e4a8061414b3d0cda8d506cd8d','涵阳书楼','清勇','','',''],
+['17645660','wx33bdcf28cb1f9dc3','580127fb7142022e9b925a3c533ce1ea','1ce6093368abdd348621d4e60269b4f4','龙武文轩','清勇10月','黄海军','掌中云','超燃狂少'],
+['17643491','wx7f54c8fa03ceb364','aae158ae02a57b03632d60fe0d1b8c4a','1249eccf9503368cd03b3bf33fe52166','竹月书海','清勇','','',''],
+['17643498','wx9f443989bc2d0c89','b4035092787fd85476041cec25b9c2ad','2f788b1a6e08a65fc64e137403b4e413','碧影文轩','清勇','','',''],
+['17648576','wxe02961517e47fc65','ebac3be62551bd255bee5d2a18da2b85','bdabf7ed9df3a3ae6823c8739115a063','秋颜书楼','清勇','','',''],
+
+['17892027','wx3b2f4fc69ef75c89','07a468eb9365f9844192bbdf5c71e7ce','4be1c0ede543750c6a4538fdd39406fe','富豪看书','清勇','','',''],
+['17888050','wx75ab37f8f372f001','53b61acdba3d4372a906d8f8f3f86572','1956fc43cac109f7a6aeb40402ba6033','紫雪书楼','清勇','','',''],
+['17892154','wx87c59a9895681112','7434576889bceb389b5ec5b4ba1c1ea0','b3ac017a10398157d1268bb4b9b6e415','初兰读书','清勇','','',''],
+['17887974','wxb33f662554bf4386','5a053234199d89ec5f7b43a3eee71431','b0cd185c7d3609735ca165cbda538eb6','语梦读书','清勇','','',''],
+['17892264','wxc708f38eef9cde10','4f154970d8f9606e27f531d12e497130','878dd44e283a9cd97b716bd03ea7b34f','白风读书','清勇10月','刘勇','文鼎','二狗的逆袭之路'],
+['17888107','wxc8bc2ca35d961533','f11743d022ee9b9b18c58d7877e1ce68','8a08ffcaf677b3e6e6434116599b4609','沐夕书海','清勇','','',''],
+
+['17888166','wx0c70845738457d31','04c60dae155df4c3c013d3970ffe4891','0452178a1892b65d3f4c4c1ea70388db','半烟读书','清勇10月','刘勇','掌中云','隐婚蜜宠美娇妻'],
+['17681424','wx17861dee7b52d2ab','98d8108dfae5ffb1dc9a7f95b92e3cbf','66a7143ef2f7834f574f0a414a6dea72','洛尘书楼','清勇','','',''],
+['17671338','wx2f212a19b2cc5f2c','908de05bf61ccd17a8069de00b095521','8964339e53469de8bf8365c546d51755','听枫书坊','清勇','','',''],
+['17671333','wx32833d9dd49e1eb2','ad520a27231073e7f04ee59dd7ec835f','4e7d3975c487e00f28f5dd22d8fa79e7','孤阳文房','清勇10月','杜广林','掌中云','逍遥小村医'],
+['17671349','wx710c37bc2a824e40','cf66beb8d8412a4de1c53c6d5ea7e898','72679d242209648683e0cd8a615a028e','紫竹书楼','清勇','','',''],
+['17671342','wx8271705d882342c6','a80671e6ab45167a4744c086f8dd9446','34fedd9a1ca34b2ddab2aa3a9c9c49e8','天寂文海','清勇','','',''],
+
+['17784122','wx48928c9cefd64f29','0e411cee157c3045d565ad2e06c22c59','98e8701062cf0f5a71f1942171482150','龙天书海','清勇10月','刘勇','文鼎','神级野医'],
+['17791303','wx61cadfb22181561c','8bd9ffdcf20e8e041644ece4fd0398bf','fca970510b3ec4ab78190e7cee04bbb8','醉陌文楼','清勇','','',''],
+['17784052','wx66cefa8f4a1e72c2','d8a1e6bcba180062389c269ded2f9b01','1521751ca042b6c6ef6e173336d056a9','傲风文轩','清勇','','',''],
+['17784082','wxbae1a9096fcb327e','c9e1c46a7a1fcf45de58363f16b4de17','a307add87ed8b8d3d12ea1284bda879a','文凯书楼','清勇','','',''],
+['17784102','wxdd27df36b813907f','8f3451ef27a5e62e7235c3bd66fa8821','b77c9df8c1cb165551fa4671ce6fe66a','凌风文轩','清勇','','',''],
+
+
+['17783232','wx02ca61c58c47a67c','bdbef09fa4eb5e97b7bacc89dcd82b68','0d3fdf659c2b2a0f6a7c3a7a6f2b9581','追雷文海','趣程28期','宋刚','掌中云','逍遥小村医'],
+['17783221','wx3b41da80db6cb506','54fc4cca1b1077d45a9f11de6d80f218','110aff99669f9f7db043dc202b035300','天麟书楼','趣程28期','宋刚','掌中云','逍遥小村医'],
+['17783242','wx824119f9cba71523','6da3b8ffbc95aa1262b17bf0c373987b','9c9d8ce709ab41491242b2f7d1382561','龙海文苑','','','',''],
+['17783257','wxdf8581527bd75404','9b025d8b655e8298a46eaad4f8cfe1a6','ac6eb0dc514ee9d148529169f2863cc0','炎锋阅读','','','',''],
+['17783273','wxf24642c2428ef19d','acb090764e11dbd3c7d49d0f96220363','059addd083fcfc99ef2d0d7f6c9511b2','君天书涯','','','',''],
+
+
+['17902680','wx2a6acc65b5880fea','d4f6bf42e0d58a35c7ce96fd613bbb79','32a21124b4b360583fc27721f5338e6a','帝豪书海','','','',''],
+['17902639','wx47fb66413e535432','4c8fcbc6b3e705f5adca8c7adbff5875','5ce2bb5ea9312efc1fb1b5ecc08ac187','乘风文楼','','','',''],
+['17902656','wx6d8e0656a84cf0d5','0e814b3b7c094efe92443a61609ba930','cf01e85d2bb8a3f2b7bb09b980bd3cc5','楚铮阅读','','','',''],
+['17902618','wxb0a430fd3bf925cc','172fcb2b2bf9c4eb442e08d6c540db77','96373f424e0be72dfbfc32ef540cb01c','明龙文阅','','','',''],
+['17902689','wxf1ab80b6ee03b9fe','3af35d32b805b59779eea0c5d8b548d8','071ea17939a80352bb0963f1df4daea2','青鹤文苑','陈冲1期','王永鹏','阳光','女神的上门狂婿'],
+
+
+['15349240','wx37e82ed25970841f','164b43c212b3a7ebb71902bb08761b7c','a2ace0fa784562967c5caf60cd2ad585','坤地文海'],
 ['15349210','wx397612fd33ac375b','3a37fb70602425642966b83d7639bca7','70b40b392485237dc6f77dcb25cc638f','拂柳书楼'],
 ['15349295','wx84b6d57f66615980','2d247fb58c4edbbdc4c8f5b26f8c51df','7e123eea53a06e93633ec9dcbb6a35cc','游鱼文轩'],
 ['15349461','wxd47227ab6593c0d9','56d7e48ae1f20858e04fb42a21682c13','a4228e344b59b7f26a26e182eaf485ce','临枫文阅'],
@@ -1836,7 +2746,42 @@ token_list_vx=[['15349240','wx37e82ed25970841f','164b43c212b3a7ebb71902bb08761b7
 ['17823897','wxa8d4e70c71071c21','22d036a942bf723bd36b3366dd99cecb','48cfb9638941219909de2ea22f62a94f','百瀚文苑','','','',''],
 ['17823917','wxb531922275de987b','25386a909b36bfd0f28f3cb3713a2005','03244c787015fffd7aaa72a54c9d94fa','星昆阅读','陈冲1期','金康','文鼎','二狗的逆袭之路'],
 ['17824091','wxc41491e360565ad2','d02dbdfd4426043bc5f1a74a17c102da','01fc23bc2d661e1e75149853b5936fe3','敬云文海','陈冲1期','金康','文鼎','二狗的逆袭之路'],
-['17823848','wxd287dbdac9e4e4ed','5a81764ec056ce97062e6e88d4515422','71ebeafdc38b9699dd43d3631b320a58','东云文海','','','','']
+['17823848','wxd287dbdac9e4e4ed','5a81764ec056ce97062e6e88d4515422','71ebeafdc38b9699dd43d3631b320a58','东云文海','','','',''],
+['17771574','wx3a7d09c4ccbffd0c','f7ab3703c01f1a1060d5ca0829e1b5ef','d6c062b6cb01f60f3e4e20de74dad754','镜宇文海','趣程24期','姜杨','文鼎','大靠山'],
+['17771592','wx4b00fbb8db1fc8ea','b32cbbeb07ab95073659415d5af705ed','55593c88d93a8fe48c004a4efcee059b','知学文海','趣程24期','姜杨','文鼎','大靠山'],
+['17771544','wxa7624080d8779a40','6d1f96c16467cf7d003a4642de061514','6938082503fba38cdbc59bc8f46408d1','雨豪文楼','趣程19期','徐伟杰','文鼎','大靠山'],
+['17771559','wxcda605a6c16a808d','a350500cfbf5c595c7434b8fe80dcecc','441a4c095a4699ed66c1ebf2d5028e0c','圣文书海','趣程19期','徐伟杰','文鼎','大靠山'],
+['17771586','wxd412b4f09213cd9e','6853a13325e177fb2d0a3b569817b4ea','ae4b921f35b352c1228cc284133dbdda','君玄阅读','趣程24期','姜杨','文鼎','大靠山'],
+['17851898','wx1c61687bde615adb','cb776a8603eb0f64c4f0954b0d9c4cc6','1942050b46175ef5c1605cb26862cbe3','混沌书涯','陈冲1期','郑小强','文鼎','大靠山'],
+['17851902','wx29c06d8357ff82c1','4fb3b941d15099db2199ae6a4c93ace6','08a4ea465a47810c9f60b5223e239c5e','金乾阅读','陈冲1期','陈冲','掌中云','天行医尊'],
+['17835304','wx458f83c2829c27f5','423e8f67c4667669150911b36339ff8a','76ec90c3dfba5222e628cf62dfc335ff','滔天文海','','','',''],
+['17837346','wx6be209c1374ab4ea','a1054b0edd9a4dae048b576bcfc98e0e','23bf1b88b48e058085a52b30fbe7fbac','惊云书亭','','','',''],
+['17851889','wx73028ca1e2acc1dd','27c0c07322b9c171dcbe8c94adca2b7e','e2d60fc4ecc30ac096d92525da4a14cb','翰虎文阅','陈冲1期','郑小强','文鼎','大靠山'],
+['17841034','wx7c6819c5b72221d0','e25f6b905509d56c4bc9cdc675f309cd','a16bcea8f672bfe06cc3bc59c7d1479c','惊海书涯','','','',''],
+['17835145','wx917c39e54b892556','cad5c667da87737567c1de16b4867b34','cb60f687efbe37cdc8fd254a6935722a','尊焱文海','','','',''],
+['17851909','wxaef9ff2c63776f6f','c87d728bbb4acc9219ef3130e550583c','349dcd286bb6af3b700e29d4252dab50','炎兵文楼','陈冲1期','陈冲','花生','天策战神'],
+['17835099','wxbda9abd36106199b','6ee36eb9db92ee9ff1affd1aa845204f','5717427c35e8b6d84cb4d2dcac9481ff','祺星阅读','','','',''],
+['17851913','wxeac152ca84c68286','e20efcb1ccbfd77128ed887bff07363c','1dcd85d42948a037df3ddbf855eb4791','龙川文苑','陈冲1期','陈冲','花生','天策战神'],
 
-]
+['17710032','wx07a1bbcee55f264a','1331f8d3e02d549434e3a1c92199bedb','87dd384f82f5b82611f3449a27575ef1','银河书海','陈冲1期','陈冲','掌中云','天行医尊'],
+['17710010','wx0937cb02b1e6639c','75e3f3256daddcdc57c269d98f58570d','4c33c6ea0f9c40e53bed6bc3b6957540','问枫文院','陈冲1期','陈冲','花生','天策战神'],
+['17712540','wx11c94197a03fdb5d','8a7e14e139d7655fbfd38033b3101b77','31112c9c579b5568647efa2d7ed798a0','游龙文海','','','',''],
+['15078361','wx6f21ab16b63db7fa','3116666dc7f64fd2f17b184b2b89f130','8d5ee1ce6e1227181b082205c8853862','讨海人家海鲜速达','海鲜','','',''],
+['15078404','wx70c02b0d026be6b6','c7e35d10a2c190f20f531d34efebbe72','1c03e4218050916abfa1808621978a73','讨海人家海鲜直送','海鲜','','',''],
+['15078306','wxaded3df84f0a5166','6f640e21b8a69ae78420aabd4ebbae52','ddb0467db451cd086fdea72dea5d4208','胖阿嫂海味直达','海鲜','','',''],
+['17710042','wxf4b216c07c73541a','cc42dff9cff4f7ed938b01580e6136d2','f050e06809a4ae15122ad334df937792','川豪文楼','','','',''],
+['15078384','wxfbe7f9d2e2fdd8aa','2874b06a1620fa46017149ee89654df0','f1caf07a3fd639954488ff5c7648019b','讨海人家海鲜直达','海鲜','','',''],
+['17709985','wxff7f00271294cde5','f805ff36b23d4e75a46e40d595a13a44','219a40c58284c1f1ecfc16f157a563c6','昊焱书海','陈冲1期','陈冲','花生','天策战神'],
+['15078426','wxffe17fa375eb7569','cafa05fb7ba3e02b2314870c79d6e312','6c49fb1e6f504b513d5d2232f8d0c976','讨海人家海鲜直供','海鲜','','',''],
+['17863978','wx0c2f8a49d49b19ee','03dd9f627e8c414391e6c5a1de701a2b','72c62a5c56e39001cf26dfb7b3636858','贯风文楼','','','',''],
+['17879583','wx5f8adabdaf8ddcd6','9fa35382e05b442d4ececa798023d23f','99e116857ced620917310a7e0e28f280','盘古文楼','','','',''],
+['17864368','wx9589a9778fbb3e4e','a2cf2f7bccece2b5cd60de7e70817253','ebbac0777a1361eb94587d59dff4cc9d','毅豪文楼','','','',''],
+['17863953','wx972dee261cfc75b8','50f108824b0a609817bc9c97b8ad1405','fb25db9b7c49d19459a49ee0490144b5','凛顶文楼','陈冲1期','叶灵燕','掌中云','天行医尊'],
+['17879591','wxa0a19e772f9a35c0','8bb1d58181a4c4015147d5d6ab37a37d','af04c78dfcd9dd378d2adc9a2146795c','剑雷书楼','','','',''],
+['17879574','wxb57b96f0a370b1c6','9b9de72cb81285f52205983423bfec22','b4b115d71fddd9bbf7d5cd7809c9dda6','应龙看吧','','','',''],
+['17879567','wxdea1776b5e77bed6','00b9ed4f249b67f94aa2ae5d43944f2b','780ac98065188fda2b2af5df2c01dae2','七星书涯','','','',''],
+['17879563','wxef619d6cb65919b7','c2c105f9265b5ef104024a9e9d24586e','e90678aa31bfdef5a6b530c93650c948','怒海书涯','','','',''],
+['17863934','wxf38f481fe0c3d0ac','6be89fedf5df1e5ed37914a6f5edec28','f3e07241889791764858f008a22e8790','威豪文楼','陈冲1期','王永鹏','掌中云','天行医尊'],
+['17865379','wxfd317838ae57ef0d','ba87b2c237d96248f91e7cfe9c295b87','e4b2cbca4d6a6c91119b45fc1eb14be8','君豪文海','','','','']
 
+]

+ 6 - 1
dgp/update_ad_daily.py

@@ -25,6 +25,11 @@ import pymysql
 from apscheduler.schedulers.blocking import BlockingScheduler
 import token_list as tl
 
+import importlib
+importlib.reload(tl)
+
+
+
 def get_daily_vx():
     token_list_v = tl.token_list_vx
     t = ()
@@ -137,7 +142,7 @@ def start_job():
     mysql_insert_daily_vx(get_daily_vx())
     mysql_insert_daily_qq(get_daily_qq())
     
-start_job_time = '2020-09-24 06:00:00'
+start_job_time = '2020-11-18 18:35:00'
 
 if __name__ == '__main__':
     scheduler = BlockingScheduler()

+ 1 - 14
setup.py

@@ -21,19 +21,6 @@ __mtime__ = '2020/9/24'
                   ┗┻┛  ┗┻┛
 """
 
-import requests
-import hashlib
-import time
-from urllib import parse
-import datetime
-import json
-import math
-import pymysql
-import random
-from apscheduler.schedulers.blocking import BlockingScheduler
-import smtplib
-from email.mime.text import MIMEText
-
 """
 安装、部署、打包的脚本。。。。。。。。。
-"""
+"""

+ 0 - 10
todo_list.md

@@ -1,10 +0,0 @@
-# 后续优化点
-
-#### 配置优化,迁移到配置文件中
-* 数据库连接需要单独配置
-* 账号,token配置也需要独立成配置文件,方便实时获取最新的数据,而不需要重启脚本
-* 多线程,异步获取订单数据,目前获取数据都是单线程,太慢了,掌中云2020-09-25的订单数据共12106条,执行时间为529秒,需要特别优化。
-
-
-
-