Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Panda失效 #16

Open
qiudaomao opened this issue Jul 13, 2017 · 26 comments
Open

Panda失效 #16

qiudaomao opened this issue Jul 13, 2017 · 26 comments

Comments

@qiudaomao
Copy link

http://m.panda.tv/66666
这个API似乎不再可用了
http://www.panda.tv/ajax_chatroom?roomid=%s&_=%s'%(roomId, str(int(time.time())))

@subtank
Copy link

subtank commented Jul 14, 2017

顶一个

@songtianyi
Copy link

import time, sys

from danmu import DanMuClient

def pp(msg):
    print(msg.encode(sys.stdin.encoding, 'ignore').
        decode(sys.stdin.encoding))

#dmc = DanMuClient('https://www.douyu.com/32892')
#dmc = DanMuClient('https://live.bilibili.com/324')
dmc = DanMuClient('https://www.panda.tv/66666')

if not dmc.isValid(): print('Url not valid')

@dmc.danmu
def danmu_fn(msg):
    pp('[%s] %s' % (msg['NickName'], msg['Content']))

@dmc.gift
def gift_fn(msg):
    pp('[%s] sent a gift!' % msg['NickName'])

@dmc.other
def other_fn(msg):
    pp('Other message received')

dmc.start(blockThread=True)

+1

@songtianyi
Copy link

@fuzhuo
@subtank
chatroom --> chatinfo

@subtank
Copy link

subtank commented Jul 16, 2017

@songtianyi ???

@subtank
Copy link

subtank commented Jul 16, 2017

后一条看不懂,修改哪里

@qiudaomao
Copy link
Author

@songtianyi thanks, 看起来可以
http 'http://www.panda.tv/ajax_chatinfo?roomid=66666&_=1500220999'

@subtank
Copy link

subtank commented Jul 16, 2017

@songtianyi 搞定,万分感谢。
@fuzhuo 你去修改一下Python\Lib\site-packages\danmu\目录下的32行代码就好了

@songtianyi
Copy link

@subtank
你们能连上服务器不,我这边还是没反应

@subtank
Copy link

subtank commented Jul 16, 2017

@songtianyi 可以了,你要修改我说的那个文件对应位置

@songtianyi
Copy link

@subtank
改了啊,是我提出的方法啊

@subtank
Copy link

subtank commented Jul 16, 2017

那就不知道了

@qiudaomao
Copy link
Author

@subtank 提个PR吧

@songtianyi
Copy link

@subtank
@fuzhuo
你们了解他发的内容不,我不是很懂python
第一个包

4 byte 消息类型

2 byte 数据大小,不包括消息类型

数据

4 byte 心跳包

不知道为什么第一个认证包 要带上心跳包

@qiudaomao
Copy link
Author

@songtianyi
我是做了个objc的实现,第一个心跳包是单独发的不是带上的吧?
难道不是先发个房间认证包,包含rid appid ts sign authType之类的
再发第一个心跳包
接下来进入异步读取弹幕消息的循环
然后开始定时发心跳包

@songtianyi
Copy link

@fuzhuo
作者的第一个心跳包是和认证包一起的。
你的能work不?

@qiudaomao
Copy link
Author

@songtianyi 可以work,我是分开发的,tvOS上正常弹幕。但没试过不知道第一个心跳包有没有时间限制,也许在超时前发就好了

@songtianyi
Copy link

@fuzhuo
你是按照我刚才说的 协议方式发的不?
数据大小 2个字节,一般都是用4个字节的,所以我有点怀疑。

@qiudaomao
Copy link
Author

@songtianyi 发送时数据大小不是两个字节而是一个字节吧,也许熊猫觉得进入房间的字符串长度是比较固定的不会超过256一个字节足以。这个python里第一个心跳确实一起发了,我分开发也没问题
data = (b'\x00\x06\x00\x02\x00' + pack('B', len(data)) +
data.encode('utf8') + b'\x00\x06\x00\x00')

@songtianyi
Copy link

songtianyi commented Jul 17, 2017

@fuzhuo
两个字节啊,

\x00\x06\x00\x02\x00

最后的\x00 其实是长度的前半部分,作者的实现是有问题的。
你是直接用的他的代码还是自己开发的?

@qiudaomao
Copy link
Author

@songtianyi 嗯,多谢,你这样理解应该更合理,多出一字节有点怪怪的,可能在实际使用过程中长度没遇到过超过256,于是那个字节固定是0x00,所以作者的实现暂时使用不会出问题。我的是自己开发的oc版,但协议跟作者的实现用的一样的

@songtianyi
Copy link

@fuzhuo
看来我还是得自己抓包看下才行

@qiudaomao
Copy link
Author

@songtianyi 除非遇到验证包的长度值一个字节容纳不了才能验证你的想法,估计很难验证了

@songtianyi
Copy link

目前来看,panda的弹幕协议设计的比较混乱,收到的包不带长度,固定以ack开头,中间有一段不固定长度的内容,之后是json弹幕。
buffer要留的足够大即可。

@songtianyi
Copy link

不过我跑一段时间 会出现EOF

@subtank
Copy link

subtank commented Oct 12, 2017

@fuzhuo 又挂了求帮忙。

@rwifeng
Copy link

rwifeng commented Nov 12, 2017

又挂了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants