Created
January 26, 2022 15:59
-
-
Save ProgramRipper/93bab03fe15fc86703cb4ca7cc3cb798 to your computer and use it in GitHub Desktop.
bilibili live data
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "INTERACT_WORD": { | |
| "cmd": "INTERACT_WORD", | |
| "data": { | |
| "uid": 69871196, | |
| "uname": "榟港", | |
| "uname_color": "", | |
| "identities": [ | |
| 3 | |
| ], | |
| "msg_type": 1, | |
| "roomid": 11365, | |
| "timestamp": 1605962570, | |
| "score": 1605952570038317600, | |
| "fans_medal": { | |
| "target_id": 1577804, | |
| "medal_level": 14, | |
| "medal_name": "猛汉", | |
| "medal_color": 12478086, | |
| "medal_color_start": 12478086, | |
| "medal_color_end": 12478086, | |
| "medal_color_border": 12478086, | |
| "is_lighted": 1, | |
| "guard_level": 0, | |
| "special": "", | |
| "icon_id": 0, | |
| "anchor_roomid": 271744 | |
| }, | |
| "is_spread": 0, | |
| "spread_info": "", | |
| "contribution": { | |
| "grade": 0 | |
| }, | |
| "spread_desc": "" | |
| } | |
| }, | |
| "DANMU_MSG": { | |
| "cmd": "DANMU_MSG", | |
| "info": [ | |
| [ | |
| 0, | |
| 1, | |
| 25, | |
| 5566168, | |
| 1605962570163, | |
| -750447822, | |
| 0, | |
| "20a2463f", | |
| 0, | |
| 0, | |
| 0, | |
| "" | |
| ], | |
| "100w冲冲冲", | |
| [ | |
| 91865208, | |
| "森小祥的向日葵", | |
| 0, | |
| 0, | |
| 0, | |
| 10000, | |
| 1, | |
| "" | |
| ], | |
| [ | |
| 10, | |
| "蕾丝", | |
| "LexBurner", | |
| 11365, | |
| 9272486, | |
| "", | |
| 0, | |
| 9272486, | |
| 9272486, | |
| 9272486, | |
| 0, | |
| 1, | |
| 777536 | |
| ], | |
| [ | |
| 13, | |
| 0, | |
| 6406234, | |
| ">50000", | |
| 0 | |
| ], | |
| [ | |
| "title-111-1", | |
| "title-111-1" | |
| ], | |
| 0, | |
| 0, | |
| null, | |
| { | |
| "ts": 1605962570, | |
| "ct": "DAA7F79A" | |
| }, | |
| 0, | |
| 0, | |
| null, | |
| null, | |
| 0 | |
| ] | |
| }, | |
| "SUPER_CHAT_MESSAGE_JPN": { | |
| "cmd": "SUPER_CHAT_MESSAGE_JPN", | |
| "data": { | |
| "id": "883898", | |
| "uid": "316681456", | |
| "price": 30, | |
| "rate": 1000, | |
| "message": "老蕾生日快乐啊啊!!我回来了快想起我!以后我们也一起继续走长长长长长的路吧!!!", | |
| "message_jpn": "", | |
| "is_ranked": 0, | |
| "background_image": "https://i0.hdslb.com/bfs/live/a712efa5c6ebc67bafbe8352d3e74b820a00c13e.png", | |
| "background_color": "#EDF5FF", | |
| "background_icon": "", | |
| "background_price_color": "#7497CD", | |
| "background_bottom_color": "#2A60B2", | |
| "ts": 1605962570, | |
| "token": "92B5901", | |
| "medal_info": { | |
| "icon_id": 0, | |
| "target_id": 777536, | |
| "special": "", | |
| "anchor_uname": "LexBurner", | |
| "anchor_roomid": 11365, | |
| "medal_level": 6, | |
| "medal_name": "蕾丝", | |
| "medal_color": "#5d7b9e" | |
| }, | |
| "user_info": { | |
| "uname": "十九是只羊", | |
| "face": "http://i1.hdslb.com/bfs/face/468d84f4560d620f2e1d5c320589599046fcc89f.jpg", | |
| "face_frame": "", | |
| "guard_level": 0, | |
| "user_level": 3, | |
| "level_color": "#969696", | |
| "is_vip": 0, | |
| "is_svip": 0, | |
| "is_main_vip": 0, | |
| "title": "0", | |
| "manager": 0 | |
| }, | |
| "time": 60, | |
| "start_time": 1605962570, | |
| "end_time": 1605962630, | |
| "gift": { | |
| "num": 1, | |
| "gift_id": 12000, | |
| "gift_name": "醒目留言" | |
| } | |
| }, | |
| "roomid": "11365" | |
| }, | |
| "SUPER_CHAT_MESSAGE": { | |
| "cmd": "SUPER_CHAT_MESSAGE", | |
| "data": { | |
| "id": 883898, | |
| "uid": 316681456, | |
| "price": 30, | |
| "rate": 1000, | |
| "message": "老蕾生日快乐啊啊!!我回来了快想起我!以后我们也一起继续走长长长长长的路吧!!!", | |
| "trans_mark": 0, | |
| "is_ranked": 0, | |
| "message_trans": "", | |
| "background_color_start": "#3171D2", | |
| "background_color_end": "#405D85", | |
| "color_point": 0.7, | |
| "message_font_color": "#A3F6FF", | |
| "background_image": "https://i0.hdslb.com/bfs/live/a712efa5c6ebc67bafbe8352d3e74b820a00c13e.png", | |
| "background_color": "#EDF5FF", | |
| "background_icon": "", | |
| "background_price_color": "#7497CD", | |
| "background_bottom_color": "#2A60B2", | |
| "ts": 1605962570, | |
| "is_send_audit": "0", | |
| "token": "92B5901", | |
| "medal_info": { | |
| "icon_id": 0, | |
| "target_id": 777536, | |
| "special": "", | |
| "anchor_uname": "LexBurner", | |
| "anchor_roomid": 11365, | |
| "medal_level": 6, | |
| "medal_name": "蕾丝", | |
| "medal_color": "#5d7b9e", | |
| "medal_color_start": 12632256, | |
| "medal_color_end": 12632256, | |
| "medal_color_border": 12632256, | |
| "is_lighted": 0, | |
| "guard_level": 0 | |
| }, | |
| "user_info": { | |
| "uname": "十九是只羊", | |
| "face": "http://i1.hdslb.com/bfs/face/468d84f4560d620f2e1d5c320589599046fcc89f.jpg", | |
| "face_frame": "", | |
| "name_color": "#666666", | |
| "guard_level": 0, | |
| "user_level": 3, | |
| "level_color": "#969696", | |
| "is_vip": 0, | |
| "is_svip": 0, | |
| "is_main_vip": 0, | |
| "title": "0", | |
| "manager": 0 | |
| }, | |
| "time": 60, | |
| "start_time": 1605962570, | |
| "end_time": 1605962630, | |
| "gift": { | |
| "num": 1, | |
| "gift_id": 12000, | |
| "gift_name": "醒目留言" | |
| } | |
| }, | |
| "roomid": "11365" | |
| }, | |
| "WELCOME_GUARD": { | |
| "cmd": "WELCOME_GUARD", | |
| "data": { | |
| "uid": 384644631, | |
| "username": "这女 孩不爱吃土", | |
| "guard_level": 3 | |
| } | |
| }, | |
| "ENTRY_EFFECT": { | |
| "cmd": "ENTRY_EFFECT", | |
| "data": { | |
| "id": 4, | |
| "uid": 2218580, | |
| "target_id": 777536, | |
| "mock_effect": 0, | |
| "face": "https://i0.hdslb.com/bfs/face/74175664b730a7ee20e76dcd46332c183e107dcf.jpg", | |
| "privilege_type": 3, | |
| "copy_writing": "欢迎舰长 <%茶杯小兔头%> 进入直播间", | |
| "copy_color": "#ffffff", | |
| "highlight_color": "#E6FF00", | |
| "priority": 70, | |
| "basemap_url": "https://i0.hdslb.com/bfs/live/mlive/f34c7441cdbad86f76edebf74e60b59d2958f6ad.png", | |
| "show_avatar": 1, | |
| "effective_time": 2, | |
| "web_basemap_url": "", | |
| "web_effective_time": 0, | |
| "web_effect_close": 0, | |
| "web_close_time": 0, | |
| "business": 1 | |
| } | |
| }, | |
| "SEND_GIFT": { | |
| "cmd": "SEND_GIFT", | |
| "data": { | |
| "draw": 0, | |
| "gold": 0, | |
| "silver": 0, | |
| "num": 1, | |
| "total_coin": 0, | |
| "effect": 0, | |
| "broadcast_id": 0, | |
| "crit_prob": 0, | |
| "guard_level": 0, | |
| "rcost": 459954694, | |
| "uid": 104348287, | |
| "timestamp": 1605962570, | |
| "giftId": 30607, | |
| "giftType": 5, | |
| "super": 0, | |
| "super_gift_num": 1, | |
| "super_batch_gift_num": 1, | |
| "remain": 0, | |
| "price": 0, | |
| "beatId": "", | |
| "biz_source": "Live", | |
| "action": "投喂", | |
| "coin_type": "silver", | |
| "uname": "KillerXiaoJiee-", | |
| "face": "http://i2.hdslb.com/bfs/face/644201de379524748dd02a91a961bd7f147c390c.jpg", | |
| "batch_combo_id": "batch:gift:combo_id:104348287:777536:30607:1605962570.0430", | |
| "rnd": "22036AA5-27E8-4755-878B-945878BB9E8E", | |
| "giftName": "小心心", | |
| "combo_send": null, | |
| "batch_combo_send": null, | |
| "tag_image": "", | |
| "top_list": null, | |
| "send_master": null, | |
| "is_first": true, | |
| "demarcation": 1, | |
| "combo_stay_time": 3, | |
| "combo_total_coin": 1, | |
| "tid": "1605962570130700001", | |
| "effect_block": 1, | |
| "is_special_batch": 0, | |
| "combo_resources_id": 1, | |
| "magnification": 1, | |
| "name_color": "", | |
| "medal_info": { | |
| "target_id": 777536, | |
| "special": "", | |
| "icon_id": 0, | |
| "anchor_uname": "", | |
| "anchor_roomid": 0, | |
| "medal_level": 7, | |
| "medal_name": "蕾丝", | |
| "medal_color": 6126494, | |
| "medal_color_start": 6126494, | |
| "medal_color_end": 6126494, | |
| "medal_color_border": 6126494, | |
| "is_lighted": 1, | |
| "guard_level": 0 | |
| }, | |
| "svga_block": 0 | |
| } | |
| }, | |
| "COMBO_SEND": { | |
| "cmd": "COMBO_SEND", | |
| "data": { | |
| "uid": 252596742, | |
| "ruid": 777536, | |
| "uname": "笑笑 不说话RK", | |
| "r_uname": "LexBurner", | |
| "combo_num": 1, | |
| "gift_id": 30607, | |
| "gift_num": 0, | |
| "batch_combo_num": 1, | |
| "gift_name": "小心心", | |
| "action": "投喂", | |
| "combo_id": "gift:combo_id:252596742:777536:30607:1605962560.2732", | |
| "batch_combo_id": "batch:gift:combo_id:252596742:777536:30607:1605962560.2751", | |
| "is_show": 1, | |
| "send_master": null, | |
| "name_color": "", | |
| "total_num": 1, | |
| "medal_info": { | |
| "target_id": 777536, | |
| "special": "", | |
| "icon_id": 0, | |
| "anchor_uname": "", | |
| "anchor_roomid": 0, | |
| "medal_level": 11, | |
| "medal_name": "蕾丝", | |
| "medal_color": 9272486, | |
| "medal_color_start": 9272486, | |
| "medal_color_end": 9272486, | |
| "medal_color_border": 9272486, | |
| "is_lighted": 1, | |
| "guard_level": 0 | |
| }, | |
| "combo_total_coin": 0 | |
| } | |
| }, | |
| "ONLINE_RANK_COUNT": { | |
| "cmd": "ONLINE_RANK_COUNT", | |
| "data": { | |
| "count": 2583 | |
| } | |
| }, | |
| "NOTICE_MSG": { | |
| "cmd": "NOTICE_MSG", | |
| "full": { | |
| "head_icon": "http://i0.hdslb.com/bfs/live/b29add66421580c3e680d784a827202e512a40a0.webp", | |
| "tail_icon": "http://i0.hdslb.com/bfs/live/822da481fdaba986d738db5d8fd469ffa95a8fa1.webp", | |
| "head_icon_fa": "http://i0.hdslb.com/bfs/live/49869a52d6225a3e70bbf1f4da63f199a95384b2.png", | |
| "tail_icon_fa": "http://i0.hdslb.com/bfs/live/38cb2a9f1209b16c0f15162b0b553e3b28d9f16f.png", | |
| "head_icon_fan": 24, | |
| "tail_icon_fan": 4, | |
| "background": "#66A74EFF", | |
| "color": "#FFFFFFFF", | |
| "highlight": "#FDFF2FFF", | |
| "time": 20 | |
| }, | |
| "half": { | |
| "head_icon": "http://i0.hdslb.com/bfs/live/ec9b374caec5bd84898f3780a10189be96b86d4e.png", | |
| "tail_icon": "", | |
| "background": "#85B971FF", | |
| "color": "#FFFFFFFF", | |
| "highlight": "#FDFF2FFF", | |
| "time": 15 | |
| }, | |
| "side": { | |
| "head_icon": "", | |
| "background": "", | |
| "color": "", | |
| "highlight": "", | |
| "border": "" | |
| }, | |
| "roomid": 22484349, | |
| "real_roomid": 22484349, | |
| "msg_common": "<%大熊文化の熊老板%>投喂<%酥糖小白ovo%>1个盛 典小电视,点击前往TA的房间吧!", | |
| "msg_self": "<%大熊文化の熊老板%>投喂<%酥糖小白ovo%>1个盛典小电视,快来围观吧!", | |
| "link_url": "https://live.bilibili.com/22484349?from=28003&extra_jump_from=28003&live_lottery_type=1&broadcast_type=1", | |
| "msg_type": 2, | |
| "shield_uid": -1, | |
| "business_id": "25", | |
| "scatter": { | |
| "min": 0, | |
| "max": 0 | |
| } | |
| }, | |
| "GUARD_BUY": { | |
| "cmd": "GUARD_BUY", | |
| "data": { | |
| "uid": 65545494, | |
| "username": "请毒打我一顿", | |
| "guard_level": 3, | |
| "num": 1, | |
| "price": 198000, | |
| "gift_id": 10003, | |
| "gift_name": "舰长", | |
| "start_time": 1605962598, | |
| "end_time": 1605962598 | |
| } | |
| }, | |
| "USER_TOAST_MSG": { | |
| "cmd": "USER_TOAST_MSG", | |
| "data": { | |
| "op_type": 1, | |
| "uid": 65545494, | |
| "username": "请毒打我一顿", | |
| "guard_level": 3, | |
| "is_show": 0, | |
| "anchor_show": true, | |
| "user_show": true, | |
| "toast_msg": "<%请毒打我一顿%> 开 通了舰长", | |
| "num": 1, | |
| "price": 198000, | |
| "role_name": "舰长", | |
| "unit": "月", | |
| "start_time": 1605962598, | |
| "end_time": 1605962598, | |
| "target_guard_count": 1215, | |
| "color": "#00D1F1", | |
| "payflow_id": "2011212043016452154947618", | |
| "svga_block": 0 | |
| } | |
| }, | |
| "ROOM_BANNER": { | |
| "cmd": "ROOM_BANNER", | |
| "type": 1, | |
| "id": 7, | |
| "data": { | |
| "is_block": false, | |
| "sort_list": [ | |
| "bls_parent_area_rank_info", | |
| "bls_area_rank_info", | |
| "bls_spc_rank_info", | |
| "bls_rank_info", | |
| "bls_task_info", | |
| "support_task_info", | |
| "pk_info", | |
| "task_info", | |
| "task_pendant_info" | |
| ], | |
| "task_pendant_status": 1, | |
| "task_pendant_info": { | |
| "act_id": 33, | |
| "task_status": 1, | |
| "task_info": { | |
| "period": 0, | |
| "level": 6, | |
| "total_level": 9, | |
| "status": 0, | |
| "assiant_info": { | |
| "anchor": { | |
| "face": "http://i1.hdslb.com/bfs/face/2996e22a24eed2d7767e452627a9130207defe6a.jpg", | |
| "uname": "LexBurner" | |
| }, | |
| "assist": { | |
| "face": "http://i0.hdslb.com/bfs/face/f13408d646d83be83183e70831a6c71d63af9618.jpg", | |
| "uname": "你看右手边的星河" | |
| } | |
| }, | |
| "list": [ | |
| { | |
| "task_type": 1, | |
| "current_num": 50000, | |
| "total_num": 50000, | |
| "status": 6 | |
| }, | |
| { | |
| "task_type": 2, | |
| "current_num": 0, | |
| "total_num": 1, | |
| "status": 3 | |
| } | |
| ] | |
| }, | |
| "ConfigInfo": { | |
| "bg_color": "", | |
| "no_progress_color": "", | |
| "yes_progress_color": "", | |
| "level_font_color": "", | |
| "progress_font_color": "", | |
| "task_font_color": "", | |
| "ConfigNode": "", | |
| "url": "", | |
| "act_id": "" | |
| }, | |
| "config_info": { | |
| "bg_color": "#603B8E", | |
| "no_progress_color": "#FFFFFF", | |
| "yes_progress_color": "#FCD089", | |
| "level_font_color": "#DBA95F", | |
| "progress_font_color": "#3C326F", | |
| "task_font_color": "#FEE1AB", | |
| "url": "https://live.bilibili.com/activity/live-activity-battle/index.html?room_id=11365#/task", | |
| "act_id": 25, | |
| "list": [ | |
| { | |
| "desc": "小心心任务" | |
| }, | |
| { | |
| "desc": "金瓜子任务" | |
| }, | |
| { | |
| "desc": "大乱斗任务" | |
| } | |
| ] | |
| } | |
| }, | |
| "pk_info": { | |
| "id": 29, | |
| "uid": 777536, | |
| "score": 0, | |
| "season_name": "大乱斗S3赛季", | |
| "season_start": "1605067200", | |
| "season_end": "1606665599", | |
| "status": 1, | |
| "has_battled": 0, | |
| "next_rank_need_score": 1, | |
| "rank": 0, | |
| "pk": { | |
| "level1_id": 1, | |
| "level1_name": "青铜萌新", | |
| "level1_img": "https://i0.hdslb.com/bfs/live/da7dbae5a06c99b54a31fb79668b1503142d2e45.png", | |
| "level2_count": 1, | |
| "level2_img": "https://i0.hdslb.com/bfs/live/1f8c2a959f92592407514a1afeb705ddc55429cd.png", | |
| "top_rank": 0 | |
| }, | |
| "champion_info": [] | |
| }, | |
| "pk_status": 1, | |
| "support_task_info": { | |
| "status": 1, | |
| "url": "", | |
| "list": [], | |
| "assist": null, | |
| "config_info": null | |
| }, | |
| "support_task_status": 0, | |
| "bls_rank_info": null, | |
| "bls_rank_status": 0, | |
| "bls_task_status": 0, | |
| "bls_task_info": { | |
| "cur_round": 1, | |
| "total_score": 0, | |
| "cur": 0, | |
| "max": 0, | |
| "desc": "", | |
| "url": "http://live.bilibili.com/activity/live-activity-battle/index.html?uid=777536&roomId=0#/bls-2020" | |
| }, | |
| "bls_area_rank_status": 0, | |
| "bls_area_rank_info": null, | |
| "bls_spc_rank_status": 0, | |
| "bls_spc_rank_info": null, | |
| "bls_parent_area_rank_info": { | |
| "is_static": 0, | |
| "is_settle": 0, | |
| "act_status": 2, | |
| "period": 11, | |
| "match_status": 1, | |
| "team_id": 6, | |
| "buff_enable": 0, | |
| "buff_expire": 0, | |
| "buff_score": 0, | |
| "buff_end_timestamp": 0, | |
| "current_day": "2020-11-21", | |
| "url": "https://live.bilibili.com/activity/live-activity-battle/index.html?room_id=11365&uid=777536#/bls-2020-rank/big-area", | |
| "is_battle_promoted": 0, | |
| "buff_rate": 0, | |
| "is_off_match": 0, | |
| "rank_info": { | |
| "uid": 777536, | |
| "rank": 1, | |
| "score": 1398411, | |
| "face": "http://i1.hdslb.com/bfs/face/2996e22a24eed2d7767e452627a9130207defe6a.jpg", | |
| "rank_type_status": 1, | |
| "rank_type_value": 1390745, | |
| "assist": { | |
| "uid": 409213464, | |
| "uname": "电子面", | |
| "rank": 1, | |
| "score": 29183, | |
| "face": "http://i0.hdslb.com/bfs/face/1583c9083abf898975ceccdb7085d49a21322aea.jpg" | |
| } | |
| }, | |
| "top_info": { | |
| "uid": 777536, | |
| "rank": 1, | |
| "score": 1398411, | |
| "face": "http://i1.hdslb.com/bfs/face/2996e22a24eed2d7767e452627a9130207defe6a.jpg", | |
| "uname": "LexBurner" | |
| }, | |
| "battle_info": [] | |
| }, | |
| "bls_parent_area_rank_status": 1 | |
| } | |
| }, | |
| "ROOM_REAL_TIME_MESSAGE_UPDATE": { | |
| "cmd": "ROOM_REAL_TIME_MESSAGE_UPDATE", | |
| "data": { | |
| "roomid": 11365, | |
| "fans": 9191375, | |
| "red_notice": -1, | |
| "fans_club": 38258 | |
| } | |
| }, | |
| "ONLINE_RANK_V2": { | |
| "cmd": "ONLINE_RANK_V2", | |
| "data": { | |
| "list": [ | |
| { | |
| "uid": 356840820, | |
| "face": "http://i0.hdslb.com/bfs/face/02bab4abb297072e524ca89e69c193c15f5b10d6.jpg", | |
| "score": "32200", | |
| "uname": "顾念の小碗", | |
| "rank": 1, | |
| "guard_level": 2 | |
| }, | |
| { | |
| "uid": 305839435, | |
| "face": "http://i1.hdslb.com/bfs/face/4a3222744646cf79c0b9b10d04c8379d8c00a2ee.jpg", | |
| "score": "27896", | |
| "uname": "溯羡", | |
| "rank": 2, | |
| "guard_level": 2 | |
| }, | |
| { | |
| "uid": 3028850, | |
| "face": "http://i0.hdslb.com/bfs/face/7f9cdc7b312c7187aa403d6c9ae23d64b6f65fbd.jpg", | |
| "score": "25727", | |
| "uname": "不过一片星辰", | |
| "rank": 3, | |
| "guard_level": 2 | |
| }, | |
| { | |
| "uid": 28871255, | |
| "face": "http://i1.hdslb.com/bfs/face/5fbde5703667da1caa6ddfbece77cbcbbceaa55e.jpg", | |
| "score": "25180", | |
| "uname": "渲崽超元气", | |
| "rank": 4, | |
| "guard_level": 2 | |
| }, | |
| { | |
| "uid": 2409050, | |
| "face": "http://i2.hdslb.com/bfs/face/e3e6d33f4bad050bd2f87902b62d8b5e54f409c1.jpg", | |
| "score": "24980", | |
| "uname": "骨古咕", | |
| "rank": 5, | |
| "guard_level": 2 | |
| }, | |
| { | |
| "uid": 409213464, | |
| "face": "http://i0.hdslb.com/bfs/face/1583c9083abf898975ceccdb7085d49a21322aea.jpg", | |
| "score": "23083", | |
| "uname": "电子面", | |
| "rank": 6, | |
| "guard_level": 2 | |
| }, | |
| { | |
| "uid": 294975776, | |
| "face": "http://i0.hdslb.com/bfs/face/d606156220a1b42c771ba348a8e7437615bb6690.jpg", | |
| "score": "22650", | |
| "uname": "是蓝氢不是蓝气", | |
| "rank": 7, | |
| "guard_level": 3 | |
| } | |
| ], | |
| "rank_type": "gold-rank" | |
| } | |
| }, | |
| "WELCOME": { | |
| "cmd": "WELCOME", | |
| "data": { | |
| "uid": 11200742, | |
| "uname": "喜欢秀晶的钟鱼", | |
| "is_admin": false, | |
| "svip": 1, | |
| "vip": 1 | |
| } | |
| }, | |
| "VOICE_JOIN_ROOM_COUNT_INFO": { | |
| "cmd": "VOICE_JOIN_ROOM_COUNT_INFO", | |
| "data": { | |
| "room_id": 11365, | |
| "root_status": 1, | |
| "room_status": 1, | |
| "apply_count": 1, | |
| "notify_count": 0, | |
| "red_point": 0 | |
| }, | |
| "roomid": 11365 | |
| }, | |
| "VOICE_JOIN_LIST": { | |
| "cmd": "VOICE_JOIN_LIST", | |
| "data": { | |
| "room_id": 11365, | |
| "category": 1, | |
| "apply_count": 1, | |
| "red_point": 1, | |
| "refresh": 1 | |
| }, | |
| "roomid": 11365 | |
| }, | |
| "ROOM_RANK": { | |
| "cmd": "ROOM_RANK", | |
| "data": { | |
| "roomid": 11365, | |
| "rank_desc": "小时总榜 1", | |
| "color": "#FB7299", | |
| "h5_url": "https://live.bilibili.com/p/html/live-app-rankcurrent/index.html?is_live_half_webview=1&hybrid_half_ui=1,5,85p,70p,FFE293,0,30,100,10;2,2,320,100p,FFE293,0,30,100,0;4,2,320,100p,FFE293,0,30,100,0;6,5,65p,60p,FFE293,0,30,100,10;5,5,55p,60p,FFE293,0,30,100,10;3,5,85p,70p,FFE293,0,30,100,10;7,5,65p,60p,FFE293,0,30,100,10;&anchor_uid=777536&rank_type=master_realtime_hour_room&area_hour=1&area_v2_id=98&area_v2_parent_id=3", | |
| "web_url": "https://live.bilibili.com/blackboard/room-current-rank.html?rank_type=master_realtime_hour_room&area_hour=1&area_v2_id=98&area_v2_parent_id=3", | |
| "timestamp": 1605963060 | |
| } | |
| }, | |
| "ROOM_BLOCK_MSG": { | |
| "cmd": "ROOM_BLOCK_MSG", | |
| "uid": "272020728", | |
| "uname": "今生的光", | |
| "data": { | |
| "uid": 272020728, | |
| "uname": "今生的光", | |
| "operator": 1 | |
| } | |
| }, | |
| "ONLINE_RANK_TOP3": { | |
| "cmd": "ONLINE_RANK_TOP3", | |
| "data": { | |
| "list": [ | |
| { | |
| "msg": "恭喜 <%电子面%> 成为高能榜", | |
| "rank": 3 | |
| } | |
| ] | |
| } | |
| }, | |
| "HOUR_RANK_AWARDS": { | |
| "cmd": "HOUR_RANK_AWARDS", | |
| "action": "all_top3", | |
| "data": { | |
| "roomid": 11365, | |
| "ruid": 777536, | |
| "uname": "LexBurner", | |
| "face": "http://i1.hdslb.com/bfs/face/2996e22a24eed2d7767e452627a9130207defe6a.jpg", | |
| "rank_desc": "http://i0.hdslb.com/bfs/vc/b48fcb7a0193942844c55e457449de10ed3f045d.png", | |
| "content": "恭喜主播获得\\\\n超人气推荐奖励!", | |
| "life_cycle": 3 | |
| } | |
| }, | |
| "new_anchor_reward": { | |
| "cmd": "new_anchor_reward", | |
| "reward_id": 1, | |
| "roomid": 11365, | |
| "uid": 777536 | |
| }, | |
| "ACTIVITY_BANNER_UPDATE_V2": { | |
| "cmd": "ACTIVITY_BANNER_UPDATE_V2", | |
| "data": { | |
| "id": 378, | |
| "title": "第1名", | |
| "cover": "", | |
| "background": "https://i0.hdslb.com/bfs/activity-plat/static/20190904/b5e210ef68e55c042f407870de28894b/14vZu7h9pK.png", | |
| "jump_url": "https://live.bilibili.com/p/html/live-app-rankcurrent/index.html?is_live_half_webview=1&hybrid_half_ui=1,5,85p,70p,FFE293,0,30,100,10;2,2,320,100p,FFE293,0,30,100,0;4,2,320,100p,FFE293,0,30,100,0;6,5,65p,60p,FFE293,0,30,100,10;5,5,55p,60p,FFE293,0,30,100,10;3,5,85p,70p,FFE293,0,30,100,10;7,5,65p,60p,FFE293,0,30,100,10;&anchor_uid=777536&is_new_rank_container=1&area_v2_id=98&area_v2_parent_id=3&rank_type=master_realtime_area_hour&area_hour=1", | |
| "title_color": "#8B5817", | |
| "closeable": 1, | |
| "banner_type": 4, | |
| "weight": 18, | |
| "add_banner": 0 | |
| } | |
| }, | |
| "PANEL": { | |
| "cmd": "PANEL", | |
| "data": { | |
| "biz_id": 5, | |
| "icon": "https://i0.hdslb.com/bfs/activity-plat/static/20200616/b5e210ef68e55c042f407870de28894b/8cvyZuYhx9d.png", | |
| "is_outer": 0, | |
| "jump_url": "https://live.bilibili.com/p/html/live-app-rankcurrent/index.html?is_live_half_webview=1&hybrid_half_ui=1,5,85p,70p,FFE293,0,30,100,10;2,2,320,100p,FFE293,0,30,100,0;4,2,320,100p,FFE293,0,30,100,0;6,5,65p,60p,FFE293,0,30,100,10;5,5,55p,60p,FFE293,0,30,100,10;3,5,85p,70p,FFE293,0,30,100,10;7,5,65p,60p,FFE293,0,30,100,10;&anchor_uid=777536&is_new_rank_container=1&area_v2_id=98&area_v2_parent_id=3&rank_type=master_realtime_area_hour&area_hour=1", | |
| "note": "手游 第1名", | |
| "operate": 1, | |
| "status_type": 1, | |
| "title": "小时榜", | |
| "weight": 8 | |
| } | |
| }, | |
| "ANCHOR_LOT_CHECKSTATUS": { | |
| "cmd": "ANCHOR_LOT_CHECKSTATUS", | |
| "data": { | |
| "id": 633382, | |
| "status": 4, | |
| "uid": 777536 | |
| } | |
| }, | |
| "ANCHOR_LOT_START": { | |
| "cmd": "ANCHOR_LOT_START", | |
| "data": { | |
| "asset_icon": "https://i0.hdslb.com/bfs/live/992c2ccf88d3ea99620fb3a75e672e0abe850e9c.png", | |
| "award_image": "", | |
| "award_name": "小电视抱枕", | |
| "award_num": 10, | |
| "cur_gift_num": 0, | |
| "current_time": 1605965685, | |
| "danmu": "", | |
| "gift_id": 0, | |
| "gift_name": "", | |
| "gift_num": 1, | |
| "gift_price": 0, | |
| "goaway_time": 180, | |
| "goods_id": -99998, | |
| "id": 633382, | |
| "is_broadcast": 1, | |
| "join_type": 0, | |
| "lot_status": 0, | |
| "max_time": 600, | |
| "require_text": "关注主播", | |
| "require_type": 1, | |
| "require_value": 0, | |
| "room_id": 11365, | |
| "send_gift_ensure": 0, | |
| "show_panel": 1, | |
| "status": 1, | |
| "time": 599, | |
| "url": "https://live.bilibili.com/p/html/live-lottery/anchor-join.html?is_live_half_webview=1&hybrid_biz=live-lottery-anchor&hybrid_half_ui=1,5,100p,100p,000000,0,30,0,0,1;2,5,100p,100p,000000,0,30,0,0,1;3,5,100p,100p,000000,0,30,0,0,1;4,5,100p,100p,000000,0,30,0,0,1;5,5,100p,100p,000000,0,30,0,0,1;6,5,100p,100p,000000,0,30,0,0,1;7,5,100p,100p,000000,0,30,0,0,1;8,5,100p,100p,000000,0,30,0,0,1", | |
| "web_url": "https://live.bilibili.com/p/html/live-lottery/anchor-join.html" | |
| } | |
| }, | |
| "ONLINERANK": { | |
| "cmd": "ONLINERANK", | |
| "data": { | |
| "list": [ | |
| { | |
| "uid": 3028850, | |
| "face": "http://i0.hdslb.com/bfs/face/7f9cdc7b312c7187aa403d6c9ae23d64b6f65fbd.jpg", | |
| "guard_level": 2 | |
| }, | |
| { | |
| "uid": 6587897, | |
| "face": "http://i0.hdslb.com/bfs/face/1921af39e53ba44ba165596f7959e4768f091337.jpg", | |
| "guard_level": 3 | |
| }, | |
| { | |
| "uid": 409213464, | |
| "face": "http://i0.hdslb.com/bfs/face/1583c9083abf898975ceccdb7085d49a21322aea.jpg", | |
| "guard_level": 2 | |
| }, | |
| { | |
| "uid": 13196594, | |
| "face": "http://i0.hdslb.com/bfs/face/bcd442832bd9df3de548cae97b7b912bc68189bf.jpg", | |
| "guard_level": 2 | |
| }, | |
| { | |
| "uid": 5656454, | |
| "face": "http://i1.hdslb.com/bfs/face/171b10cd02df8c0ae6f1c77fbc4fb4d2e65bb86f.jpg", | |
| "guard_level": 2 | |
| } | |
| ], | |
| "rank_type": "gold-rank" | |
| } | |
| }, | |
| "ROOM_CHANGE": { | |
| "cmd": "ROOM_CHANGE", | |
| "data": { | |
| "title": "宠粉主 播", | |
| "area_id": 98, | |
| "parent_area_id": 3, | |
| "area_name": "其他手游", | |
| "parent_area_name": "手游" | |
| } | |
| }, | |
| "ANCHOR_LOT_END": { | |
| "cmd": "ANCHOR_LOT_END", | |
| "data": { | |
| "id": 633382 | |
| } | |
| }, | |
| "ANCHOR_LOT_AWARD": { | |
| "cmd": "ANCHOR_LOT_AWARD", | |
| "data": { | |
| "award_image": "", | |
| "award_name": "小电视抱枕", | |
| "award_num": 1, | |
| "award_users": [ | |
| { | |
| "uid": 499155729, | |
| "uname": "一颗宇宙行星", | |
| "face": "http://i1.hdslb.com/bfs/face/96f05d19994c8ed2616ca34fe0cae7e1f9bd8285.jpg", | |
| "level": 0, | |
| "color": 9868950 | |
| }, | |
| { | |
| "uid": 398202257, | |
| "uname": "安安安安丶酱", | |
| "face": "http://i0.hdslb.com/bfs/face/ba79a5d22389fe441ebc54fd2e1f9b8bac46c2c6.jpg", | |
| "level": 0, | |
| "color": 9868950 | |
| }, | |
| { | |
| "uid": 253488666, | |
| "uname": "玄火吃布丁", | |
| "face": "http://i2.hdslb.com/bfs/face/3f410b79538f322577b05cea51c9cc4bbb0f7582.jpg", | |
| "level": 6, | |
| "color": 9868950 | |
| }, | |
| { | |
| "uid": 1510848, | |
| "uname": "雷格納特", | |
| "face": "http://i1.hdslb.com/bfs/face/436f64a0c1177ccb9844d72136d1afc1424874ef.jpg", | |
| "level": 21, | |
| "color": 5805790 | |
| }, | |
| { | |
| "uid": 242494000, | |
| "uname": "1np6bq", | |
| "face": "http://i0.hdslb.com/bfs/face/member/noface.jpg", | |
| "level": 0, | |
| "color": 9868950 | |
| }, | |
| { | |
| "uid": 498084851, | |
| "uname": "木老胳膊老腿儿", | |
| "face": "http://i1.hdslb.com/bfs/face/caf412ac70404ab14b3296c957964a66c6e1c463.jpg", | |
| "level": 0, | |
| "color": 9868950 | |
| }, | |
| { | |
| "uid": 293395415, | |
| "uname": "洛茶134", | |
| "face": "http://i1.hdslb.com/bfs/face/686e39dffd10839c5704303737f2b1cd9f1d0b6a.jpg", | |
| "level": 0, | |
| "color": 9868950 | |
| }, | |
| { | |
| "uid": 361214743, | |
| "uname": "尘萦鹅", | |
| "face": "http://i2.hdslb.com/bfs/face/78d2701804dcbf4f89787fffdc94f413d54fb4df.jpg", | |
| "level": 0, | |
| "color": 9868950 | |
| }, | |
| { | |
| "uid": 430076824, | |
| "uname": "Y宇智波一打七Y", | |
| "face": "http://i2.hdslb.com/bfs/face/61d53c120dfd17ad35ab3104916c9f16a9a86223.jpg", | |
| "level": 0, | |
| "color": 9868950 | |
| }, | |
| { | |
| "uid": 88906297, | |
| "uname": "努力学习小张张", | |
| "face": "http://i2.hdslb.com/bfs/face/9382b5147f09de34f81b8306ab6390bdc73fca82.jpg", | |
| "level": 10, | |
| "color": 9868950 | |
| } | |
| ], | |
| "id": 633382, | |
| "lot_status": 2, | |
| "url": "https://live.bilibili.com/p/html/live-lottery/anchor-join.html?is_live_half_webview=1&hybrid_biz=live-lottery-anchor&hybrid_half_ui=1,5,100p,100p,000000,0,30,0,0,1;2,5,100p,100p,000000,0,30,0,0,1;3,5,100p,100p,000000,0,30,0,0,1;4,5,100p,100p,000000,0,30,0,0,1;5,5,100p,100p,000000,0,30,0,0,1;6,5,100p,100p,000000,0,30,0,0,1;7,5,100p,100p,000000,0,30,0,0,1;8,5,100p,100p,000000,0,30,0,0,1", | |
| "web_url": "https://live.bilibili.com/p/html/live-lottery/anchor-join.html" | |
| } | |
| }, | |
| "ANCHOR_NORMAL_NOTIFY": { | |
| "cmd": "ANCHOR_NORMAL_NOTIFY", | |
| "data": { | |
| "type": 1, | |
| "show_type": 1, | |
| "info": { | |
| "icon": "https://i0.hdslb.com/bfs/live/f3ebd37ee59991bc45538be58e68a6d3aa43ccca.png", | |
| "title": "", | |
| "content": "恭喜,获得推荐位buff加持,上推荐的几率大大提高,持续时间:2小时45分钟。" | |
| } | |
| } | |
| }, | |
| "ROOM_SKIN_MSG": { | |
| "cmd": "ROOM_SKIN_MSG", | |
| "skin_id": 221, | |
| "status": 1, | |
| "end_time": 1613751351, | |
| "current_time": 1605975351, | |
| "only_local": false, | |
| "scatter": { | |
| "min": 1, | |
| "max": 200 | |
| }, | |
| "skin_config": { | |
| "android": { | |
| "1": { | |
| "zip": "https://i0.hdslb.com/bfs/live/3a26e25968e75ec01fa6f26ac47ac00251e5b700.zip", | |
| "md5": "15D4D56998815113EB7F624082370738" | |
| } | |
| }, | |
| "ios": { | |
| "1": { | |
| "zip": "https://i0.hdslb.com/bfs/live/c678a14cdf7ffecbc5cf46e0eccfc01d9eb5f27e.zip", | |
| "md5": "A6E7F4DBB8578F4796F887A87464F26E" | |
| } | |
| }, | |
| "ipad": { | |
| "1": { | |
| "zip": "https://i0.hdslb.com/bfs/live/a47aac8e0277f8b3f71901758f191a9ba16e0ef7.zip", | |
| "md5": "0A1013B2A54A7BC31BD70B72DE5A469A" | |
| } | |
| }, | |
| "web": { | |
| "1": { | |
| "zip": "https://i0.hdslb.com/bfs/live/d0462c33a3d4e4dabbd185a0de1a193126532c04.zip", | |
| "md5": "9D662F8C8A021D88A4CB8C2491DA106F", | |
| "platform": "web", | |
| "version": "1", | |
| "headInfoBgPic": "https://i0.hdslb.com/bfs/live/11cd0f4f36ad9287210ba2eb3b9cc457fc553396.jpg", | |
| "giftControlBgPic": "https://i0.hdslb.com/bfs/live/26e05596dc66026fd371c73036bc28daea5528cf.jpg", | |
| "rankListBgPic": "https://i0.hdslb.com/bfs/live/951c6ef7cbd0d1e4a9320346a3630b7e8c79b4be.jpg", | |
| "mainText": "#FFfcce89", | |
| "normalText": "#FF9b7b4c", | |
| "highlightContent": "#FFd7993c", | |
| "border": "#339b7b4c" | |
| } | |
| } | |
| } | |
| }, | |
| "GIFT_BAG_DOT": { | |
| "cmd": "GIFT_BAG_DOT", | |
| "data": { | |
| "gift_id": 30607 | |
| } | |
| }, | |
| "SPECIAL_GIFT": { | |
| "cmd": "SPECIAL_GIFT", | |
| "data": { | |
| "39": { | |
| "action": "start", | |
| "content": "这个直播间已经被我们承包了!", | |
| "hadJoin": 0, | |
| "id": "2993570685114", | |
| "num": 1, | |
| "storm_gif": "http://static.hdslb.com/live-static/live-room/images/gift-section/mobilegift/2/jiezou.gif?2017011901", | |
| "time": 90 | |
| } | |
| } | |
| }, | |
| "PREPARING": { | |
| "cmd": "PREPARING", | |
| "roomid": "11365" | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import asyncio | |
| import logging | |
| from enum import IntEnum | |
| from json import dumps, loads | |
| from struct import Struct | |
| from zlib import decompress | |
| from aiohttp import ClientSession | |
| # from .base import HandlerBase | |
| logging.basicConfig(level=logging.INFO) | |
| STRUCT = Struct('>I2H2I') | |
| HOST = 'wss://broadcastlv.chat.bilibili.com:443/sub' | |
| class Operation(IntEnum): | |
| # TODO:研究切换房间和其他操作 | |
| HANDSHAKE = 0 | |
| HANDSHAKE_REPLY = 1 | |
| HEARTBEAT = 2 | |
| HEARTBEAT_REPLY = 3 | |
| NORMAL = 4 | |
| NORMAL_REPLY = 5 | |
| DISCONNECT_REPLY = 6 | |
| AUTH = 7 | |
| AUTH_REPLY = 8 | |
| RAW = 9 | |
| PROTO_READY = 10 | |
| PROTO_FINISH = 11 | |
| CHANGE_ROOM = 12 | |
| CHANGE_ROOM_REPLY = 13 | |
| REGISTER = 14 | |
| REGISTER_REPLY = 15 | |
| UNREGISTER = 16 | |
| UNREGISTER_REPLY = 17 | |
| class Socket: | |
| def __init__(self, room_id, uid=0, heartbeat_interval=30, session: ClientSession = None, | |
| loop=None): | |
| if loop: | |
| self.loop = loop | |
| elif session: | |
| self.loop = session.loop # client.loop property is deprecated | |
| else: | |
| self.loop = asyncio.get_event_loop() | |
| self.session = session if session else ClientSession(loop=self.loop) | |
| self.uid = uid | |
| self.heartbeatInterval = heartbeat_interval | |
| self.future = None | |
| self.websocket = None | |
| self.room_id = None | |
| self.token = None | |
| asyncio.gather(self.room_init(room_id), loop=self.loop) | |
| async def room_init(self, room_id): | |
| async with self.session.get('https://api.live.bilibili.com/xlive/web-room/v1/index/getRoomPlayInfo', | |
| params={'room_id': room_id}) as resp: | |
| data = await resp.json() | |
| self.room_id = data['data']['room_id'] | |
| async with self.session.get('https://api.live.bilibili.com/xlive/web-room/v1/index/getDanmuInfo', | |
| params={'id': self.room_id}) as resp: | |
| data = await resp.json() | |
| self.token = data['data']['token'] | |
| def start(self): | |
| self.future = self.loop.create_task(self.msg_loop()) | |
| return self.future | |
| async def msg_loop(self): | |
| async with self.session.ws_connect(HOST) as websocket: | |
| self.websocket = websocket | |
| await self.auth() | |
| print(0) | |
| self.loop.create_task(self.heartbeat_loop()) | |
| async for msg in websocket: | |
| await self.unpack(msg.data) | |
| async def auth(self): | |
| auth = { | |
| # 'uid': self.uid, | |
| 'roomid': self.room_id, | |
| # 'protover': 2, | |
| # 'platform': 'web', | |
| # 'clientver': '2.4.111', # 随时可能更新 | |
| # 'type': 2, | |
| # 'key': self.token | |
| } | |
| await self.send(auth, Operation.AUTH) | |
| async def heartbeat_loop(self): | |
| heartbeat = '[object Object]' | |
| while True: | |
| await self.send(heartbeat, Operation.HEARTBEAT) | |
| await asyncio.sleep(30) | |
| async def send(self, body, operation): | |
| if type(body) is dict: | |
| body = dumps(body).encode('utf-8') | |
| elif type(body) is str: | |
| body = body.encode('utf-8') | |
| header = STRUCT.pack( | |
| STRUCT.size + len(body), # 封包总大小(头部大小+正文大小) | |
| STRUCT.size, # 头部大小(一般为0x12) | |
| 1, # 协议版本 | |
| operation.value, # 操作码(包类型) | |
| 1 # 请求次数 | |
| ) | |
| await self.websocket.send_bytes(header + body) | |
| async def unpack(self, msg): | |
| header = STRUCT.unpack(msg[:16]) | |
| if header[3] == 3: # 心跳包回复,返回数字(人气值) | |
| print(int.from_bytes(msg[16:], 'big')) | |
| elif header[3] == 5: # 普通包 | |
| if header[2] == 0: # 没有zlib压缩 | |
| print(loads(msg[16:header[0]].decode('utf-8'))) | |
| elif header[2] == 2: # 有zlib压缩 | |
| await self.unpack(decompress(msg[16:])) # 其实zlib压缩是把一堆普通包打包在一起了 | |
| elif header[3] == 8: # 认证包 | |
| print(msg[16:].decode('utf-8')) | |
| if msg[header[0]:]: # zlib压缩过的大包解析完第一个后,剩下的继续解析 | |
| await self.unpack(msg[header[0]:]) | |
| async def main(): | |
| n = 0 | |
| loop = asyncio.get_running_loop() | |
| async with ClientSession() as session: | |
| await Socket(input(), uid=160148624, session=session, loop=loop).start() | |
| if __name__ == '__main__': | |
| try: | |
| asyncio.run(main()) | |
| except: | |
| pass |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment