BUFFXP.py 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. import requests as req
  2. from PyQt5.QtWidgets import QMessageBox, QTextEdit
  3. import logging
  4. logging.basicConfig(level=logging.DEBUG, format='%(asctime)s: %(message)s')
  5. logger = logging.getLogger(__name__)
  6. class BUFFXP():
  7. def __init__(self, parent=None, title="buff选品", initial_data=None):
  8. super().__init__(parent)
  9. @staticmethod
  10. def get_goods_param_list(self):
  11. self.search_goods_param_list = {'game': 'csgo'}
  12. # self.selected_categories 不为空,category 等于self.selected_categories内的数据用逗号拼接
  13. if len(self.selected_categories) > 0:
  14. self.selected_categories = ','.join(self.selected_categories)
  15. self.search_goods_param_list["category"]=self.selected_categories
  16. self.search_goods_param_list['category_group'] = self.search_goods_param_list['category']
  17. if len(self.selected_qualities) > 0:
  18. self.selected_qualities = ','.join(self.selected_qualities)
  19. self.search_goods_param_list["rarity"]=self.selected_qualities
  20. if len(self.selected_types) > 0:
  21. self.selected_types = ','.join(self.selected_types)
  22. self.search_goods_param_list["quality"]=self.selected_types
  23. if len(self.selected_appearances) > 0:
  24. self.selected_appearances = ','.join(self.selected_appearances)
  25. self.search_goods_param_list["exterior"]=self.selected_appearances
  26. if len(self.selected_collectibles) > 0:
  27. self.selected_collectibles = ','.join(self.selected_collectibles)
  28. self.search_goods_param_list["itemset"]=self.selected_collectibles
  29. # self.search_goods_param_list.update({'game': 'csgo'})
  30. # 判断min_price是否为空
  31. if self.min_price:
  32. self.search_goods_param_list['min_price'] = self.min_price
  33. # 判断max_price是否为空
  34. if self.max_price:
  35. self.search_goods_param_list['max_price'] = self.max_price
  36. # 判断sort_mode是否为空
  37. if self.sort_mode:
  38. if self.sort_mode == '默认':
  39. pass
  40. elif self.sort_mode == '价格升序':
  41. self.search_goods_param_list['sort_by'] = 'price.asc'
  42. elif self.sort_mode == '价格降序':
  43. self.search_goods_param_list['sort_by'] = 'price.desc'
  44. elif self.sort_mode == '在售数量升序':
  45. self.search_goods_param_list['sort_by'] = 'sell_num.desc'
  46. # 判断选品接口每页请求数量是否为空
  47. if self.page_size:
  48. self.search_goods_param_list['page_size'] = self.page_size
  49. # 选品接口每次的page_num 默认100
  50. if self.max_page:
  51. self.search_goods_param_list['page_num'] = self.max_page
  52. self.detail_logger.debug(f"请求网易BUFF商品的接口的入参为:{self.search_goods_param_list}")
  53. # non_empty_lists = {
  54. # 'category': self.selected_categories,
  55. # 'rarity': self.selected_qualities,
  56. # 'quality': self.selected_types,
  57. # 'exterior': self.selected_appearances,
  58. # 'itemset': self.selected_collectibles
  59. # }
  60. # # 只保留非空的列表
  61. # filtered_lists = {k: v for k, v in non_empty_lists.items() if v}
  62. # # 如果所有列表都为空,返回空列表
  63. # if not filtered_lists:
  64. # logger.debug('品类、品质、类别、外观、收藏品的筛选条件都为空')
  65. # self.search_goods_param_list = [{}]
  66. # else:
  67. # # 生成所有可能的组合
  68. # # 使用itertools.product来生成所有可能的组合
  69. # from itertools import product
  70. #
  71. # # 获取所有非空列表的值
  72. # values = list(filtered_lists.values())
  73. # # 获取所有非空列表的键
  74. # keys = list(filtered_lists.keys())
  75. #
  76. # for combination in product(*values):
  77. # combination_dict = {keys[i]: combination[i] for i in range(len(keys))}
  78. # self.search_goods_param_list.append(combination_dict)
  79. # for i in range(len(self.search_goods_param_list)):
  80. # #判断self.search_goods_param_list[i] 是否存在category元素
  81. # if self.search_goods_param_list[i].get('category'):
  82. # self.search_goods_param_list[i]['category_group'] = self.search_goods_param_list[i]['category']
  83. # 遍历search_goods_param_list
  84. # for i in range(len(self.search_goods_param_list)):
  85. # self.search_goods_param_list[i].update({'game': 'csgo'})
  86. # # 判断min_price是否为空
  87. # if self.min_price:
  88. # self.search_goods_param_list[i]['min_price'] = self.min_price
  89. # # 判断max_price是否为空
  90. # if self.max_price:
  91. # self.search_goods_param_list[i]['max_price'] = self.max_price
  92. # # 判断sort_mode是否为空
  93. # if self.sort_mode:
  94. # if self.sort_mode == '默认':
  95. # pass
  96. # elif self.sort_mode == '价格升序':
  97. # self.search_goods_param_list[i]['sort_by'] = 'price.asc'
  98. # elif self.sort_mode == '价格降序':
  99. # self.search_goods_param_list[i]['sort_by'] = 'price.desc'
  100. # elif self.sort_mode == '在售数量升序':
  101. # self.search_goods_param_list[i]['sort_by'] = 'sell_num.desc'
  102. # # 判断选品接口每页请求数量是否为空
  103. # if self.page_size:
  104. # self.search_goods_param_list[i]['page_size'] = self.page_size
  105. # # 选品接口每次的page_num 默认100
  106. # if self.max_page:
  107. # self.search_goods_param_list[i]['page_num'] = self.max_page
  108. # logger.debug(f"请求网易BUFF商品的接口的入参为:{self.search_goods_param_list}")
  109. # @staticmethod
  110. # def get_goods_param_list(self):
  111. # non_empty_lists = {
  112. # 'category': self.selected_categories,
  113. # 'rarity': self.selected_qualities,
  114. # 'quality': self.selected_types,
  115. # 'exterior': self.selected_appearances,
  116. # 'itemset': self.selected_collectibles
  117. # }
  118. # # 只保留非空的列表
  119. # filtered_lists = {k: v for k, v in non_empty_lists.items() if v}
  120. # # 如果所有列表都为空,返回空列表
  121. # if not filtered_lists:
  122. # logger.debug('品类、品质、类别、外观、收藏品的筛选条件都为空')
  123. # self.search_goods_param_list = [{}]
  124. # else:
  125. # # 生成所有可能的组合
  126. # # 使用itertools.product来生成所有可能的组合
  127. # from itertools import product
  128. #
  129. # # 获取所有非空列表的值
  130. # values = list(filtered_lists.values())
  131. # # 获取所有非空列表的键
  132. # keys = list(filtered_lists.keys())
  133. #
  134. # for combination in product(*values):
  135. # combination_dict = {keys[i]: combination[i] for i in range(len(keys))}
  136. # self.search_goods_param_list.append(combination_dict)
  137. #
  138. # for i in range(len(self.search_goods_param_list)):
  139. # #判断self.search_goods_param_list[i] 是否存在category元素
  140. # if self.search_goods_param_list[i].get('category'):
  141. # self.search_goods_param_list[i]['category_group'] = self.search_goods_param_list[i]['category']
  142. #
  143. # # 遍历search_goods_param_list
  144. # for i in range(len(self.search_goods_param_list)):
  145. # self.search_goods_param_list[i].update({'game': 'csgo'})
  146. # # 判断min_price是否为空
  147. # if self.min_price:
  148. # self.search_goods_param_list[i]['min_price'] = self.min_price
  149. # # 判断max_price是否为空
  150. # if self.max_price:
  151. # self.search_goods_param_list[i]['max_price'] = self.max_price
  152. # # 判断sort_mode是否为空
  153. # if self.sort_mode:
  154. # if self.sort_mode == '默认':
  155. # pass
  156. # elif self.sort_mode == '价格升序':
  157. # self.search_goods_param_list[i]['sort_by'] = 'price.asc'
  158. # elif self.sort_mode == '价格降序':
  159. # self.search_goods_param_list[i]['sort_by'] = 'price.desc'
  160. # elif self.sort_mode == '在售数量升序':
  161. # self.search_goods_param_list[i]['sort_by'] = 'sell_num.desc'
  162. # # 判断选品接口每页请求数量是否为空
  163. # if self.page_size:
  164. # self.search_goods_param_list[i]['page_size'] = self.page_size
  165. # # 选品接口每次的page_num 默认100
  166. # if self.max_page:
  167. # self.search_goods_param_list[i]['page_num'] = self.max_page
  168. # logger.debug(f"请求网易BUFF商品的接口的入参为:{self.search_goods_param_list}")
  169. @staticmethod
  170. def checkBuffXPParams(self):
  171. # 必填条件,没有则跳出
  172. # self.phone_number = self.phone_edit_map["选品"].text()
  173. # self.detail_logger.debug(f"选品手机号码: {self.phone_number}")
  174. # 判断phone_number是否为空,为空则跳出方法
  175. # if not self.phone_number:
  176. # self.detail_logger.debug("选品手机号码不能为空")
  177. # return False
  178. # 判断选品cookie是否为空,为空则退出方法
  179. self.cookie_text = self.xp_cookie_edit.toPlainText()
  180. # self.detail_logger.debug(f"选品Cookie: {self.cookie_text}")
  181. if not self.cookie_text:
  182. self.detail_logger.debug("选品Cookie不能为空")
  183. return False
  184. # 获取勾选中的品类编码信息
  185. self.selected_categories = []
  186. # 获取勾选中的品类信息
  187. # self.selected_categories_items = []
  188. for i in range(self.tree_widget.topLevelItemCount()):
  189. item = self.tree_widget.topLevelItem(i)
  190. checkbox = self.tree_widget.itemWidget(item, 0)
  191. if checkbox.isChecked():
  192. category_code = item.text(2)
  193. # category_name = item.text(1)
  194. self.selected_categories.append(category_code)
  195. # self.selected_categories_items.append(f"{category_code}({category_name})")
  196. if self.selected_categories:
  197. self.detail_logger.debug(f"勾选的品类信息: {', '.join(self.selected_categories)}")
  198. else:
  199. self.detail_logger.debug("没有勾选任何品类信息")
  200. # 获取勾选中的品质编码信息
  201. self.selected_qualities = []
  202. # 获取勾选中的品质信息
  203. # self.selected_qualities_items = []
  204. for i in range(self.quality_tree_widget.topLevelItemCount()):
  205. item = self.quality_tree_widget.topLevelItem(i)
  206. checkbox = self.quality_tree_widget.itemWidget(item, 0)
  207. if checkbox.isChecked():
  208. quality_code = item.text(1)
  209. quality_name = item.text(2)
  210. self.selected_qualities.append(quality_code)
  211. # self.selected_qualities_items.append(f"{quality_code}({quality_name})")
  212. if self.selected_qualities:
  213. self.detail_logger.debug(f"勾选的品质信息: {', '.join(self.selected_qualities)}")
  214. else:
  215. self.detail_logger.debug("没有勾选任何品质信息")
  216. # 获取勾选中的type编码信息
  217. self.selected_types = []
  218. # 获取勾选中的type信息
  219. # self.selected_types_items = []
  220. for i in range(self.type_tree_widget.topLevelItemCount()):
  221. item = self.type_tree_widget.topLevelItem(i)
  222. checkbox = self.type_tree_widget.itemWidget(item, 0)
  223. if checkbox.isChecked():
  224. type_code = item.text(1)
  225. type_name = item.text(2)
  226. self.selected_types.append(type_code)
  227. # self.selected_types_items.append(f"{type_code}({type_name})")
  228. if self.selected_types:
  229. self.detail_logger.debug(f"勾选的类别信息: {', '.join(self.selected_types)}")
  230. else:
  231. self.detail_logger.debug("没有勾选任何类别信息")
  232. # 获取勾选中的外观编码信息
  233. self.selected_appearances = []
  234. # 获取勾选中的外观信息
  235. # self.selected_appearances_items = []
  236. for i in range(self.appearance_tree_widget.topLevelItemCount()):
  237. item = self.appearance_tree_widget.topLevelItem(i)
  238. checkbox = self.appearance_tree_widget.itemWidget(item, 0)
  239. if checkbox.isChecked():
  240. appearance_code = item.text(1)
  241. appearance_name = item.text(2)
  242. self.selected_appearances.append(appearance_code)
  243. # self.selected_appearances_items.append(f"{appearance_code}({appearance_name})")
  244. if self.selected_appearances:
  245. self.detail_logger.debug(f"勾选的外观信息: {', '.join(self.selected_appearances)}")
  246. else:
  247. self.detail_logger.debug("没有勾选任何外观信息")
  248. # 获取勾选中的收藏品编码信息
  249. self.selected_collectibles = []
  250. # 获取勾选中的收藏品信息
  251. # self.selected_collectibles_items = []
  252. for i in range(self.collectible_tree_widget.topLevelItemCount()):
  253. item = self.collectible_tree_widget.topLevelItem(i)
  254. checkbox = self.collectible_tree_widget.itemWidget(item, 0)
  255. if checkbox.isChecked():
  256. collectible_code = item.text(1)
  257. collectible_name = item.text(2)
  258. self.selected_collectibles.append(collectible_code)
  259. # self.selected_collectibles_items.append(f"{collectible_code}({collectible_name})")
  260. if self.selected_collectibles:
  261. self.detail_logger.debug(f"勾选的收藏品信息: {', '.join(self.selected_collectibles)}")
  262. else:
  263. self.detail_logger.debug("没有勾选任何收藏品信息")
  264. # 获取选品配置信息
  265. self.min_price = self.min_price_edit.text()
  266. self.max_price = self.max_price_edit.text()
  267. self.sort_mode = self.sort_mode_combo.currentText()
  268. self.stop_condition = self.stop_condition_combo.currentText()
  269. self.success_count = self.success_count_edit.text()
  270. self.scan_count = self.scan_count_edit.text()
  271. self.page_size = self.page_size_edit.text()
  272. self.pause_time = self.pause_time_edit.text()
  273. # 获取选品配置信息选品接口最大请求多少页
  274. self.max_page = self.max_pages_edit.text()
  275. # 获取选品商品参考价调整系数
  276. self.ref_price_adjust = int(self.ref_price_adjust_edit.text())
  277. # 获取选品商品扫货价调整系数
  278. self.sweep_price_adjust = int(self.sweep_price_adjust_edit.text())
  279. # 选品API接口需要短信验证时,下次选品暂停时长(秒)
  280. self.needed_msg_check_pause_time = self.needed_msg_check_pause_time_edit.text()
  281. # 选品API接口需要短信验证时,尝试几次后仍异常则退出
  282. self.needed_msg_check_try_times = self.needed_msg_check_try_times_edit.text()
  283. # 选品剔除的ids列表
  284. # self.xp_delete_ids = self.delete_ids_label_edit.text()
  285. # 从当前文件夹下的xppcids.txt中读取每行数据,并用#号链接
  286. # 读取文件内容
  287. with open('xppcids.txt', 'r') as file:
  288. lines = file.readlines()
  289. # 去除每行末尾的换行符,并用#号链接
  290. self.xp_delete_ids = '#'.join(line.strip() for line in lines)
  291. self.detail_logger.debug(f"选品最低价: {self.min_price}\n"
  292. f"选品最高价: {self.max_price}\n"
  293. f"选品排序模式: {self.sort_mode}\n"
  294. f"选品停止条件: {self.stop_condition}\n"
  295. f"选品成功数量配置: {self.success_count}\n"
  296. f"选品扫描商品数量: {self.scan_count}\n"
  297. f"选品接口每页请求数量: {self.page_size}\n"
  298. f"选品接口暂停时间(秒): {self.pause_time}\n"
  299. f"选品接口最大请求多少页: {self.max_page}\n"
  300. f"选品商品参考价调整系数%: {self.ref_price_adjust}\n"
  301. f"选品商品扫货价调整系数%: {self.sweep_price_adjust}\n"
  302. f"选品API接口需要短信验证时,下次选品暂停时长(秒): {self.needed_msg_check_pause_time}\n"
  303. f"选品API接口需要短信验证时,尝试几次后仍异常则退出: {self.needed_msg_check_try_times}\n"
  304. f"选品剔除的ids列表: {self.xp_delete_ids}\n")
  305. return True