From b35c692998ff34cb49e5d35e207956c3a77dca6f Mon Sep 17 00:00:00 2001 From: sealday Date: Fri, 5 Apr 2024 17:04:09 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E6=B7=BB=E5=8A=A0=E5=8F=82=E8=80=83?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- refs/不登陆弹幕备份.py | 80 ++++++++++++++++++++++++++++++++++ refs/直播间信息获取备份.py | 44 +++++++++++++++++++ refs/陌陌原始消息备份.py | 34 +++++++++++++++ refs/陌陌发送弹幕备份.py | 35 +++++++++++++++ refs/陌陌登陆弹幕备份.py | 88 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 281 insertions(+) create mode 100644 refs/不登陆弹幕备份.py create mode 100644 refs/直播间信息获取备份.py create mode 100644 refs/陌陌原始消息备份.py create mode 100644 refs/陌陌发送弹幕备份.py create mode 100644 refs/陌陌登陆弹幕备份.py diff --git a/refs/不登陆弹幕备份.py b/refs/不登陆弹幕备份.py new file mode 100644 index 0000000..f7a362e --- /dev/null +++ b/refs/不登陆弹幕备份.py @@ -0,0 +1,80 @@ +import asyncio +import requests +import websockets +import time +import json +from datetime import datetime + +# 构建API请求链接 +room_id = "17066184578990" +timestamp = int(time.time() * 1000) +api_url = f"https://live-api.immomo.com/open/m/room/profile?roomid={room_id}&momoid=&src=m50011&web_uid=11126216061Xazx3TgC&_= {timestamp}" + +# 发起API请求 +response = requests.get(api_url) +data = response.json() +ws_token = data["data"].get("ws_token", "") +umomoid = data["data"]["momoid"] + +async def connect(): + uri = "wss://live-ws.immomo.com/ws/im" + async with websockets.connect(uri) as websocket: + print(f"链接websocket:[{uri}] 完成") + + momoid = umomoid + roomid = room_id + token = f"{ws_token}" + + data = '{{"msg_id":1,"client_time":{0},"type":"Sauth","data":{{"momoid":"{1}","roomid":"{2}","token":"{3}","barType":"NORMAL"}}}}'.format( + timestamp, momoid, roomid, token) + print(data) + + await websocket.send(data) + + print("Send Hello") + + while True: + try: + response = await websocket.recv() + current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') + #print(f"[{current_time}] 收到原始消息 => " + response) + + try: + json_data = json.loads(response) + #print(f"[{current_time}] 收到JSON消息 => ", json_data) + + message_type = json_data['groups'][0]['units'][0]['type'] + + if message_type == "Message": + nick = json_data['groups'][0]['nick'] + text = json_data['groups'][0]['units'][0]['Msg.Message.data']['text'] + print(f"[{current_time}] {nick} : {text}") + elif message_type == "EnterRoom": + text = json_data['groups'][0]['units'][0]['Set.EnterRoom.data']['text'] + print(f"[{current_time}] 有新人: {text}") + elif message_type == "BiliBili": + nick = json_data['groups'][0]['nick'] + text = json_data['groups'][0]['units'][0]['Pay.BiliBili.data']['text'] + print(f"[{current_time}] {nick} : {text}") + elif message_type == "GiftV3": + nick = json_data['groups'][0]['nick'] + text = json_data['groups'][0]['units'][0]['GiftV3.giftV3']['text'] + product_id = json_data['groups'][0]['units'][0]['GiftV3.giftV3']['productId'] + print(f"[{current_time}] 用户: {nick} 送出礼物,内容为: {text},产品ID为: {product_id}") + #else: + # 其他消息类型的处理 + #print(f"[{current_time}] 收到未处理的消息类型: {message_type}") + + except KeyError as e: + print(f"[{current_time}] JSON数据中缺少必要的键:", e) + except json.JSONDecodeError as e: + print(f"[{current_time}] 无法解析为JSON格式: ", e) + + except websockets.exceptions.ConnectionClosedError: + print(f"[{current_time}] 与服务器断开链接") + break + +async def main(): + await connect() + +asyncio.run(main()) diff --git a/refs/直播间信息获取备份.py b/refs/直播间信息获取备份.py new file mode 100644 index 0000000..ddadec4 --- /dev/null +++ b/refs/直播间信息获取备份.py @@ -0,0 +1,44 @@ +import requests +import time + +# API请求链接 +room_id = "17079648294690" +timestamp = int(time.time() * 1000) +print(timestamp) +api_url = f"https://live-api.immomo.com/open/m/room/profile?roomid={room_id}&momoid=&src=m50011&web_uid=11126216061Xazx3TgC&_= {timestamp}" + +# 发起API请求 +response = requests.get(api_url) +data = response.json() + +# 提取信息 + +title = data["data"]["title"] +#anchor_info = data["data"]["anchor_info"] +avatar_url = data["data"]["cover"] +cover_url = data["data"]["cover"] +m3u8 = data["data"]["url"] +m3u81 = data["data"]["revertStream"] +online_users = data["data"]["online"] +nickname = data["data"]["stars"][0]["nickname"] +momoid = data["data"]["momoid"] +# 获取ws_token及其他可显示信息 + +ws_token = data["data"].get("ws_token", "") +socketUrl = data["data"]["socketUrl"] +#live_url = data["data"]["push_stream"] + +# 输出信息 +print("直播间信息:") +print(f"标题:{title}") +print("主播:", nickname) +#print("主播信息:", anchor_info) +print(f"主播头像链接:{avatar_url}") +#print(f"直播间封面链接:{cover_url}") +print(f"在线人数:{online_users}") +print("媒体流:", m3u8) +print("媒体流1:", m3u81) +print("wss:", socketUrl) +print(f"ws_token:{ws_token}") +print(f"momoid:{momoid}") + diff --git a/refs/陌陌原始消息备份.py b/refs/陌陌原始消息备份.py new file mode 100644 index 0000000..875143e --- /dev/null +++ b/refs/陌陌原始消息备份.py @@ -0,0 +1,34 @@ +import asyncio +import websockets + + +async def connect(): + uri = "wss://live-ws.immomo.com/ws/im" + async with websockets.connect(uri) as websocket: + print(f"链接websocket:[{uri}] 完成") + + client_time = "1711123627734" + momoid = "1062302597" + roomid = "15925755150740" + token = "b458d6fd04ee38a9e5330e76a3802df9" + + data = '{{"msg_id":1,"client_time":{0},"type":"Sauth","data":{{"momoid":"{1}","roomid":"{2}","role":6,"isVisitor":false,"token":"{3}","ua":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36"}}}}'.format( + client_time, momoid, roomid, token) + await websocket.send(data) + + print("Send Hello") + + while True: + try: + response = await websocket.recv() + print("收到消息=>" + response) + except websockets.exceptions.ConnectionClosedError: + print("与服务器断开链接") + break + + +async def main(): + await connect() + + +asyncio.run(main()) diff --git a/refs/陌陌发送弹幕备份.py b/refs/陌陌发送弹幕备份.py new file mode 100644 index 0000000..3bbe6b9 --- /dev/null +++ b/refs/陌陌发送弹幕备份.py @@ -0,0 +1,35 @@ +import asyncio +import websockets +import json +import time + +async def connect_and_send_messages(): + uri = "wss://live-ws.immomo.com/ws/im" + async with websockets.connect(uri) as websocket: + print(f"连接websocket:[{uri}] 完成") + + client_time = "1711123627734" + momoid = "1062302597" + roomid = "17066184578990" + token = "b458d6fd04ee38a9e5330e76a3802df9" + + data = '{{"msg_id":1,"client_time":{0},"type":"Sauth","data":{{"momoid":"{1}","roomid":"{2}","role":6,"isVisitor":false,"token":"{3}","ua":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36"}}}}'.format( + client_time, momoid, roomid, token) + await websocket.send(data) + + print("直播间通讯成功") + + msg_id = 3 # 初始化消息的 msg_id + while True: + client_time = str(int(time.time() * 1000)) + message_data = '{{"msg_id":{0},"client_time":{1},"type":"Bili","data":{{"text":"666"}}}}'.format(msg_id, client_time) + await websocket.send(message_data) + print("Send Message:", message_data) + msg_id += 1 # 递增消息的 msg_id + await asyncio.sleep(10) # 每隔10秒发送一次消息 + +async def main(): + connect_task = asyncio.create_task(connect_and_send_messages()) + await connect_task + +asyncio.run(main()) diff --git a/refs/陌陌登陆弹幕备份.py b/refs/陌陌登陆弹幕备份.py new file mode 100644 index 0000000..de33baa --- /dev/null +++ b/refs/陌陌登陆弹幕备份.py @@ -0,0 +1,88 @@ + +import asyncio +import websockets +import time +import json +import datetime + + + + +async def connect(): + uri = "wss://live-ws.immomo.com/ws/im" + async with websockets.connect(uri) as websocket: + print(f"链接websocket:[{uri}] 完成") + + momoid = "1062302597" + roomid = "17066184578990" + token = "b458d6fd04ee38a9e5330e76a3802df9" + ping_msg_id = 2 # 心跳包的id2 + + client_time = str(int(time.time() * 1000)) + data = '{{"msg_id":1,"client_time":{0},"type":"Sauth","data":{{"momoid":"{1}","roomid":"{2}","role":6,"isVisitor":false,"token":"{3}","ua":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0"}}}}'.format( + client_time, momoid, roomid, token) + await websocket.send(data) + print("Send Sauth") + + while True: + try: + response = await websocket.recv() + current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + #print(f"[{current_time}] 收到原始消息 => " + response) + # print("收到原始消息 => " + response) + + try: + json_data = json.loads(response) + # print("收到JSON消息 => ", json_data) + + message_type = json_data['groups'][0]['units'][0]['type'] + + if message_type == "Message": + nick = json_data['groups'][0]['nick'] + text = json_data['groups'][0]['units'][0]['Msg.Message.data']['text'] + print(f"[{current_time}] {nick} : {text}") + elif message_type == "EnterRoom": + text = json_data['groups'][0]['units'][0]['Set.EnterRoom.data']['text'] + print(f"[{current_time}] 有新人: {text}") + elif message_type == "BiliBili": + nick = json_data['groups'][0]['nick'] + text = json_data['groups'][0]['units'][0]['Pay.BiliBili.data']['text'] + print(f"[{current_time}] {nick} : {text}") + elif message_type == "GiftV3": + nick = json_data['groups'][0]['nick'] + text = json_data['groups'][0]['units'][0]['GiftV3.giftV3']['text'] + product_id = json_data['groups'][0]['units'][0]['GiftV3.giftV3']['productId'] + print(f"[{current_time}] 用户: {nick} 送出礼物,内容为: {text},产品ID为: {product_id}") + + except KeyError as e: + print("JSON数据缺少:", e) + except json.JSONDecodeError as e: + print("无法解析JSON格式: ", e) + + except websockets.exceptions.ConnectionClosedError: + print(f"[{current_time}] 与服务器断开链接") + break + +async def send_ping(websocket): + ping_msg_id = 2 + await asyncio.sleep(30) # 延迟30秒后开始发送心跳包 + while True: + client_time = str(int(time.time() * 1000)) + ping_data = '{{"msg_id":{0},"client_time":{1},"type":"Ping","data":{{}}}}'.format(ping_msg_id, client_time) + try: + await websocket.send(ping_data) + print("Send Ping", ping_data) + ping_msg_id += 1 + await asyncio.sleep(30) # 每隔30秒发送一次 + except websockets.exceptions.ConnectionClosedError: + print("与服务器断开链接") + break + +async def main(): + websocket = await websockets.connect("wss://live-ws.immomo.com/ws/im") + connect_task = asyncio.create_task(connect()) + ping_task = asyncio.create_task(send_ping(websocket)) + await connect_task + await ping_task + +asyncio.run(main()) \ No newline at end of file