mirror of
https://github.com/wbt5/real-url.git
synced 2025-07-30 21:32:14 +08:00
新增火猫直播弹幕
This commit is contained in:
parent
0db383cb5e
commit
9f2d7f6e6b
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
*/__pycache__/
|
@ -8,7 +8,7 @@
|
||||
|
||||
**26** 个直播平台的直播源获取:斗鱼直播、虎牙直播、哔哩哔哩直播、战旗直播、网易 CC 直播、火猫直播、企鹅电竞、YY 直播、一直播、快手直播、花椒直播、映客直播、西瓜直播、触手直播、NOW 直播、抖音直播,爱奇艺直播、酷狗直播、龙珠直播、PPS 奇秀直播、六间房、17 直播、来疯直播、优酷轮播台、网易 look 直播、千帆直播。
|
||||
|
||||
**4** 个直播平台的弹幕获取:斗鱼直播、虎牙直播、哔哩哔哩直播、快手直播。
|
||||
**5** 个直播平台的弹幕获取:斗鱼直播、虎牙直播、哔哩哔哩直播、快手直播、火猫直播。
|
||||
|
||||
## 运行
|
||||
|
||||
@ -23,7 +23,9 @@
|
||||
|
||||
## 更新
|
||||
|
||||
### 2020.06.18:新增弹幕功能
|
||||
### 2020.06.19:新增火猫直播弹幕获取
|
||||
|
||||
2020.06.18:新增弹幕功能
|
||||
|
||||
- 添加斗鱼、虎牙、哔哩哔哩和快手 4 个平台的弹幕获取。后续添加其他平台。
|
||||
- 实现弹幕功能的代码和思路主要来自:[danmaku](https://github.com/IsoaSFlus/danmaku) 和 [ks_barrage](https://github.com/py-wuhao/ks_barrage),感谢两位大佬!
|
||||
|
@ -6,6 +6,7 @@ from .bilibili import Bilibili
|
||||
from .douyu import Douyu
|
||||
from .huya import Huya
|
||||
from .kuaishou import KuaiShou
|
||||
from .huomao import HuoMao
|
||||
|
||||
__all__ = ['DanmakuClient']
|
||||
|
||||
@ -26,7 +27,8 @@ class DanmakuClient:
|
||||
for u, s in {'douyu.com': Douyu,
|
||||
'live.bilibili.com': Bilibili,
|
||||
'huya.com': Huya,
|
||||
'kuaishou.com': KuaiShou}.items():
|
||||
'huomao.com': HuoMao,
|
||||
'kuaishou.com': KuaiShou,}.items():
|
||||
if re.match(r'^(?:http[s]?://)?.*?%s/(.+?)$' % u, url):
|
||||
self.__site = s
|
||||
break
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
49
danmu/danmaku/huomao.py
Normal file
49
danmu/danmaku/huomao.py
Normal file
@ -0,0 +1,49 @@
|
||||
import struct
|
||||
import aiohttp
|
||||
import json
|
||||
|
||||
|
||||
class HuoMao:
|
||||
heartbeat = b'\x00\x00\x00\x10\x00\x10\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01'
|
||||
# heartbeat = struct.pack('!ihhii', 16,16,1,2,1)
|
||||
heartbeatInterval = 30
|
||||
|
||||
@staticmethod
|
||||
async def get_ws_info(url):
|
||||
goim = 'http://www.huomao.com/ajax/goimConf?type=h5'
|
||||
headers = {
|
||||
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, '
|
||||
'like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'}
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(goim, headers=headers) as resp:
|
||||
info = json.loads(await resp.text())
|
||||
webSocketUrls = info.get('host_wss', 0)
|
||||
rid = int(url.split('/')[-1])
|
||||
reg_datas = []
|
||||
tokenBody = json.dumps({"Uid": 0, "Rid": rid}, separators=(',', ':'))
|
||||
bodyBuf = tokenBody.encode('ascii')
|
||||
headerBuf = struct.pack('!ihhii', (16 + len(bodyBuf)), 16, 1, 7, 1)
|
||||
data = headerBuf + bodyBuf
|
||||
reg_datas.append(data)
|
||||
return webSocketUrls, reg_datas
|
||||
|
||||
@staticmethod
|
||||
def decode_msg(data):
|
||||
packetLen, headerLen, ver, op, seq = struct.unpack('!ihhii', data[0:16])
|
||||
msgs = []
|
||||
msg = {'name': '', 'content': '', 'msg_type': 'other'}
|
||||
if op == 5:
|
||||
offset = 0
|
||||
while offset < len(data):
|
||||
packetLen, headerLen, ver = struct.unpack('!ihh', data[offset:(offset + 8)])
|
||||
msgBody = data[offset + headerLen:offset + packetLen]
|
||||
offset += packetLen
|
||||
body = json.loads(msgBody.decode('utf8'))
|
||||
if body.get('code', 0) == '100001':
|
||||
msg['name'] = body['speak']['user']['name']
|
||||
msg['content'] = body['speak']['barrage']['msg']
|
||||
msg['msg_type'] = 'danmaku'
|
||||
msgs.append(msg.copy())
|
||||
return msgs
|
||||
msgs.append(msg)
|
||||
return msgs
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user