资源简介
bilibili_danmu, B 站直播弹幕姬 Python 版
代码片段和文件信息
import asyncio
import aiohttp
import xml.dom.minidom
import random
import json
from struct import *
import json
import config
import re
class bilibiliClient():
def __init__(self):
self._CIDInfoUrl = ‘http://live.bilibili.com/api/player?id=cid:‘
self._roomId = 0
self._ChatPort = 788
self._protocolversion = 1
self._reader = 0
self._writer = 0
self.connected = False
self._UserCount = 0
self._ChatHost = ‘livecmt-1.bilibili.com‘
self._roomId = input(‘请输入房间号:‘)
self._roomId = int(self._roomId)
async def connectServer(self):
print (‘正在进入房间。。。。。‘)
with aiohttp.ClientSession() as s:
async with s.get(‘http://live.bilibili.com/‘ + str(self._roomId)) as r:
html = await r.text()
m = re.findall(r‘ROOMID\s=\s(\d+)‘ html)
ROOMID = m[0]
self._roomId = int(ROOMID)
async with s.get(self._CIDInfoUrl + ROOMID) as r:
xml_string = ‘‘ + await r.text() + ‘ ‘
dom = xml.dom.minidom.parseString(xml_string)
root = dom.documentElement
server = root.getElementsByTagName(‘server‘)
self._ChatHost = server[0].firstChild.data
reader writer = await asyncio.open_connection(self._ChatHost self._ChatPort)
self._reader = reader
self._writer = writer
print (‘链接弹幕中。。。。。‘)
if (await self.SendJoinChannel(self._roomId) == True):
self.connected = True
print (‘进入房间成功。。。。。‘)
print (‘链接弹幕成功。。。。。‘)
await self.ReceiveMessageLoop()
async def HeartbeatLoop(self):
while self.connected == False:
await asyncio.sleep(0.5)
while self.connected == True:
await self.SendSocketData(0 16 self._protocolversion 2 1 ““)
await asyncio.sleep(30)
async def SendJoinChannel(self channelId):
self._uid = (int)(100000000000000.0 + 200000000000000.0*random.random())
body = ‘{“roomid“:%s“uid“:%s}‘ % (channelId self._uid)
await self.SendSocketData(0 16 self._protocolversion 7 1 body)
return True
async def SendSocketData(self packetlength magic ver action param body):
bytearr = body.encode(‘utf-8‘)
if packetlength == 0:
packetlength = len(bytearr) + 16
sendbytes = pack(‘!IHHII‘ packetlength magic ver action param)
if len(bytearr) != 0:
sendbytes = sendbytes + bytearr
self._writer.write(sendbytes)
await self._writer.drain()
async def ReceiveMessageLoop(self):
while self.connected == True:
tmp = await self._reader.read(4)
expr = unpack(‘!I‘ tmp)
tmp = await self._reader.read(2)
tmp = await self._reader.read(2)
tmp = await self._reader.read(4)
num = unpack(‘!I‘ tmp)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-07-14 13:43 bilibili_danmu-master\
文件 50 2017-07-14 13:43 bilibili_danmu-master\.gitignore
文件 720 2017-07-14 13:43 bilibili_danmu-master\README.md
文件 5796 2017-07-14 13:43 bilibili_danmu-master\bilibiliClient.py
文件 31 2017-07-14 13:43 bilibili_danmu-master\config.py
文件 423 2017-07-14 13:43 bilibili_danmu-master\main.py
- 上一篇:misvm 多支持向量机.zip
- 下一篇:python实现日常记账本小程序
相关资源
- 轻量级PythonWeb框架Mole.zip
- Python爬虫开源项目代码
- 基于开源框架Flask的教务系统的设计与
- chainerrl 在Chainer之上,ChainerRL是一个深
- IMU/GNSS开源仿真工具
- Python开源量化平台框架支持A股基于
- Vivecraft_110 用于Minecraft的VR mod 版本
- Python-Intel开源增强学习框架Coach
- facebook开源项目prophet python模块fbprop
- 数据之魅中文版:基于开源工具的数
- Python-PermaNote是基于Sandstorm开源的个人
- 基于MongoDB的日志系统Mongodb-Log.zip
- Python-爬取各种开源软件的官方仓库历
- MySQL客户端库PyMySQL.zip
- misvm 多支持向量机.zip
- python-bitcoin-blockchain-parser 一个 python
- bayespy 贝叶斯 python.zip
- HFO 在 Robocup 2D 足球游戏中,半场进攻
- YouMoney有钱记账一个python写的开源的个
- paillier 纯 python Paillier同态密码.zip
- fancyimpute 在 python 中,实现了多元插值
- Python WxPython开源扫雷游戏PyMine新版1
- 基于Python的三维重建开源代码
- Websocket客户端Websocket-Client.zip
- proxy.py 在 python 中,轻量级的HTTP代理
- Python-Meshroom一个基于AliceVision框架的免
- Python项目 | 「Park at ease」停车场管理
- 开源的python地图
评论
共有 条评论