有了冯提莫斗鱼直播房间号房间号怎么找到房间号看直播

如何获取斗鱼直播间的弹幕信息? - 知乎<strong class="NumberBoard-itemValue" title="被浏览<strong class="NumberBoard-itemValue" title="8,472分享邀请回答#安装Python客户端
pip3 install danmu.fm
# 比如主播的直播间
danmu.fm http://www.douyutv.com/16789
danmu.fm 16789
#安装Ruby客户端
gem install danmu
danmu douyu [room_id/url]
danmu douyu qiuri
danmu douyu http://www.douyutv.com/13861
就可以看到如下结果咯0.前言前几天(寒假前咯)闲着无聊,看到舍友们都在看斗鱼TV,虽然我对那些网络游戏都不是非常感兴趣,但是我突然间想到,如果我可以获取上面的弹幕内容,不就有点意思了么?1.分析阶段如果我想要抓取网页上面的东西,无非就是两种方法使用浏览器,手工(自己点击)或者非手工(使用JS脚本),存取我想要的东西。编写HTTP客户端(斗鱼无HTTPS通讯)第一种方法是万能的,但显然是不行的, 原因如下:手动保存实在是不可行,程序员不为也。浏览器与本地交互有限,换而言之,也就是即使我抓取了对应的弹幕,我也没有办法解决持久化的问题。假设你选择的是Chrome或者firefox浏览器,也不是不能实现持久化,但这需要写扩展,Chrome扩展没有写过,也不是很感兴趣。第二种方法显然是一个正常的程序员的做法。语言选用Ruby写一个客户端,也就是写一个小爬虫,使用的场景:用户在终端执行命令gem install danmu
danmu douyu [room_id/url]
danmu douyu qiuri
danmu douyu http://www.douyutv.com/13861
然后就可以在终端欣赏弹幕咯.回想一下抓取网站的方法四步走:请求网页(原始数据) - 提取数据(提纯数据) - 保存数据 - 分析数据很显然,只要解决了请求网页,其他的也就无非解析和SQL语句什么的。1.1.斗鱼TV弹幕抓取的思路确定如果是像我上面说的那么简单,也就不必再写一篇文章。毕竟,网页小爬虫没有什么技术含量。分布式爬虫才有。通常情况下的网页小爬虫无非要解决如下问题:请求,如果对方有一定策略的反爬虫,那需要反反爬虫。比如,header带上host,带上refer,带上其他需要验证,那就申请用户名和密码,然后登陆如果在登录时期有防跨站机制,那就先获取一次登录页面,然后解析出token,带上对应的token然后登陆。在程序中加入Log,并且存到本地。防止出现各种各样的反爬虫机制ban掉了程序,从而方便进行下一步防反爬虫对策。并且,由于请求响应机制的存在,通常情况下,每一个请求对应一个响应,如果出错了,要么超时,要么有状态码,所以普通的web爬虫也相对而言比较容易些。那么,斗鱼TV的站点是不是这样子的就能够容易爬取呢?你猜到了,答案是“不是”。由于弹幕具有实时性,就决定了斗鱼TV的弹幕无法通过保存完整指定时间端弹幕的XML(比如BILIBILI的一个视频弹幕是存在一段xml中的)或者Json数据来显示弹幕。要不然的话,那主播操作很出色的时候,观众的弹幕岂不是无法实时显示了么?那么,肯定就是WebSocket了,于是,我一如既往的打开F12,查看网络流量。正如你想到的那样,没有任何的弹幕流量来往。一个WebSocket的消息都没有。那么,消息肯定是有的,但是消息并不是通过HTTP协议或者WebSocket协议传输的,那么问题会出在哪呢?分析前端的代码,找出获取弹幕的JS代码,苦于代码太多,找了很久没有找到。那也就是执行逻辑可能在flash里面。于是祭出大杀器WireShark,抓一下流量。终于看到弹幕的样子了。是这样的。原来使用的是Flash的Socket功能。那么,我们只需要模拟Socket的每一条消息就好了.多分析几组数据,但还是对发送消息内容缺乏把握,特别是在用户认证,用户接收弹幕这一块。在搜索引擎上搜索了一阵,发现知乎上有个帖子,读完终于解了我的疑惑。地址为: 在此基础上,省略若干消息分析过程。总结后得出斗鱼TV网站的服务器分布。1.2.房间信息和弹幕认证服务器获取首先我们拿随便一个主播房间来说,比如,qiuriTa的房间链接分为两种[房间对这个主播房间页面请求,正常,所有的有用信息都不是放在HTML中渲染出来,而是有一条放在HTML中内置的JS脚本中,这是为了减少服务器渲染HTML的压力?可是渲染放在JS里面不也一样需要渲染?(不明白)总之,就是程序先加载没有具体数据填充页面,然后JS更新数据。内置的两段JS脚本,JS脚本中有两个变量,该变量很容易转换成JSON数据,也就是两段JSON数据,一个是关于主播的个人信息,另一个是关于弹幕认证服务器的列表(该列表中的任意一个服务器均可以认证,但每一次请求主播页面得到的认证服务器列表都不一样)通过这步,我们就拿到了主播的信息以及弹幕服务器的认证地址,端口。1.3.发送Socket消息的流程简介我们通过抓包,分析那一大坨数据包,可以确定以下通过以下的流程便可以获取弹幕消息。(分析过程比较繁琐)首先建立两个Socket。一个用于认证(),另一个用户获取弹幕()。步骤1:
发送消息登陆,获取消息1解析出匿名用户的用户名,再获取消息2解析出gid步骤2:
发送qrl消息,获取两个没有什么用的消息步骤3:
发送keeplive消息步骤4:
发送伪登陆消息(所有匿名用户都一样只需要输入步骤一中用户名就行了,因为认证已经在上面做过了)步骤5:
发送join_group消息需要步骤一中国的gid步骤6:
不断的recv消息就可以获取弹幕消息了后面会详细解释2.1.消息Socket消息格式以及发送一条消息既然是发消息,那么每条消息总是有些格式的。斗鱼的消息格式大致如下:每一条消息并遵循下面的格式:1.通信协议长度,后四个部分的长度,四个字节2.第二部分与第一部分一样3.请求代码,发送给斗鱼的话,内容为0xb1,0x02, 斗鱼返回的代码为0xb2,0x024.发送内容5.末尾字节# -*- encoding : utf-8 -*-
class Message
# 向斗鱼发送的消息
# 1.通信协议长度,后四个部分的长度,四个字节
# 2.第二部分与第一部分一样
# 3.请求代码,发送给斗鱼的话,内容为0xb1,0x02, 斗鱼返回的代码为0xb2,0x02
# 4.发送内容
# 5.末尾字节
#pack('c*')是字节数组转字符串的一种诡异的转化方式
def initialize(content)
@length = [content.size + 9,0x00,0x00,0x00].pack('c*')
@code = @length.dup
@magic = [0xb1,0x02,0x00,0x00].pack('c*')
@end = [0x00].pack('c*')
@length + @code + @magic + @content + @end
经过封装,我们仅仅关注那些可见的字符串,也就是Content部分就可以了。content部分,也就是发送消息的内容,在文章后面将会详解。开启两个Socket,一个用户认证,另一个用于弹幕的获取。用于用户弹幕认证的,是2.1中所说的认证服务器列表中任意一个。挑选出来一组ip和端口 = TCPSocket.new ,用户获取弹幕的只要为danmu.douyutv.com:8601
danmu.douyutv.com:8602
danmu.douyutv.com:12601
danmu.douyutv.com:12602
四组域名:端口均可以作为如下的DANMU_SERVER和PORT = TCPSocket.new DANMU_SERVER,DANMU_PORT发送一条消息只需如此
data = "type@=loginreq/username@="+@username+"/password@=3456/roomid@=" + @room_id.to_s + "/"
all_data = message(data)
@danmu_socket.write all_data
把需要传输的字符串放进去就好了.接下来,我们需处理上面说的六个步骤2.2.发送消息详细流程之步骤一发送消息内容为:type@=loginreq/username@=/ct@=0/password@=/roomid@=156277/devid@=DF9E6B39F8D8A2E928BB7C/rt@=/vk@=4fc6e613fc650aed6c8a619/ver@=/我们需要注意的内容如下:type 表示消息的类型登陆消息为loginreq
username 不需要,请求登陆以后系统会自动的返回对应的游客账号。
ct 不清楚什么意思,默认为0并无影响
password 不需要
roomid 房间的id
devid 为设备标识,无所谓,所以我们使用随机的UUID生成
rt 应该是runtime吧,时间戳
vk 为时间戳+"7oE9nPEG9xXV69phU31FYCLUagKeYtsF"+devid的字符串拼接结果的MD5值(这个是参考了一篇文章,关于这一处我也不大明白怎么探究出来的)
通过这一步,我们可以获取两条消息,并从消息中使用正则表达式获取对应的用户名以及gid
str = @danmu_auth_socket.recv(4000)
@username= str[/\/username@=(.+)\/nickname/,1]
str = @danmu_auth_socket.recv(4000)
@gid = str[/\/gid@=(\d+)\//,1]
2.3.发送消息详细流程之步骤二发送的消息内容为"type@=qrl/rid@=" + .to_s + "/"无需多说,类型为qrl,rid为roomid,直接发送这条消息就好。返回的两条消息也没有什么价值。
= "type@=qrl/rid@=" + @room_id.to_s + "/"
msg = message(data)
@danmu_auth_socket.write msg
str = @danmu_auth_socket.recv(4000)
str = @danmu_auth_socket.recv(4000)
2.4.发送消息详细流程之步骤三发送的消息内容为"type@=keeplive/tick@=" + timestamp + "/vbw@=0/k@=19beba41da8ac2b4c7895a66cab81e23/"直接发送。无太大意义。
data = "type@=keeplive/tick@=" + timestamp + "/vbw@=0/k@=19beba41da8ac2b4c7895a66cab81e23/"
msg = message(data)
@danmu_auth_socket.write msg
str = @danmu_auth_socket.recv(4000)
前三步,也就是2.2-2.3-2.4三步骤,也就是使用 完成获取username和gid的重要步骤。获取这两个字段以后,也就完成了它存在的使命。接下来的就是获取弹幕的时候了!2.5.发送消息详细流程之步骤四消息内容为:"type@=loginreq/username@="++"/password@=3456/roomid@=" +.to_s + "/"和上面2.2中略有不同。但是,需要注意的是
username 为2.2中所得到的username
password 的值得变化
data = "type@=loginreq/username@="+@username+"/password@=3456/roomid@=" + @room_id.to_s + "/"
all_data = message(data)
@danmu_socket.write all_data
str = @danmu_socket.recv(4000)
2.6.发送消息详细流程之步骤五接下来就是完成认证的最后一步了,join_group的消息内容为"type@=joingroup/rid@=" + .to_s + "/gid@="++"/"gid为2.2中所得到的gid。
= "type@=joingroup/rid@=" + @room_id.to_s + "/gid@="+@gid+"/"
msg = message(data)
@danmu_socket.write msg
2.7.发送消息详细流程之步骤六获取弹幕,并且打印出来。
danmu_data = @danmu_socket.recv(4000)
type = danmu_data[danmu_data.index("type@=")..-3]
puts type.gsub('sui','').gsub('@S','/').gsub('@A=',':').gsub('@=',':').split('/')
后三步,则是 获取弹幕的步骤。于是,通过这些步骤,就可以完成了简单的danmu的核心代码,接下来的步骤就是完善,重构这些代码了。总结痛点一,至今还没有解决rtmp地址的获取找了很久没有办法解决rtmp地址的自动获取:路径如下这一处的请求不是XHR,也就是不是JS脚本通过XMLHttpRequest异步加载;那么,八成是flash通过http协议获取的。我估计八成执行逻辑应该是在flash之中。也就不方便获取其中的sign值.故,暂时无法解析rtmp视频流地址了效果图和代码效果图:我擦,居然不能传输gif图片.请移步到这里查看吧.代码的地址为:技术浅薄,还请轻拍。参考链接PS:如果有问题可以在下方留言或者发送email到给我。18956 条评论分享收藏感谢收起30061 条评论分享收藏感谢收起斗鱼直播怎么看房间号?
点击下面第二个就看到了
首先你得确定你开了斗鱼直播伴侣进行直播,还有就是直播分类是否选择在dota上面!!!你看下你自己房间的分类标签嘛,如果需要设置,在右上角那里的设置里面可以重新设置房间的所有内容
就是房间号598444呀,点关注开播的时候就知道了
早就去熊猫TV了, 你是多久没看斗鱼了
就是网址最好的那几个字母或数字
金荷音斗鱼直播房间名是 韩国美女主播 : Dorothy地址 www.douyutv.com/311911?fromuid=1041752
www.douyutv.com/56229
现在魔兽争霸都被斗鱼放在了其它游戏分类里面了,你可以自己去看看
没有了,斗鱼整顿了,现在什么都不让漏,看不到福利
看了露手卡牌直播钻石局 我真晕了 第一次被劫单杀 挖掘机抓中劫给她一套一引燃残血 她黄牌定住 看挖掘机和劫死战还不跑不拉开距离 也不知道放Q 竟然朝着劫怀里放了个死亡闪现让劫丝血逃生 第二次被杀看别人打然后点过去走 等画面切回自己的时候已经快被劫打死了 第三次又是挖掘机帮她抓她又贴脸上Q忘放临死一个原地闪现 第四次又是切屏看别人去支援等切回来被瞎子打死 第五次径直走到团队最最前面被瞎子Q牛头顶起 一个死亡原地闪现 从头到尾插了两个眼 作为一带传送卡牌就支援三次队友 一次去打死一个自己Q上来的瞎子 剩下两次不知道大招距离看圈圈途中被打死 这阿姨可以上青铜搞笑第一名了
Copyright &
就爱阅读网 All Rights Reserved. 鲁ICP备号-4
声明:文章《斗鱼直播怎么看房间号?》由就爱阅读网友共享发布,目的只是为了归纳学习和传递资讯
所有作品版权归原创作者所有,与本站立场无关,如用户分享不慎侵犯了您的权益,请联系我们告知,我们将做删除处理!斗鱼pp欢每日直播录像 房间号306774_腾讯视频
三倍流畅播放
1080P蓝光画质
新剧提前看
1080P蓝光画质
纯净式无框播放器
三倍流畅播放
扫一扫 手机继续看
下载需先安装客户端
{clientText}
客户端特权:
3倍流畅播放
当前播放至 {time}
扫一扫 手机继续看
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
副标题要不要
{showMore?'收起' : '展开更多'}新人主播,只有搜索房间号才能进入直播间【斗鱼tv吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:571,917贴子:
新人主播,只有搜索房间号才能进入直播间
这是为什么啊,求告知啊、在相应类别里的更多里面0人气也能看到,可是就是看不到我啊,心里受到一晚万点伤害啊
你解决了么
我朋友也是,是不是因为没鱼丸,我给刷了点礼物还是不行
贴吧热议榜
使用签名档&&
保存至快速回贴斗鱼tv怎么查看房间号?斗鱼tv直播间房间号查看方法
&&斗鱼tv怎么查看房间号?斗鱼tv直播间房间号查看方法
斗鱼tv怎么查看房间号?斗鱼tv直播间房间号查看方法
13:26:17来源:编辑:
斗鱼tv怎么查看房间号?找不到斗鱼tv直播房间号在哪的用户,可以来看下文方法找直播间房间号哦。
斗鱼tv怎么查看房间号
1.首先我们先进到一个直播间。
2.我们找到地址栏在网址后面有数字显示,那个就是房间号。
3.记住房间号后我们下次观看时可以在网址后面打上房间号直接进入直播间,也可以在斗鱼首页进行搜索。
授权:免费版软件大小:7.24MB语言:简体中文
斗鱼tv电脑客户端可以随时随地想看游戏直播就看游戏直播,想吐槽就吐槽,各种精彩直播赛事正在上演,包含英雄联盟lol直播、穿越火线cf直播、dota2直播、美女直播等热门游戏赛事。
关键词: 斗鱼tv
斗鱼tv直播
热门游戏开服表

我要回帖

更多关于 小缘斗鱼直播房间号 的文章

 

随机推荐