main.py 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. import sys
  2. import time
  3. import requests
  4. import sqlite3
  5. from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLineEdit, QPushButton, QLabel, QTextEdit, QMessageBox, \
  6. QHBoxLayout
  7. from PyQt5.QtCore import QThread, pyqtSignal
  8. class RequestThread(QThread):
  9. # 定义一个信号,用于传递请求结果
  10. result_signal = pyqtSignal(str)
  11. def __init__(self, category_code, session_info, parent=None):
  12. super().__init__(parent)
  13. self.category_code = category_code
  14. self.session_info = session_info
  15. def run(self):
  16. my_headers = {
  17. "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36",
  18. "Host": "buff.163.com",
  19. "Referer": "https://buff.163.com/market/?game=csgo",
  20. "X-Requested-With": "XMLHttpRequest",
  21. 'Cookie': f'session={self.session_info}'
  22. }
  23. page_num = 1
  24. page_i = 1
  25. print("开始发送请求...") # 添加开始请求的提示
  26. while page_i <= page_num:
  27. # 构造请求URL
  28. url = f"https://buff.163.com/api/market/goods?game=csgo&page_num={page_i}&page_size=95&itemset={self.category_code}&tab=selling&_=1745160625260"
  29. # 发送GET请求
  30. try:
  31. response = requests.get(headers=my_headers, url=url)
  32. if response.status_code == 200:
  33. print(f"第 {page_i} 页请求成功") # 添加请求成功的提示
  34. if page_i == 1:
  35. page_num = response.json()['data']['total_page']
  36. page_i += 1
  37. # 遍历 response.json()['data']['items']
  38. for item in response.json()['data']['items']:
  39. # 获取每个item的goods_id
  40. goods_id = item['id']
  41. # 通过信号传递结果
  42. self.result_signal.emit(f"{goods_id}")
  43. time.sleep(20)
  44. else:
  45. print(f"第 {page_i} 页请求失败: {response}") # 添加请求失败的提示
  46. except Exception as e:
  47. print(f"第 {page_i} 页请求失败: {e}") # 添加请求失败的提示
  48. # 在while循环结束后发出完成信号
  49. self.result_signal.emit("请求完成")
  50. class BuffApp(QWidget):
  51. def __init__(self):
  52. super().__init__()
  53. self.initUI()
  54. self.load_data()
  55. def initUI(self):
  56. # 设置窗口标题
  57. self.setWindowTitle('获取buff排除商品id')
  58. # 设置窗口尺寸为500x500
  59. self.setFixedSize(500, 500)
  60. # 创建垂直布局
  61. layout = QVBoxLayout()
  62. # 创建类别编码标签
  63. category_code_label = QLabel('收藏品类别编码:', self)
  64. layout.addWidget(category_code_label)
  65. # 创建类别编码输入框
  66. self.category_code_input = QLineEdit(self)
  67. self.category_code_input.setPlaceholderText('请输入类别编码')
  68. layout.addWidget(self.category_code_input)
  69. # 创建session信息标签
  70. session_label = QLabel('session信息:', self)
  71. layout.addWidget(session_label)
  72. # 创建session信息输入框
  73. self.session_input = QLineEdit(self)
  74. self.session_input.setPlaceholderText('请输入session信息')
  75. layout.addWidget(self.session_input)
  76. # 创建水平布局用于放置按钮
  77. button_layout = QHBoxLayout()
  78. # 创建请求按钮
  79. self.request_button = QPushButton('发送请求', self)
  80. self.request_button.clicked.connect(self.send_request1)
  81. button_layout.addWidget(self.request_button)
  82. # 创建停止按钮
  83. self.stop_button = QPushButton('停止', self)
  84. self.stop_button.clicked.connect(self.stop_request)
  85. button_layout.addWidget(self.stop_button)
  86. # 将按钮布局添加到主布局中
  87. layout.addLayout(button_layout)
  88. # 创建文本显示区域
  89. self.text_area = QTextEdit(self)
  90. # self.text_area.setReadOnly(True) # 设置为只读
  91. layout.addWidget(self.text_area)
  92. # 创建保存按钮
  93. self.save_button = QPushButton('保存', self)
  94. self.save_button.clicked.connect(self.save_data)
  95. button_layout.addWidget(self.save_button)
  96. # 设置布局
  97. self.setLayout(layout)
  98. def save_data(self):
  99. category_code = self.category_code_input.text()
  100. session_info = self.session_input.text()
  101. # 连接SQLite数据库
  102. conn = sqlite3.connect('buff_data.db')
  103. cursor = conn.cursor()
  104. # 创建表(如果不存在)
  105. cursor.execute('''CREATE TABLE IF NOT EXISTS settings
  106. (id INTEGER PRIMARY KEY, category_code TEXT, session_info TEXT)''')
  107. # 清空表并插入新数据
  108. cursor.execute('DELETE FROM settings')
  109. cursor.execute('INSERT INTO settings (category_code, session_info) VALUES (?, ?)', (category_code, session_info))
  110. # 提交更改并关闭连接
  111. conn.commit()
  112. conn.close()
  113. QMessageBox.information(self, "保存成功", "数据已成功保存!")
  114. def load_data(self):
  115. # 连接SQLite数据库
  116. conn = sqlite3.connect('buff_data.db')
  117. cursor = conn.cursor()
  118. # 创建表(如果不存在)
  119. cursor.execute('''CREATE TABLE IF NOT EXISTS settings
  120. (id INTEGER PRIMARY KEY, category_code TEXT, session_info TEXT)''')
  121. # 查询数据
  122. cursor.execute('SELECT category_code, session_info FROM settings LIMIT 1')
  123. result = cursor.fetchone()
  124. if result:
  125. self.category_code_input.setText(result[0])
  126. self.session_input.setText(result[1])
  127. # 关闭连接
  128. conn.close()
  129. def send_request1(self):
  130. category_code = self.category_code_input.text()
  131. session_info = self.session_input.text()
  132. # 创建并启动线程
  133. self.request_thread = RequestThread(category_code, session_info)
  134. self.request_thread.result_signal.connect(self.update_text_area)
  135. self.request_thread.start()
  136. def stop_request(self):
  137. if hasattr(self, 'request_thread') and self.request_thread.isRunning():
  138. self.request_thread.terminate()
  139. self.request_thread.wait()
  140. QMessageBox.information(self, "停止", "请求已停止!")
  141. def update_text_area(self, text):
  142. # 更新UI
  143. if text == "请求完成":
  144. QMessageBox.information(self, "请求完成", "所有请求已完成!")
  145. else:
  146. self.text_area.append(text)
  147. QApplication.processEvents() # 强制更新 UI
  148. if __name__ == '__main__':
  149. app = QApplication(sys.argv)
  150. ex = BuffApp()
  151. ex.show()
  152. sys.exit(app.exec_())