qrpa 1.1.36__py3-none-any.whl → 1.1.37__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of qrpa might be problematic. Click here for more details.

@@ -42,6 +42,7 @@ class SheinNewProductAnalysis(Base):
42
42
  # 状态标识
43
43
  onsale_flag = Column(Integer, nullable=True, default=0, comment='在售标识(0-否,1-是)')
44
44
  sale_flag = Column(Integer, nullable=True, default=0, comment='上架标识(0-否,1-是)')
45
+ new_goods_tag = Column(Integer, nullable=True, comment='新品标签(1-新品爆款,2-新品畅销,3-潜力新品,4-新品)')
45
46
 
46
47
  # 销售数据
47
48
  sale_cnt = Column(Integer, nullable=True, default=0, comment='销量')
@@ -85,6 +86,35 @@ class SheinNewProductAnalysis(Base):
85
86
  def __repr__(self):
86
87
  return f"<SheinNewProductAnalysis(id={self.id}, store_username='{self.store_username}', skc='{self.skc}', stat_date={self.stat_date})>"
87
88
 
89
+ @property
90
+ def new_goods_tag_name(self):
91
+ """
92
+ 获取新品标签的文本描述
93
+
94
+ Returns:
95
+ str: 新品标签文本描述
96
+ """
97
+ return self.get_new_goods_tag_name(self.new_goods_tag)
98
+
99
+ @staticmethod
100
+ def get_new_goods_tag_name(tag):
101
+ """
102
+ 将新品标签代码转换为文本描述
103
+
104
+ Args:
105
+ tag (str): 新品标签代码
106
+
107
+ Returns:
108
+ str: 新品标签文本描述
109
+ """
110
+ tag_map = {
111
+ '1': '新品爆款',
112
+ '2': '新品畅销',
113
+ '3': '潜力新品',
114
+ '4': '新品'
115
+ }
116
+ return tag_map.get(str(tag), '') if tag else ''
117
+
88
118
  class NewProductAnalysisManager:
