ck 4 years ago
parent
commit
9dda3a1c8b
3 changed files with 118 additions and 16 deletions
  1. 19 7
      app/api_data/get_order.py
  2. 67 2
      app/api_data/order_util.py
  3. 32 7
      model/DateUtils.py

+ 19 - 7
app/api_data/get_order.py

@@ -111,6 +111,19 @@ def wending(start=None,end=None,new=None):
           get_wd_order_task(start, end, account)
 
 
+def zhangdu(start=None,end=None,new=None):
+    if start is None:
+        start = end = du.getNow()
+
+    accounts = get_account("掌读") if new is None else get_new_account('掌读')
+    if len(accounts) == 0:
+        return
+    else:
+        print(f'掌读有账号{len(accounts)}个')
+    for account in accounts:
+          get_zd_order_task(start, end, account)
+
+
 
 
 def hourly():
@@ -118,28 +131,27 @@ def hourly():
     huasheng()
     qiyue()
     wending()
+    zhangdu()
 
 
 def daily():
     st = du.get_n_days(-10)
     et = du.get_n_days(-1)
-    yangguang(et, et)
-    huasheng(et, et)
-
-    # 每晚往前拉10天的数据
     yangguang(st, et)
     huasheng(st, et)
     qiyue(st, et)
     wending(st, et)
+    zhangdu(st, et)
 
 
 
 
 if __name__ == '__main__':
     # yangguang()
-    # huasheng('2021-02-01','2021-02-19',new=1)
-    # qiyue()
-    wending()
+    huasheng('2020-12-01','2021-02-22')
+    qiyue('2020-12-01','2021-02-22')
+    # wending()
 
+    # zhangdu('2020-12-20','2021-02-22')
 
     """要是只跑一个账号 把 get_yg_acccount() 里面的sql where 条件加上 id=xxx"""

+ 67 - 2
app/api_data/order_util.py

@@ -201,8 +201,6 @@ def save_hs_data(data):
     db.quchen_text.executeMany(sql,data)
 
 
-
-
 def get_qiyue_order_task(start, end, account):
     """一分钟请求60次的限制"""
     order_list = []
@@ -264,6 +262,7 @@ def get_qiyue_order_task(start, end, account):
         save_order(order_list)
     return order_list
 
+
 def save_order(order_list):
     db.quchen_text.executeMany('replace into `order` values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)',order_list)
     print("入库成功")
@@ -351,6 +350,7 @@ def get_wending_json_object(url,params):
     del params['sign']
     return response_result_json
 
+
 def get_wd_order_task(start,end,account):
     order_list = []
     url = 'https://bi.reading.163.com/dist-api/rechargeList'
@@ -412,6 +412,71 @@ def get_wd_order_task(start,end,account):
         save_order(order_list)
 
 
+def get_zd_order_task(start,end,account):
+
+    """开始到结束最多90天"""
+    order_list = []
+    url = 'https://api.zhangdu520.com/channel/getorder'
+
+    uid = account[0]
+    appsecert = account[1]
+    channel = account[2]
+    stage = account[3]
+    timestamp = int(time.time())
+    sign = md5(str(uid) + '&' + appsecert + '&' + str(timestamp))
+
+    for i in du.split_date2(start, end, 90):
+        starttime = DateUtils.str_to_stamp(i[0]+' 00:00:00','%Y-%m-%d %H:%M:%S')
+        endtime = DateUtils.str_to_stamp(i[1]+' 23:59:59','%Y-%m-%d %H:%M:%S')
+        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(f'掌读账号【{uid}】, 查询时间【{i[0]} - {i[1]}】,本次请求数据异常,响应报文【{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_time = order_item['ctime']
+                order = (
+                    str(DateUtils.stamp_to_date_stamp(int(order_time))),
+                    stage,
+                    '掌读',
+                    channel,
+                    uid,
+                    order_item['openid'],
+                    order_time,
+                    order_item['regtime'],
+                    order_item['amount'],
+                    order_item.get('book_entry', ''),
+                    str(order_item['orderno'])
+                )
+
+                order_list.append(order)
+
+            if page == page_count:  # 是最后一页
+                break
+            page = page + 1
+
+    print(f"{channel} [{start}]~[{end}] 有订单 {order_list.__len__()}")
+    if len(order_list) > 0:
+        save_order(order_list)
+
 
 if __name__ == '__main__':
     get_qiyue_order_task('2021-02-01','2021-02-19',['趣程15期','eyJpdiI6ImluVWxoRUl3VTR6QU5hamlYOFBvXC9BPT0iLCJ2YWx1ZSI6Ik5IZ0N4dm5GcmJ0Zklsd0tNZ1JVSVE9PSIsIm1hYyI6IjJjODUzMjdlZTc2ODI2ZjFmY2QyYmU5MGViYTkzOGU4MDEwZTIyODIxOTE4NzgzYTNhOGQ1YWM4OGJkMDAzMmIifQ=='])

+ 32 - 7
model/DateUtils.py

@@ -32,9 +32,24 @@ class DateUtils:
                 break
             else:
                 print(f"{st}~{et}")
-                func(st,et)
-                st=self.add_days(et, 1)
-                et=self.add_days(st, interval - 1)
+                func(st, et)
+                st = self.add_days(et, 1)
+                et = self.add_days(st, interval - 1)
+
+    def split_date2(self, start, end, interval):
+        """:returns [(st1,et1),(st2,et2)..]"""
+        li = []
+        while True:
+            next_date = self.add_days(start, interval-1)
+            if next_date >= end:
+                li.append((start, end))
+                break
+            else:
+                li.append((start, next_date))
+                start = self.add_days(next_date, 1)
+        # print(li)
+
+        return li
 
 
     def date_str_to_str(self,str,f1='%Y-%m-%d',f2='%Y%m%d'):
@@ -305,13 +320,23 @@ class DateUtils:
         return x if flag else x.strftime("%Y-%m-%d")
 
     @staticmethod
-    def str_to_stamp(str):
-        return int(time.mktime(time.strptime(str,'%Y-%m-%d')))
+    def str_to_stamp(str, f='%Y-%m-%d'):
+        return int(time.mktime(time.strptime(str,f)))
+
+    @staticmethod
+    def stamp_to_str(stamp, f="%Y-%m-%d %H:%M:%S"):
+        """
+        @:param stamp->int
+        @:return ->str
+        """
+        return time.strftime(f, time.localtime(stamp))
+
+    @staticmethod
+    def stamp_to_date_stamp(stamp):
+        return DateUtils.str_to_stamp(DateUtils.stamp_to_str(stamp,'%Y-%m-%d'),'%Y-%m-%d')
 
 
 if __name__ == "__main__":
 
     ut = DateUtils()
-    print(ut.date_str_to_str('2021-01-01'))
-    # end = ut.now.strftime('%Y-%m') + '-01 00:00:00'