抖音直播间(web版)弹幕抓取

This commit is contained in:
耿伦伦
2021-11-28 00:05:59 +08:00
commit 4ea37b0a65
21 changed files with 7215 additions and 0 deletions

13
messages/Base.py Normal file
View File

@ -0,0 +1,13 @@
class Base:
instance = None
def set_payload(self, payload):
self.instance.ParseFromString(payload)
def user(self):
return self.instance.user
def __str__(self):
pass

0
messages/__init__.py Normal file
View File

11
messages/chat.py Normal file
View File

@ -0,0 +1,11 @@
import time
from protobuf import message_pb2
from messages.base import Base
class ChatMessage(Base):
def __init__(self):
self.instance = message_pb2.ChatMessage()
def __str__(self):
return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + '【发言】' + self.user().nickname + ': ' + self.instance.content

11
messages/gift.py Normal file
View File

@ -0,0 +1,11 @@
import time
from protobuf import message_pb2
from messages.base import Base
class GiftMessage(Base):
def __init__(self):
self.instance = message_pb2.GiftMessage()
def __str__(self):
return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + '【送礼】' + self.instance.common.describe

11
messages/like.py Normal file
View File

@ -0,0 +1,11 @@
import time
from protobuf import message_pb2
from messages.base import Base
class LikeMessage(Base):
def __init__(self):
self.instance = message_pb2.LikeMessage()
def __str__(self):
return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + '【点赞】' + self.user().nickname + ' 点赞了直播间(' + str(self.instance.count) + '连赞)'

14
messages/member.py Normal file
View File

@ -0,0 +1,14 @@
import time
from protobuf import message_pb2
from messages.base import Base
class MemberMessage(Base):
def __init__(self):
self.instance = message_pb2.MemberMessage()
def __str__(self):
template = self.instance.common.displayText.defaultPattern
nickname = self.user().nickname
return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + '【进入直播间】' + template.replace('{0:user}', nickname).replace('{1:string}', '')

11
messages/roomuserseq.py Normal file
View File

@ -0,0 +1,11 @@
import time
from protobuf import message_pb2
from messages.base import Base
class RoomUserSeqMessage(Base):
def __init__(self):
self.instance = message_pb2.RoomUserSeqMessage()
def __str__(self):
return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + '【观看人数】' + self.instance.totalUserStr

11
messages/social.py Normal file
View File

@ -0,0 +1,11 @@
import time
from protobuf import message_pb2
from messages.base import Base
class SocialMessage(Base):
def __init__(self):
self.instance = message_pb2.SocialMessage()
def __str__(self):
return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + '【关注】' + self.user().nickname + ' 关注了主播'

67
messages/utils.py Normal file
View File

@ -0,0 +1,67 @@
from protobuf import message_pb2
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 colorama import init, Fore
# define colors
RED = Fore.RED
GREEN = Fore.GREEN
BLUE = Fore.BLUE
CYAN = Fore.CYAN
MAGENTA = Fore.MAGENTA
YELLOW = Fore.YELLOW
WHITE = Fore.WHITE
RESET = Fore.RESET
init()
def unpackMsgBin(filepath):
response = message_pb2.Response()
try:
with open(filepath, 'rb') as f:
response.ParseFromString(f.read())
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)
print(f"\n{RED}[+] {member_message} {RESET}")
elif message.method == 'WebcastSocialMessage':
social_message = SocialMessage()
social_message.set_payload(message.payload)
print(f"\n{GREEN}[+] {social_message} {RESET}")
elif message.method == 'WebcastChatMessage':
chat_message = ChatMessage()
chat_message.set_payload(message.payload)
print(f"\n{BLUE}[+] {chat_message} {RESET}")
elif message.method == 'WebcastLikeMessage':
like_message = LikeMessage()
like_message.set_payload(message.payload)
print(f"\n{CYAN}[+] {like_message} {RESET}")
elif message.method == 'WebcastGiftMessage':
gift_message = GiftMessage()
gift_message.set_payload(message.payload)
print(f"\n{MAGENTA}[+] {gift_message} {RESET}")
elif message.method == 'WebcastRoomUserSeqMessage':
room_user_seq_message = RoomUserSeqMessage()
room_user_seq_message.set_payload(message.payload)
print(f"\n{YELLOW}[+] {room_user_seq_message} {RESET}")
except Exception as e:
print(e)