Some scripts.
This commit is contained in:
parent
ac6068e13f
commit
3552281a37
3
content.py
Normal file
3
content.py
Normal 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
89
demo.py
@ -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
88
dm.py
@ -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)
|
||||
|
||||
21
gotify.py
21
gotify.py
@ -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
43
main.py
@ -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())
|
||||
Loading…
Reference in New Issue
Block a user