You've already forked Douyin_Web_Live
尝试大改,可读性有点差的版本,基本做到能实时处理弹幕
This commit is contained in:
0
handler/__init__.py
Normal file
0
handler/__init__.py
Normal file
3
handler/common.py
Normal file
3
handler/common.py
Normal file
@ -0,0 +1,3 @@
|
||||
from queue import SimpleQueue
|
||||
|
||||
MESSAGE_QUEUE = SimpleQueue()
|
15
handler/http_server.py
Normal file
15
handler/http_server.py
Normal file
@ -0,0 +1,15 @@
|
||||
from flask import Flask, request, Response
|
||||
from handler.common import MESSAGE_QUEUE
|
||||
import logging
|
||||
log = logging.getLogger('werkzeug')
|
||||
log.setLevel(logging.ERROR)
|
||||
|
||||
app = Flask(__name__)
|
||||
app.config['JSON_AS_ASCII'] = False
|
||||
|
||||
|
||||
@app.post("/message")
|
||||
def message_from_mitmproxy():
|
||||
payload = request.data
|
||||
MESSAGE_QUEUE.put(payload)
|
||||
return Response(status=204)
|
67
handler/utils.py
Normal file
67
handler/utils.py
Normal file
@ -0,0 +1,67 @@
|
||||
import os
|
||||
|
||||
from handler.common import MESSAGE_QUEUE
|
||||
from protobuf import message_pb2
|
||||
from protobuf import wss_pb2
|
||||
import gzip
|
||||
from messages.member import MemberMessage
|
||||
from messages.like import LikeMessage
|
||||
from messages.roomuserseq import RoomUserSeqMessage
|
||||
from messages.gift import GiftMessage
|
||||
from messages.social import SocialMessage
|
||||
from messages.chat import ChatMessage
|
||||
from output import OUTPUTER
|
||||
|
||||
def loop_queue():
|
||||
while True:
|
||||
message = MESSAGE_QUEUE.get()
|
||||
if type(message) == str:
|
||||
message = message.encode("UTF-8")
|
||||
try:
|
||||
response = message_pb2.Response()
|
||||
wss = wss_pb2.WssResponse()
|
||||
wss.ParseFromString(message)
|
||||
decompressed = gzip.decompress(wss.data)
|
||||
response.ParseFromString(decompressed)
|
||||
decodeMsg(response.messages)
|
||||
except Exception as e:
|
||||
# 发出去的信息无法解析
|
||||
pass
|
||||
|
||||
def decodeMsg(messages):
|
||||
for message in messages:
|
||||
try:
|
||||
if message.method == 'WebcastMemberMessage':
|
||||
member_message = MemberMessage()
|
||||
member_message.set_payload(message.payload)
|
||||
for output in OUTPUTER:
|
||||
output.member_output(member_message)
|
||||
elif message.method == 'WebcastSocialMessage':
|
||||
social_message = SocialMessage()
|
||||
social_message.set_payload(message.payload)
|
||||
for output in OUTPUTER:
|
||||
output.social_output(social_message)
|
||||
elif message.method == 'WebcastChatMessage':
|
||||
chat_message = ChatMessage()
|
||||
chat_message.set_payload(message.payload)
|
||||
for output in OUTPUTER:
|
||||
output.chat_output(chat_message)
|
||||
elif message.method == 'WebcastLikeMessage':
|
||||
like_message = LikeMessage()
|
||||
like_message.set_payload(message.payload)
|
||||
for output in OUTPUTER:
|
||||
output.like_output(like_message)
|
||||
elif message.method == 'WebcastGiftMessage':
|
||||
gift_message = GiftMessage()
|
||||
gift_message.set_payload(message.payload)
|
||||
for output in OUTPUTER:
|
||||
output.gift_output(gift_message)
|
||||
elif message.method == 'WebcastRoomUserSeqMessage':
|
||||
room_user_seq_message = RoomUserSeqMessage()
|
||||
room_user_seq_message.set_payload(message.payload)
|
||||
for output in OUTPUTER:
|
||||
output.userseq_output(room_user_seq_message)
|
||||
else:
|
||||
...
|
||||
except Exception as e:
|
||||
print(e)
|
Reference in New Issue
Block a user