deca_track.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. # -*- coding: utf-8 -*-
  2. # Author : Charley
  3. # Python : 3.12.10
  4. # Date : 2026/8/3 15:36
  5. import sys
  6. from mysql_pool import MySQLConnectionPool
  7. import schedule
  8. import time
  9. from deca_daily_spider import do_request
  10. from deca_daily_spider import logger
  11. def main_task():
  12. logger.info(f"开始运行 {sys._getframe().f_code.co_name} 得卡采集任务" + "." * 40)
  13. sql_pool = MySQLConnectionPool(log=logger)
  14. if not sql_pool.check_pool_health():
  15. logger.error("数据库连接池异常")
  16. raise RuntimeError("数据库连接池异常")
  17. try:
  18. url = "/api/v1/app/home/recommend/groupbuy/list"
  19. data = {
  20. "page": 1,
  21. "pageSize": 20,
  22. "categoryParam": 0
  23. }
  24. response = do_request(logger, url, body=data)
  25. # print(response.json())
  26. # print(response)
  27. if response:
  28. seen = set()
  29. dict_list = []
  30. data_list = response.get("data", {}).get("list", [])
  31. for data in data_list:
  32. merchant = data.get("merchant", {})
  33. merchant_name = merchant.get("merchantName", "")
  34. if merchant_name != '魔都兄弟球星卡':
  35. continue
  36. product_code = data.get("code")
  37. if product_code in seen:
  38. continue
  39. seen.add(product_code)
  40. dict_list.append({
  41. # "merchant_user_id": merchant.get("merchantUserID", ""),
  42. "merchant_name": merchant_name,
  43. "product_code": product_code,
  44. "title": data.get("title"),
  45. "unit_price": data.get("unitPrice", 0),
  46. "card_count": data.get("cardCount", 0),
  47. "sold_count": data.get("soldCount", 0),
  48. })
  49. sql_pool.insert_many(table="deca_track_record", data_list=dict_list)
  50. except Exception as e:
  51. logger.error(f"{sys._getframe().f_code.co_name} error: {e}")
  52. finally:
  53. logger.info(f"得卡采集 {sys._getframe().f_code.co_name} 运行结束,等待下一轮" + "." * 20)
  54. def schedule_task():
  55. """定时任务入口:每天 09:00 与 15:00 各运行一次 main_task。"""
  56. # main_task() # 立即跑一次(调试时取消注释)
  57. schedule.every(1).minutes.do(main_task)
  58. while True:
  59. schedule.run_pending()
  60. time.sleep(1)
  61. if __name__ == '__main__':
  62. schedule_task()