Some scripts.

This commit is contained in:
luming 2023-09-19 15:04:00 +08:00
parent ac6068e13f
commit 3552281a37
5 changed files with 82 additions and 162 deletions

3
content.py Normal file
View File

@ -0,0 +1,3 @@
base_url = "https://dm.video.qq.com/barrage/base/"
dm_url = "https://dm.video.qq.com/barrage/segment/p0047eb164c/t/v1/0/30000"

89
demo.py
View File

@ -1,89 +0,0 @@
import sys
from functools import partial
from PySide6.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QPushButton, QVBoxLayout, \
QWidget, QTextEdit, QHeaderView, QHBoxLayout
class TableWidgetExample(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("QTableWidget Example")
self.setGeometry(100, 100, 800, 600)
central_widget = QWidget()
center_layout = QVBoxLayout(central_widget)
self.setCentralWidget(central_widget)
top_widget = QWidget()
top_layout = QVBoxLayout(top_widget)
table = QTableWidget()
table.setColumnCount(3) # Add one more column for buttons
table.setHorizontalHeaderLabels(["URL", "状态", "操作"])
header = table.horizontalHeader()
header.setSectionResizeMode(QHeaderView.ResizeToContents)
header.setSectionResizeMode(0, QHeaderView.Stretch)
data = [
["https://baidu.com", "队列中"],
["https://google.com", "队列中"],
["https://rainss.cn", "队列中"]
]
table.setRowCount(len(data)) # Remove extra row
for row, rowData in enumerate(data):
for col, value in enumerate(rowData):
item = QTableWidgetItem(value)
table.setItem(row, col, item)
# Add buttons in the last column
button_layout = QHBoxLayout()
pause_button = QPushButton("暂停")
pause_button.setMinimumHeight(40) # Set button width
pause_button.setMinimumWidth(60) # Set button width
delete_button = QPushButton("删除")
delete_button.setMinimumHeight(40) # Set button width
delete_button.setMinimumWidth(60) # Set button width
pause_button.clicked.connect(partial(self.pause_button_clicked, row))
delete_button.clicked.connect(partial(self.delete_button_clicked, row))
button_layout.addWidget(pause_button)
button_layout.addWidget(delete_button)
button_container = QWidget()
button_container.setLayout(button_layout)
table.setCellWidget(row, 2, button_container)
top_layout.addWidget(table)
center_layout.addWidget(top_widget)
bottom_widget = QWidget()
bottom_widget.setFixedHeight(300)
bottom_layout = QVBoxLayout(bottom_widget)
input_text = QTextEdit()
bottom_layout.addWidget(input_text)
center_layout.addWidget(bottom_widget)
def pause_button_clicked(self, row):
print(f"Paused row {row}")
def delete_button_clicked(self, row):
print(f"Deleted row {row}")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = TableWidgetExample()
window.show()
sys.exit(app.exec())

88
dm.py
View File

@ -1,6 +1,10 @@
import hashlib
import logging
import random
import socket
import sys
import threading
import time
from urllib.parse import urlparse
import pymysql
@ -9,6 +13,31 @@ from PySide6.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWid
QTextEdit, QPushButton, QHBoxLayout, QLineEdit, QMessageBox, QSizePolicy
def generate_random_hex_color():
# 生成随机的R、G、B分量
r = random.randint(0, 255)
g = random.randint(0, 255)
b = random.randint(0, 255)
# 将R、G、B分量转换为16进制并保证输出的字符串长度为2
hex_r = format(r, '02x')
hex_g = format(g, '02x')
hex_b = format(b, '02x')
# 拼接16进制颜色代码
hex_color = "#" + hex_r + hex_g + hex_b
return hex_color
def show_completion_message():
msg = QMessageBox()
msg.setIcon(QMessageBox.Information)
msg.setWindowTitle("采集完成")
msg.setText("没有需要采集的任务。")
msg.exec()
class TableWidgetExample(QMainWindow):
def __init__(self):
super().__init__()
@ -26,14 +55,6 @@ class TableWidgetExample(QMainWindow):
self.cursor = None
self.is_connect = False
# self.button_add = None
# self.button_execute = None
# self.input_text = None
# self.connection_host = None
# self.connection_port = None
# self.connection_user = None
# self.connection_pwd = None
self.initLogger()
self.initUI()
@ -101,6 +122,7 @@ class TableWidgetExample(QMainWindow):
button_add.clicked.connect(self.add_data_to_table)
action_layout.addWidget(button_add)
button_execute = QPushButton("开始采集")
button_execute.clicked.connect(self.start_collection)
action_layout.addWidget(button_execute)
bottom_layout.addLayout(action_layout)
@ -181,7 +203,7 @@ class TableWidgetExample(QMainWindow):
continue
row_position = self.table.rowCount() # 获取下一个可用的行索引
self.table.insertRow(row_position)
status = QTableWidgetItem("队列")
status = QTableWidgetItem("等待")
self.table.setItem(row_position, 0, url)
self.table.setItem(row_position, 1, status)
@ -196,6 +218,54 @@ class TableWidgetExample(QMainWindow):
except Exception as e:
return False
def start_collection(self):
# 遍历表格并查找状态为 "队列中" 的数据行
rows_to_collect = []
for row in range(self.table.rowCount()):
status_item = self.table.item(row, 1)
if status_item is not None and status_item.text() == "等待中":
rows_to_collect.append(row)
if not rows_to_collect:
show_completion_message()
return # 没有需要采集的数据
# 启动多线程来处理队列中的 URL 数据
for row in rows_to_collect:
url_item = self.table.item(row, 0)
url = url_item.text()
thread = threading.Thread(target=self.collect_data, args=(row, url))
thread.start()
def collect_data(self, row, url):
# 模拟数据采集
self.update_status(row, "采集中")
time.sleep(3) # 模拟耗时操作
self.get_video_dm_data(url)
# 更新状态为采集完成
self.update_status(row, "采集完成")
def update_status(self, row, status):
item = QTableWidgetItem(status)
self.table.setItem(row, 1, item)
def get_video_dm_data(self, url):
# 判断url类型
md5_hash = hashlib.md5()
md5_hash.update(url.encode('utf-8'))
encrypted_text = md5_hash.hexdigest()
# 取出MD5加密后的后20位数
last_20_chars = encrypted_text[-20:]
# 创建新的字符串加上空格P
video_id = last_20_chars + " P"
self.logger.debug("video_id: %s", video_id)
def generate_insert_sql(self, data):
sql = "INSERT INTO `danmaku_list` (`id`, `cid`, `type`, `text`, `color`, `size`, `videotime`, `ip`, `time`) VALUES ('de9d5e3f5b7f9ea2197d35f383530643', NULL, 'right', '不错哦', '#FFFFFF', '27.5px', '48.275', '58.62.32.191', '1666319003')"
return sql
if __name__ == "__main__":
app = QApplication(sys.argv)

View File

@ -1,21 +0,0 @@
# 发送通知信息类
import requests
class Notify:
# 服务器地址
url = 'https://gotify.rainss.cn/'
# 验证access_token
token = 'Ai_BR85._DZJL6L'
def sendMessage(self, title, message):
s = requests.Session()
params = {
'token': self.token,
}
files = {
'title': (None, title),
'message': (None, message),
'priority': (None, '5'),
}
s.post('https://gotify.rainss.cn/message', params=params, files=files)

43
main.py
View File

@ -1,43 +0,0 @@
from PySide6 import QtWidgets
from PySide6.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget
import sys
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("表格内容自动占满一整行")
central_widget = QWidget()
self.setCentralWidget(central_widget)
layout = QVBoxLayout(central_widget)
self.table_widget = QTableWidget()
layout.addWidget(self.table_widget)
# 设置列数和行数
self.table_widget.setColumnCount(3)
self.table_widget.setRowCount(2) # 两行
# 设置伸展性
self.table_widget.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch)
# 添加数据到表格中
self.add_data_to_table()
def add_data_to_table(self):
data = [("数据1", "数据2", "数据3"),
("数据4", "数据5", "数据6")]
for row, row_data in enumerate(data):
for col, cell_data in enumerate(row_data):
item = QTableWidgetItem(cell_data)
self.table_widget.setItem(row, col, item)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MyWindow()
window.setGeometry(100, 100, 600, 400)
window.show()
sys.exit(app.exec())