Compare commits
2 Commits
56ba6bd562
...
1da3f446a8
| Author | SHA1 | Date | |
|---|---|---|---|
| 1da3f446a8 | |||
| 49fc606c33 |
89
content.py
89
content.py
@ -1,38 +1,93 @@
|
|||||||
import aiohttp
|
import asyncio
|
||||||
|
import re
|
||||||
|
import time
|
||||||
|
|
||||||
|
import httpx
|
||||||
|
import pymysql
|
||||||
|
|
||||||
base_url = "https://dm.video.qq.com/barrage/base/"
|
base_url = "https://dm.video.qq.com/barrage/base/"
|
||||||
dm_url = "https://dm.video.qq.com/barrage/segment/p0047eb164c/t/v1/0/30000"
|
dm_url = "https://dm.video.qq.com/barrage/segment/p0047eb164c/t/v1/0/30000"
|
||||||
|
|
||||||
|
|
||||||
async def getTxVideoData(url, video_id):
|
async def getTxVideoData(url, video_id):
|
||||||
url = "https://example.com/api/data.json" # 替换成你要请求的JSON数据的URL
|
# 使用正则表达式获取视频ID p0047eb164c https://v.qq.com/x/cover/mzc00200pppnnhl/p0047eb164c.html
|
||||||
|
global connection
|
||||||
|
global cursor
|
||||||
|
vid = re.findall(r'/([a-zA-Z0-9]+)\.html', url)[0]
|
||||||
|
print(vid)
|
||||||
|
url = f"https://dm.video.qq.com/barrage/base/{vid}" # 替换成你要请求的JSON数据的URL
|
||||||
json_data = await fetch_json(url)
|
json_data = await fetch_json(url)
|
||||||
if json_data:
|
if json_data:
|
||||||
# 在这里处理解析后的JSON数据
|
# 在这里处理解析后的JSON数据
|
||||||
print(json_data)
|
span = json_data['segment_span']
|
||||||
|
print(span)
|
||||||
|
items = json_data["segment_index"].items()
|
||||||
|
page = len(items)
|
||||||
|
# 最大数据索引
|
||||||
|
max_data_index = (page - 1) * 30000
|
||||||
|
# 页数
|
||||||
|
print(page)
|
||||||
|
# 获取的数据量
|
||||||
|
data_num = 5000
|
||||||
|
# 每页获取的数据量
|
||||||
|
number_per_page = int(data_num / page)
|
||||||
|
print(number_per_page)
|
||||||
|
total_num = 0
|
||||||
|
# 连接数据库
|
||||||
|
try:
|
||||||
|
# 连接数据库
|
||||||
|
connection = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root', db='dm')
|
||||||
|
cursor = connection.cursor()
|
||||||
|
except pymysql.Error as e:
|
||||||
|
# 异常 连接失败
|
||||||
|
print("数据库连接失败")
|
||||||
|
# finally:
|
||||||
|
# # 关闭数据库连接
|
||||||
|
# if connection:
|
||||||
|
# connection.close()
|
||||||
|
for i in range(0, page):
|
||||||
|
data_url_suffix = json_data["segment_index"][str(i * 30000)]["segment_name"]
|
||||||
|
data_url = f"https://dm.video.qq.com/barrage/segment/{vid}/{data_url_suffix}"
|
||||||
|
print(data_url)
|
||||||
|
data_json = await fetch_json(data_url)
|
||||||
|
if data_json:
|
||||||
|
barrage_list = data_json["barrage_list"]
|
||||||
|
data_len = len(barrage_list)
|
||||||
|
timestamp = int(time.time())
|
||||||
|
# 遍历barrage_list
|
||||||
|
sql = "INSERT INTO `danmaku_list` (`id`, `type`, `text`, `color`, `size`, `videotime`, `ip`, `time`) VALUES "
|
||||||
|
data_index = 0
|
||||||
|
for barrage in barrage_list:
|
||||||
|
content = barrage["content"].replace("\\", "").replace("'", "\\'")
|
||||||
|
time_offset = float(barrage["time_offset"]) / 1000
|
||||||
|
if data_index == 0:
|
||||||
|
sql += f"('{video_id}', 'right', '{content}','#FFFFFF', '27.5px', {time_offset}, '127.0.0.1', {timestamp})"
|
||||||
|
else:
|
||||||
|
sql += f",('{video_id}', 'right', '{content}','#FFFFFF', '27.5px', {time_offset}, '127.0.0.1', {timestamp})"
|
||||||
|
data_index += 1
|
||||||
|
total_num += data_len
|
||||||
|
# print(sql)
|
||||||
|
# cursor.execute(sql)
|
||||||
|
# connection.commit()
|
||||||
|
|
||||||
|
print(f"总数据量:{total_num}")
|
||||||
|
|
||||||
|
|
||||||
async def fetch_json(url):
|
async def fetch_json(url):
|
||||||
async with aiohttp.ClientSession() as session:
|
async with httpx.AsyncClient() as client:
|
||||||
async with session.get(url) as response:
|
response = await client.get(url)
|
||||||
if response.status == 200:
|
return response.json()
|
||||||
data = await response.json()
|
|
||||||
return data
|
|
||||||
else:
|
|
||||||
print(f"Failed to fetch data. Status code: {response.status}")
|
|
||||||
return None
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
url = "https://v.qq.com/x/cover/mzc00200pppnnhl/j00468dc2og.html"
|
||||||
url = "https://v.qq.com/x/cover/mzc00200pppnnhl/p0047eb164c.html"
|
|
||||||
if "v.qq.com" in url:
|
if "v.qq.com" in url:
|
||||||
# 调用 v.qq.com 对应的接口
|
# 调用 v.qq.com 对应的接口
|
||||||
await getTxVideoData(url, "p0047eb164c")
|
asyncio.run(getTxVideoData(url, "j00468dc2og"))
|
||||||
|
|
||||||
# 检查是否存在 "rainss.cn"
|
# 检查是否存在 "rainss.cn"
|
||||||
elif "rainss.cn" in url:
|
elif "rainss.cn" in url:
|
||||||
# 调用 rainss.cn 对应的接口
|
# 调用 rainss.cn 对应的接口
|
||||||
print("调用 rainss.cn 的接口")
|
print("调用 rainss.cn 的接口")
|
||||||
|
|
||||||
# 检查是否存在 "allms.cn"
|
# 检查是否存在 "allms.cn"
|
||||||
elif "allms.cn" in url:
|
elif "allms.cn" in url:
|
||||||
# 调用 allms.cn 对应的接口
|
# 调用 allms.cn 对应的接口
|
||||||
@ -40,4 +95,4 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
# 如果都不匹配
|
# 如果都不匹配
|
||||||
else:
|
else:
|
||||||
print("未匹配到任何子字符串")
|
print("未匹配到任何子字符串")
|
||||||
|
|||||||
32
dm.py
32
dm.py
@ -54,18 +54,24 @@ class TableWidgetExample(QMainWindow):
|
|||||||
self.connection = None
|
self.connection = None
|
||||||
self.cursor = None
|
self.cursor = None
|
||||||
self.is_connect = False
|
self.is_connect = False
|
||||||
|
self.logger_area = None
|
||||||
|
|
||||||
self.initLogger()
|
self.initLogger()
|
||||||
self.initUI()
|
self.initUI()
|
||||||
|
|
||||||
def initUI(self):
|
def initUI(self):
|
||||||
self.setWindowTitle("采集")
|
self.setWindowTitle("采集")
|
||||||
self.setGeometry(100, 100, 800, 600)
|
self.setGeometry(100, 100, 1000, 600)
|
||||||
|
|
||||||
central_widget = QWidget()
|
central_widget = QWidget()
|
||||||
center_layout = QVBoxLayout(central_widget)
|
central_layout = QHBoxLayout(central_widget)
|
||||||
|
# central_layout.setSpacing(0)
|
||||||
self.setCentralWidget(central_widget)
|
self.setCentralWidget(central_widget)
|
||||||
|
|
||||||
|
left_widget = QWidget()
|
||||||
|
left_layout = QVBoxLayout(left_widget)
|
||||||
|
left_layout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
central_layout.addWidget(left_widget, 3)
|
||||||
|
|
||||||
top_widget = QWidget()
|
top_widget = QWidget()
|
||||||
top_layout = QVBoxLayout(top_widget)
|
top_layout = QVBoxLayout(top_widget)
|
||||||
|
|
||||||
@ -79,7 +85,7 @@ class TableWidgetExample(QMainWindow):
|
|||||||
header.setSectionResizeMode(QtWidgets.QHeaderView.Stretch)
|
header.setSectionResizeMode(QtWidgets.QHeaderView.Stretch)
|
||||||
|
|
||||||
top_layout.addWidget(self.table)
|
top_layout.addWidget(self.table)
|
||||||
center_layout.addWidget(top_widget)
|
left_layout.addWidget(top_widget)
|
||||||
|
|
||||||
# 下部分布局
|
# 下部分布局
|
||||||
bottom_widget = QWidget()
|
bottom_widget = QWidget()
|
||||||
@ -126,7 +132,21 @@ class TableWidgetExample(QMainWindow):
|
|||||||
action_layout.addWidget(button_execute)
|
action_layout.addWidget(button_execute)
|
||||||
bottom_layout.addLayout(action_layout)
|
bottom_layout.addLayout(action_layout)
|
||||||
|
|
||||||
center_layout.addWidget(bottom_widget)
|
left_layout.addWidget(bottom_widget)
|
||||||
|
|
||||||
|
right_widget = QWidget()
|
||||||
|
right_layout = QVBoxLayout(right_widget)
|
||||||
|
right_layout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
central_layout.addWidget(right_widget, 1)
|
||||||
|
|
||||||
|
logger_widget = QWidget()
|
||||||
|
# logger_widget.setFixedHeight(200)
|
||||||
|
logger_layout = QVBoxLayout(logger_widget)
|
||||||
|
self.logger_area = QTextEdit()
|
||||||
|
self.logger_area.setPlaceholderText("日志...")
|
||||||
|
self.logger_area.setReadOnly(True)
|
||||||
|
logger_layout.addWidget(self.logger_area)
|
||||||
|
right_layout.addWidget(logger_widget)
|
||||||
|
|
||||||
def initLogger(self):
|
def initLogger(self):
|
||||||
logging.basicConfig(level=logging.DEBUG)
|
logging.basicConfig(level=logging.DEBUG)
|
||||||
@ -278,11 +298,11 @@ class TableWidgetExample(QMainWindow):
|
|||||||
else:
|
else:
|
||||||
print("未匹配到任何子字符串")
|
print("未匹配到任何子字符串")
|
||||||
|
|
||||||
|
|
||||||
def generate_insert_sql(self, data):
|
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')"
|
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
|
return sql
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
app = QApplication(sys.argv)
|
app = QApplication(sys.argv)
|
||||||
window = TableWidgetExample()
|
window = TableWidgetExample()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user