1
0
mirror of https://github.com/wbt5/real-url.git synced 2025-07-28 03:20:31 +08:00

新增2个平台

This commit is contained in:
wbt5 2020-08-18 21:52:56 +08:00
parent ed4c68a1ec
commit 47e8538164

View File

@ -1,23 +1,26 @@
import aiohttp
import asyncio import asyncio
import re import re
import aiohttp
from ._173 import YiQiShan
from .acfun import AcFun
from .bilibili import Bilibili from .bilibili import Bilibili
from .cc import CC
from .douyu import Douyu from .douyu import Douyu
from .huya import Huya
from .kuaishou import KuaiShou
from .huomao import HuoMao
from .egame import eGame from .egame import eGame
from .huajiao import HuaJiao from .huajiao import HuaJiao
from .huomao import HuoMao
from .huya import Huya
from .inke import Inke from .inke import Inke
from .cc import CC from .kuaishou import KuaiShou
from .kugou import KuGou from .kugou import KuGou
from .zhanqi import ZhanQi from .laifeng import LaiFeng
from .longzhu import LongZhu from .longzhu import LongZhu
from .look import Look
from .pps import QiXiu from .pps import QiXiu
from .qf import QF from .qf import QF
from .laifeng import LaiFeng from .zhanqi import ZhanQi
from .look import Look
__all__ = ['DanmakuClient'] __all__ = ['DanmakuClient']
@ -50,14 +53,16 @@ class DanmakuClient:
'pps.tv': QiXiu, 'pps.tv': QiXiu,
'qf.56.com': QF, 'qf.56.com': QF,
'laifeng.com': LaiFeng, 'laifeng.com': LaiFeng,
'look.163.com': Look}.items(): 'look.163.com': Look,
'acfun.cn': AcFun,
'173.com': YiQiShan}.items():
if re.match(r'^(?:http[s]?://)?.*?%s/(.+?)$' % u, url): if re.match(r'^(?:http[s]?://)?.*?%s/(.+?)$' % u, url):
self.__site = s self.__site = s
self.__u = u self.__u = u
break break
if self.__site is None: if self.__site is None:
print('Invalid link!') print('Invalid link!')
exit exit()
self.__hs = aiohttp.ClientSession() self.__hs = aiohttp.ClientSession()
async def init_ws(self): async def init_ws(self):
@ -108,14 +113,89 @@ class DanmakuClient:
for m in ms: for m in ms:
await self.__dm_queue.put(m) await self.__dm_queue.put(m)
count += 1 count += 1
await self.heartbeats()
async def init_ws_acfun(self, s):
self.__ws = await self.__hs.ws_connect(self.__site.ws_url)
await self.__ws.send_bytes(s.encode_packet('register'))
async def ping_acfun(self, s):
while True:
await asyncio.sleep(1)
await self.__ws.send_bytes(s.encode_packet('ping'))
async def keepalive_acfun(self, s):
while True:
await asyncio.sleep(50)
await self.__ws.send_bytes(s.encode_packet('keepalive'))
async def heartbeat_acfun(self, s):
while True:
await asyncio.sleep(10)
await self.__ws.send_bytes(s.encode_packet('ztlivecsheartbeat'))
async def fetch_danmaku_acfun(self, s):
count = 0
async for msg in self.__ws:
self.__link_status = True
ms = s.decode_packet(msg.data)
if count == 0:
await self.__ws.send_bytes(s.encode_packet('ztlivecsenterroom'))
count += 1
for m in ms:
await self.__dm_queue.put(m)
async def init_ws_173(self, s):
self.__ws = await self.__hs.ws_connect(self.__site.ws_url)
await self.__ws.send_bytes(s.pack('startup'))
await asyncio.sleep(1)
await self.__ws.send_bytes(s.pack('enterroomreq'))
async def tcphelloreq_173(self, s):
while True:
await asyncio.sleep(10)
await self.__ws.send_bytes(s.pack('tcphelloreq'))
async def roomhelloreq_173(self, s):
while True:
await asyncio.sleep(5)
await self.__ws.send_bytes(s.pack('roomhelloreq'))
async def fetch_danmaku_173(self, s):
async for msg in self.__ws:
self.__link_status = True
ms = s.unpack(msg.data)
for m in ms:
await self.__dm_queue.put(m)
async def start(self): async def start(self):
if self.__u == 'huajiao.com': if self.__u == 'huajiao.com':
await self.init_ws_huajiao() await self.init_ws_huajiao()
elif self.__u == 'acfun.cn':
rid = re.search(r'\d+', self.__url).group(0)
s = self.__site(rid)
await self.init_ws_acfun(s)
await asyncio.gather(
self.ping_acfun(s),
self.fetch_danmaku_acfun(s),
self.keepalive_acfun(s),
self.heartbeat_acfun(s),
)
elif self.__u == '173.com':
rid = self.__url.split('/')[-1]
s = self.__site(rid)
await self.init_ws_173(s)
await asyncio.gather(
self.fetch_danmaku_173(s),
self.tcphelloreq_173(s),
self.roomhelloreq_173(s),
)
else: else:
await self.init_ws() await self.init_ws()
await asyncio.gather( await asyncio.gather(
self.heartbeats(), self.heartbeats(),
self.fetch_danmaku(), self.fetch_danmaku(),
) )
async def stop(self):
self.__stop = True
await self.__hs.close()