89
119
  """
90
120
  新品分析数据管理器
@@ -313,6 +343,7 @@ class NewProductAnalysisManager:
313
343
  'img_url' : item.get('imgUrl'),
314
344
  'onsale_flag' : int(item.get('onsaleFlag', 0)),
315
345
  'sale_flag' : int(item.get('saleFlag', 0)),
346
+ 'new_goods_tag' : item.get('newGoodsTag'),
316
347
  'sale_cnt' : item.get('saleCnt', 0),
317
348
  'pay_order_cnt' : item.get('payOrderCnt', 0),
318
349
  'goods_uv' : item.get('goodsUv', 0),
@@ -470,22 +501,24 @@ def update_front_price(stat_date, skc, front_price):
470
501
 
471
502
 
472
503
  if __name__ == '__main__':
504
+ database_url = "mysql+pymysql://root:123wyk@127.0.0.1:3306/lz"
505
+
473
506
  # 测试代码
474
- manager = NewProductAnalysisManager()
507
+ manager = NewProductAnalysisManager(database_url)
475
508
 
476
509
  # 创建表
477
510
  manager.create_table()
478
511
 
479
512
  # 读取JSON文件
480
- with open('../../docs/skc_model_GS9740414_2025-10-15.json', 'r', encoding='utf-8') as f:
513
+ with open('../../docs/skc_model_GS9740414_2025-10-22.json', 'r', encoding='utf-8') as f:
481
514
  json_data = json.load(f)
482
515
  count = manager.import_from_json(json_data)
483
516
  print(f"成功导入 {count} 条记录")
484
517
 
485
- with open('../../docs/skc_model_S19118100_2025-10-15.json', 'r', encoding='utf-8') as f:
486
- json_data = json.load(f)
487
- count = manager.import_from_json(json_data)
488
- print(f"成功导入 {count} 条记录")
518
+ # with open('../../docs/skc_model_S19118100_2025-10-15.json', 'r', encoding='utf-8') as f:
519
+ # json_data = json.load(f)
520
+ # count = manager.import_from_json(json_data)
521
+ # print(f"成功导入 {count} 条记录")
489
522
 
490
523
  # 更新前台价格(手动设置,后续导入不会覆盖)
491
524
  # manager.update_front_price('2025-10-15', 'si2409238815318914', 19.99)
@@ -558,8 +558,9 @@ def restore_store(database_url, user_name):
558
558
  if __name__ == '__main__':
559
559
  # 测试代码
560
560
  # 注意:需要提供数据库连接URL
561
- database_url = "mysql+pymysql://root:123wyk@127.0.0.1:3306/lz"
562
-
561
+ #database_url = "mysql+pymysql://root:123wyk@127.0.0.1:3306/lz"
562
+ database_url = "mysql+pymysql://root:123wyk@47.83.212.3:3306/lz"
563
+
563
564
  manager = SheinStoreManager(database_url)
564
565
 
565
566
  # 创建表
qrpa/shein_lib.py CHANGED
@@ -1174,8 +1174,8 @@ class SheinLib:
1174
1174
  detail_file = f'{self.config.auto_dir}/shein/product/product_detail_file.json'
1175
1175
  write_dict_to_file_ex(detail_file, {self.store_username: dict_product_detail}, [self.store_username])
1176
1176
 
1177
- def get_skc_diagnose_list(self, shelf_date_begin, shelf_date_end):
1178
- log(f'获取商品分析列表(最近上架的) {shelf_date_begin} {shelf_date_end} {self.store_name} {self.store_username}')
1177
+ def get_skc_diagnose_list(self, shelf_date_begin="", shelf_date_end=""):
1178
+ log(f'获取商品分析列表(最近上架的或在售的) {shelf_date_begin} {shelf_date_end} {self.store_name} {self.store_username}')
1179
1179
 
1180
1180
  dt_goods = self.get_dt_time_goods()
1181
1181
  if not TimeUtils.is_yesterday_date(dt_goods, "%Y%m%d"):
@@ -1188,17 +1188,18 @@ class SheinLib:
1188
1188
  page_num = 1
1189
1189
  page_size = 100
1190
1190
  payload = {
1191
- "areaCd" : "cn",
1192
- "dt" : dt_goods,
1193
- "countrySite" : [
1191
+ "areaCd" : "cn",
1192
+ "dt" : dt_goods,
1193
+ "countrySite": [
1194
1194
  "shein-all"
1195
1195
  ],
1196
- "startDate" : yesterday,
1197
- "endDate" : yesterday,
1198
- "pageNum" : page_num,
1199
- "pageSize" : page_size,
1200
- "localFrstSaleBeginDate": shelf_date_begin,
1201
- "localFrstSaleEndDate" : shelf_date_end,
1196
+ "startDate" : yesterday,
1197
+ "endDate" : yesterday,
1198
+ "pageNum" : page_num,
1199
+ "pageSize" : page_size,
1200
+ "onsaleFlag" : 1,
1201
+ # "localFrstSaleBeginDate": shelf_date_begin,
1202
+ # "localFrstSaleEndDate" : shelf_date_end,
1202
1203
  }
1203
1204
  response_text = fetch(self.web_page, url, payload)
1204
1205
  error_code = response_text.get('code')
@@ -1224,6 +1225,12 @@ class SheinLib:
1224
1225
 
1225
1226
  # 活动信息
1226
1227
  # AB实验数据
1228
+
1229
+ # 预先过滤掉不需要的商品状态
1230
+ log(f'过滤前商品数量: {len(spu_list)}')
1231
+ exclude_levels = ['退供款', '自主停产', '自主下架']
1232
+ spu_list = [item for item in spu_list if item['layerNm'] not in exclude_levels]
1233
+ log(f'过滤后剩余商品数量: {len(spu_list)}')
1227
1234
 
1228
1235
  for skc_item in spu_list:
1229
1236
  skc = skc_item['skc']
@@ -1262,8 +1269,8 @@ class SheinLib:
1262
1269
  return spu_list
1263
1270
 
1264
1271
  # 获取备货信息列表 最近35天上架的
1265
- def get_latest_shelf_list(self, shelf_date_begin, shelf_date_end):
1266
- log(f'获取备货信息列表(最近上架的) {shelf_date_begin} {shelf_date_end} {self.store_name} {self.store_username}')
1272
+ def get_latest_shelf_list(self, shelf_date_begin="", shelf_date_end=""):
1273
+ log(f'获取备货信息列表(最近上架的或已上架的) {shelf_date_begin} {shelf_date_end} {self.store_name} {self.store_username}')
1267
1274
 
1268
1275
  dict_skc_shelf_date = {}
1269
1276
 
@@ -1280,7 +1287,7 @@ class SheinLib:
1280
1287
  "c7dSaleCntEnd" : "",
1281
1288
  "goodsLevelIdList" : [],
1282
1289
  "supplyStatus" : "",
1283
- "shelfStatus" : "",
1290
+ "shelfStatus" : 1, # 已上架
1284
1291
  "categoryIdList" : [],
1285
1292
  "skcStockBegin" : "",
1286
1293
  "skcStockEnd" : "",
@@ -1336,9 +1343,9 @@ class SheinLib:
1336
1343
 
1337
1344
  time.sleep(0.3)
1338
1345
 
1339
- key = f'{self.store_username}'
1340
- cache_file = f'{self.config.auto_dir}/shein/cache/bak_info_list_{key}_{shelf_date_begin}_{shelf_date_end}.json'
1341
- write_dict_to_file_ex(cache_file, {key: spu_list}, [key])
1346
+ # key = f'{self.store_username}'
1347
+ # cache_file = f'{self.config.auto_dir}/shein/cache/bak_info_list_{key}_{shelf_date_begin}_{shelf_date_end}.json'
1348
+ # write_dict_to_file_ex(cache_file, {key: spu_list}, [key])
1342
1349
 
1343
1350
  for skc_item in spu_list:
1344
1351
  skc = skc_item['skc']
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qrpa
3
- Version: 1.1.36
3
+ Version: 1.1.37
4
4
  Summary: qsir's rpa library
5
5
  Author: QSir
6
6
  Author-email: QSir <1171725650@qq.com>
@@ -11,7 +11,7 @@ qrpa/fun_web.py,sha256=9YuVy_wps9Ty_FBZ91W2R0iKgC2IViaJjHbyuUgngGs,11599
11
11
  qrpa/fun_win.py,sha256=vMdVh00dsnVz8Wey4Bq7J3RPZAY8B_bI_IKphOX1cE8,7836
12
12
  qrpa/shein_daily_report_model.py,sha256=O8s9qM45WZRoAgxUFRngvmBrc29v7Uf2ye7K8_bcSRg,12214
13
13
  qrpa/shein_excel.py,sha256=-5fNetkVMixPQPw00K9F4OeJn8LSknaoyRXNqsQw1EA,158107
14
- qrpa/shein_lib.py,sha256=GSHqiCoVgFs3Ri6HT-AxxcJuGTsZ2eRGnGbv2YsF4ho,190827
14
+ qrpa/shein_lib.py,sha256=aJnhaWPZHWKUaAvTy4I3Xrk3sE_mZIslempxLo9mbFI,191182
15
15
  qrpa/shein_mysql.py,sha256=MxbiRSH0gaTtW4ET7lVWRNY4NLOrMLGXO_4STptE1pU,4562
16
16
  qrpa/shein_sqlite.py,sha256=i4xwNf60eoG6wbWM1R2i5pDdVW1ZMy6uy9nB-c2WKzk,5554
17
17
  qrpa/shein_ziniao.py,sha256=YN7g6m84-vyDyePssfR41lqwaROz-km0-rJ8qY-jhy0,21416
@@ -22,12 +22,12 @@ qrpa/time_utils.py,sha256=bOTSi_ewXPCxwgG_ndFGf8dl7S4fvSGT9sQ-90LESuo,31458
22
22
  qrpa/time_utils_example.py,sha256=80zzunKw7F1S8MOwNFmmiCnI8MOYoh4PH-25UrEGuF0,7810
23
23
  qrpa/wxwork.py,sha256=Vy8PGEtlTWt4-1laVhuqpJUGCFH2JymgbjvH00aaBog,10946
24
24
  qrpa/mysql_module/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
- qrpa/mysql_module/new_product_analysis_model.py,sha256=nLBxgzcBHofiORETEycWMUliG-9mEErGih9TmBClxkM,18615
25
+ qrpa/mysql_module/new_product_analysis_model.py,sha256=z7-T9CtSp8Zn6cy7BydcEVIXjt73FhfYRxrqO43zFeg,19656
26
26
  qrpa/mysql_module/shein_ledger_model.py,sha256=KGKfGyzS00rbBZhiZhAzypwYPGs7OdfRLnH2ea36Vm8,18161
27
27
  qrpa/mysql_module/shein_product_model.py,sha256=KiXMjPT93XkANCM53cCFaISja0sTmAWsionFrRy8DQ4,18773
28
28
  qrpa/mysql_module/shein_return_order_model.py,sha256=8xvKhOzpcJS5FHfyA33UednaqRNCyXo3qeXBzwTXeN8,25993
29
- qrpa/mysql_module/shein_store_model.py,sha256=tSXB7w8gmLXQfvuzk3te4OL1Tok-kEgGPYrCutDrzSw,20469
30
- qrpa-1.1.36.dist-info/METADATA,sha256=Xk25QUVlFGW6ET2dpzJB8N9UiPu8BXMxAvZ7MH4kqjU,231
31
- qrpa-1.1.36.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
32
- qrpa-1.1.36.dist-info/top_level.txt,sha256=F6T5igi0fhXDucPPUbmmSC0qFCDEsH5eVijfVF48OFU,5
33
- qrpa-1.1.36.dist-info/RECORD,,
29
+ qrpa/mysql_module/shein_store_model.py,sha256=RTj9cqexewHglHm1JNTe8iU0vJueHBLltdap-gvGxaY,20536
30
+ qrpa-1.1.37.dist-info/METADATA,sha256=33v1nk64G12K_qyWkZFjg2T6j3EySRhSjFrwZXF9vEE,231
31
+ qrpa-1.1.37.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
32
+ qrpa-1.1.37.dist-info/top_level.txt,sha256=F6T5igi0fhXDucPPUbmmSC0qFCDEsH5eVijfVF48OFU,5
33
+ qrpa-1.1.37.dist-info/RECORD,,
File without changes