127 lines
3.9 KiB
Python
127 lines
3.9 KiB
Python
# -*- coding: utf-8 -*-
|
||
|
||
import urllib
|
||
import webview
|
||
# 假设 get_cookie 函数在这个文件中
|
||
# 确保 获取cookie.py 文件已更新,特别是清理 '|' 字符的部分
|
||
from 获取cookie import get_cookie # 导入 get_cookie 函数
|
||
import os
|
||
import re
|
||
import sqlite3
|
||
import sys
|
||
import json
|
||
import time
|
||
import pickle
|
||
import requests
|
||
from datetime import datetime
|
||
import logging
|
||
import random
|
||
import websocket
|
||
from urllib.parse import unquote
|
||
import gzip
|
||
from protobuf.douyin import *
|
||
import execjs
|
||
import hashlib
|
||
import urllib.parse
|
||
from threading import Thread
|
||
import urllib3
|
||
|
||
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
||
session = requests.session()
|
||
|
||
# ... 已有代码 ...
|
||
|
||
class DouyinLiveWebFetcher:
|
||
def __init__(self, live_url, roomId, Cookie, account_url_part):
|
||
self.live_url = live_url
|
||
self.roomId = roomId
|
||
self.Cookie = Cookie
|
||
self.account_url_part = account_url_part
|
||
self.ws = None # 用于存储 WebSocket 实例
|
||
self.is_running = False # 用于跟踪监听状态
|
||
|
||
# 启动
|
||
def start(self):
|
||
self.is_running = True
|
||
self._connectWebSocket()
|
||
|
||
# 结束
|
||
def stop(self):
|
||
if self.is_running:
|
||
self.is_running = False
|
||
if self.ws:
|
||
self.ws.close() # 关闭 WebSocket 连接
|
||
print(f"停止监听账号: {self.account_url_part}")
|
||
|
||
def _connectWebSocket(self):
|
||
"""
|
||
连接抖音直播间websocket服务器,请求直播间数据
|
||
"""
|
||
try:
|
||
self.ws = websocket.WebSocketApp(
|
||
url="your_websocket_url", # 替换为实际的 WebSocket URL
|
||
on_open=self._wsOnOpen,
|
||
on_message=self._wsOnMessage,
|
||
on_error=self._wsOnError,
|
||
on_close=self._wsOnClose
|
||
)
|
||
self.ws.run_forever()
|
||
except Exception as e:
|
||
print(f"连接 WebSocket 出错: {e}")
|
||
raise # 重新抛出异常,以便上层处理
|
||
|
||
# ... 已有代码 ...
|
||
|
||
class Api:
|
||
def __init__(self):
|
||
self.monitor_instances = {} # 用于存储监听实例
|
||
|
||
# ... 已有代码 ...
|
||
|
||
# 监控账号
|
||
def monitor_account(self, url_part, username):
|
||
try:
|
||
# 假设这里获取到 live_url、roomId 和 Cookie
|
||
live_url = "your_live_url"
|
||
roomId = "your_roomId"
|
||
Cookie = "your_cookie"
|
||
fetcher = DouyinLiveWebFetcher(live_url, roomId, Cookie, url_part)
|
||
self.monitor_instances[url_part] = fetcher
|
||
thread = Thread(target=fetcher.start)
|
||
thread.start()
|
||
return True
|
||
except Exception as e:
|
||
print(f"启动监听出错: {e}")
|
||
return False
|
||
|
||
# 停止监听
|
||
def stop_monitoring(self, url_part):
|
||
"""
|
||
停止指定 url_part 账号的监听。
|
||
参数: url_part (str) - 要停止监听的账号的 url_part
|
||
返回: bool - 成功停止返回 True,失败返回 False
|
||
"""
|
||
try:
|
||
if url_part in self.monitor_instances:
|
||
fetcher = self.monitor_instances[url_part]
|
||
fetcher.stop()
|
||
del self.monitor_instances[url_part]
|
||
return True
|
||
return False
|
||
except Exception as e:
|
||
print(f"停止监听出错: {e}")
|
||
return False
|
||
|
||
# ... 已有代码 ...
|
||
|
||
if __name__ == '__main__':
|
||
# ... 已有代码 ...
|
||
api = Api()
|
||
|
||
window_html = os.path.join(run_path, 'index', 'live-management.html')
|
||
# 在 create_window 中设置 api 对象,以便 JS 访问
|
||
window = webview.create_window('直播管理系统', window_html, js_api=api, min_size=(800, 600))
|
||
|
||
# 启动 webview。启动后,界面将显示。
|
||
# live-management.html 中的 JS 代码应在 DOM 准备就绪且 pywebview api 可用后调用 get_initial_accounts()
|
||
webview.start(debug=True) |