一些鬥魚TV Web API [Some DouyuTv API]

来源:https://www.cnblogs.com/wapmovie/archive/2019/04/14/10703871.html
-Advertisement-
Play Games

一些鬥魚TV Web API [Some DouyuTv API] 寫在最前 去年TI5前開發了dotaonly.com,網站需要用到各個直播平臺API。不像國外網站Twitch那樣開放,都有現成的API可用,國內網站都很封閉,對開發者不太友好。本文所涉及API皆抓取自鬥魚IOS手機客戶端。 首先是 ...


一些鬥魚TV Web API [Some DouyuTv API]

 

寫在最前

去年TI5前開發了dotaonly.com,網站需要用到各個直播平臺API。不像國外網站Twitch那樣開放,都有現成的API可用,國內網站都很封閉,對開發者不太友好。本文所涉及API皆抓取自鬥魚IOS手機客戶端。

首先是不需要登錄的API

獲取當前全部直播

請求地址:
http://capi.douyucdn.cn/api/v1/live?limit=20&offset=0
參數:
limit: 一次獲取的個數
offset:起始位置,比如要獲取前20個之後的 offset=20, 下同
返回數據

{
    "error": 0,
    "data": [
        {
        "room_id": "16101",
        "room_src": "http://rpic.douyucdn.cn/z1602/22/16/16101_160222165702.jpg",
        "cate_id": "1",
        "room_name": "微笑:  過節就應該帶妹!",
        "show_status": "1",
        "subject": "",
        "show_time": "1456126421",
        "owner_uid": "391270",
        "specific_catalog": "weixiao",
        "specific_status": "1",
        "vod_quality": "0",
        "nickname": "微笑",
        "online": 1075780,
        "url": "/weixiao",
        "game_url": "/directory/game/LOL",
        "game_name": "英雄聯盟",
        "child_id": "28",
        "fans": "936235"
        }
    ]
}
12345678910111213141516171819202122232425

獲取父頻道

請求地址:
http://capi.douyucdn.cn/api/v1/getColumnList
部分返回數據:

    {
        "error": 0,
        "data": [
            {
                "cate_id": "1",
                "cate_name": "游戲",
                "short_name": "game",
                "orderdisplay": "1",
                "is_relate": "1",
                "is_del": "0",
                "push_ios": "1",
                "push_show": "0"
            },
            {
                "cate_id": "9",
                "cate_name": "手機游戲",
                "short_name": "sjyx",
                "orderdisplay": "2",
                "is_relate": "1",
                "is_del": "0",
                "push_ios": "1",
                "push_show": "0"
            }
        ]
    }
12345678910111213141516171819202122232425

獲取子頻道

請求地址:
http://capi.douyucdn.cn/api/v1/getColumnDetail?shortName=game
參數:
shortName: 父頻道名字,來自上一個請求返回數據中的short_name
部分返回數據:

{
    "error": 0,
    "data": [
        {
            "tag_id": "134",
            "short_name": "wsm",
            "tag_name": "玩數位",
            "pic_name": "7c855c7fa9c8c03697ee61748999d112.jpg",
            "icon_name": "a3f49c62bd6156b358a275a07a5b95dd.jpg",
            "orderdisplay": "126",
            "rank_score": "0",
            "night_rank_score": "0",
            "nums": "0",
            "push_ios": "1",
            "push_home": "1",
            "is_game_cate": "0",
            "cate_id": "3",
            "is_del": "0",
            "is_relate": "1",
            "pic_url": "http://staticlive.douyutv.com/upload/game_cate/7c855c7fa9c8c03697ee61748999d112.jpg",
            "url": "/directory/game/wsm",
            "icon_url": "http://staticlive.douyutv.com/upload/game_cate/a3f49c62bd6156b358a275a07a5b95dd.jpg",
            "count": 15,
            "count_ios": 8
        },
        {
            "tag_id": "136",
            "short_name": "car",
            "tag_name": "玩汽車",
            "pic_name": "6b83cf650fb4ba62881c9c528ab602d5.jpg",
            "icon_name": "ade2b45ee56831c3b100a436b8c2f624.jpg",
            "orderdisplay": "127",
            "rank_score": "0",
            "night_rank_score": "0",
            "nums": "0",
            "push_ios": "1",
            "push_home": "1",
            "is_game_cate": "0",
            "cate_id": "3",
            "is_del": "0",
            "is_relate": "1",
            "pic_url": "http://staticlive.douyutv.com/upload/game_cate/6b83cf650fb4ba62881c9c528ab602d5.jpg",
            "url": "/directory/game/car",
            "icon_url": "http://staticlive.douyutv.com/upload/game_cate/ade2b45ee56831c3b100a436b8c2f624.jpg",
            "count": 4,
            "count_ios": 2
        }
    ]
}
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849

獲取父頻道所有直播列表

請求地址:
http://capi.douyucdn.cn/api/v1/getColumnRoom/<cate_id>?limit=20&offset=0
參數:
cate_id: 父頻道id
limit
offset
返回數據:

{
    "error": 0,
    "data": [
        {
            "room_id": "536341",
            "room_src": "http://rpic.douyucdn.cn/z1602/22/17/536341_160222172043.jpg",
            "cate_id": "134",
            "room_name": "22日晚5點30分MWC現場探館看產品",
            "show_status": "1",
            "subject": "",
            "show_time": "1456132678",
            "owner_uid": "38598100",
            "specific_catalog": "",
            "specific_status": "0",
            "vod_quality": "0",
            "nickname": "ZOL中關村線上",
            "online": 1969,
            "child_id": "0"
        },
        {
            "room_id": "279558",
            "room_src": "http://rpic.douyucdn.cn/z1602/22/17/279558_160222171918.jpg",
            "cate_id": "136",
            "room_name": "[24H鬥魚第一專業車評]陳震YYP選車",
            "show_status": "1",
            "subject": "",
            "show_time": "1455963983",
            "owner_uid": "18462494",
            "specific_catalog": "",
            "specific_status": "0",
            "vod_quality": "0",
            "nickname": "金叔2015",
            "online": 12304,
            "child_id": "0"
        }
    ]
}
12345678910111213141516171819202122232425262728293031323334353637

獲取子頻道直播列表

請求地址:
http://capi.douyucdn.cn/api/v1/live/<tag_id>?&limit=1&offset=0
參數:
tag_id: 子頻道id
limit
offset
返回數據:

{
"error": 0,
"data": [
{
"room_id": "536341",
"room_src": "http://rpic.douyucdn.cn/z1602/22/17/536341_160222172043.jpg",
"cate_id": "134",
"room_name": "22日晚5點30分MWC現場探館看產品",
"show_status": "1",
"subject": "",
"show_time": "1456132678",
"owner_uid": "38598100",
"specific_catalog": "",
"specific_status": "0",
"vod_quality": "0",
"nickname": "ZOL中關村線上",
"online": 5700,
"url": "/536341",
"game_url": "/directory/game/wsm",
"game_name": "玩數位",
"child_id": "0",
"fans": "4084"
}
]
}
12345678910111213141516171819202122232425

獲取房間信息

請求地址:
http://capi.douyucdn.cn/api/v1/room/<room_id>?aid=android&client_sys=android&time=<time>&auth=c0a6170a754ca187e8a52a3343ecf273
參數:
room_id: 房間ID
time: unix_time/1000
auth: md5("room/"+room_id+"?aid=android&client_sys=android&time="+1231) 註意:time要和上面一致,android也不能改成ios
插曲[不重要可以跳過不看]:為了查找auth的演算法,我先是反編譯了鬥魚的apk,結果他們把演算法藏在了JNI里,隨後嘗試反彙編找出來的Share Object,無果。然後在鬥魚網頁里的javascript里各種找,也沒有,不過發現網頁里也有一條類似的API,是從swf里發出的。之後去逐個反編譯鬥魚網頁里的swf,發現核心的core.swf是被加密了的,好在webroom.swf里找到瞭解密邏輯。解密後找到一個算sign/auth的function,然而沒看懂,是一種變形的C。。最後的最後我在github上搜了一下之前解密用的key,發現之前果然有大神找到了auth演算法,附鏈接。拿到演算法,玩了一圈發現必須是這個格式才行,把android換成ios就會驗證失敗。
返回數據:

{
	"error": 0,
	"data": {
	"room_id": "58428",
	"room_src": "http://rpic.douyucdn.cn/z1602/23/23/58428_160223234559.jpg",
	"cate_id": "3",
	"room_name": "yyf直播間  電子競技只有錘!",
	"vod_quality": "0",
	"show_status": "2",
	"show_time": "1456221459",
	"owner_uid": "236231",
	"specific_catalog": "",
	"specific_status": "1",
	"online": 0,   // 這個是線上人數,雖然比較虛
	"nickname": "yyfyyf",
	"url": "/58428",
	"game_url": "/directory/game/DOTA2",
	"game_name": "DOTA2",
	"game_icon_url": "http://staticlive.douyutv.com/upload/game_cate/bfe845a28fef8106cf645ed3b83aa375.jpg",
	"rtmp_url": "",   //如果再直播會有,我抓這個時候魚魚楓已經被懟的下播了
	"rtmp_live": "",
	"rtmp_cdn": "",
	"rtmp_multi_bitrate": [],
	"hls_url": "",
	"servers": [   //這個就比較重要了,這個是彈幕驗證伺服器列表!彈幕相關的socket加密解密源代碼我也找到了。如有需求請留言,我看情況發出來。
		{
		"ip": "119.90.49.93",
		"port": "8063"
		},
		....略
	],
	"use_p2p": "0",
	"room_dm_delay": 30,
	"black": [],
	"show_details": "yyf貼吧: http://tieba.baidu.com/f?kw=yyf&amp;fr=ala0&amp;tpl=5\n新浪微博: http://www.weibo.com/u/2176141495/home?wvr=5",
	"owner_avatar": "http://uc.douyutv.com/avatar.php?uid=236231&size=big",
	"cdns": [],
	"owner_weight": "304.67t",   //主播體重
	"fans": "492867",             //這個應該是關註數。
	"gift": [                  //一些禮物信息
		{
		"id": "59",
		"name": "火箭",
		"pc": "50000",
		"type": "2",
		"gx": 5000,
		"desc": "贈送網站廣播並派送出神秘寶箱",
		"intro": "我們的征途是星辰大海",
		"ef": 1,
		"pimg": "http://staticlive.douyutv.com/upload/dygift/447b61f6c0d6890d4490a90d0bdbf8bc.png",
		"mimg": "http://staticlive.douyutv.com/upload/dygift/ab957377200959761121a3791a54b9b7.png",
		"cimg": "http://staticlive.douyutv.com/upload/dygift/7dce6b2170eebecf85596b47370217ce.gif",
		"himg": "http://staticlive.douyutv.com/upload/dygift/7f0643700d331aca31a6f6ea255e323e.gif",
		"stay_time": 200000,
		"drgb": "",
		"urgb": "#732909",
		"grgb": "#732909",
		"brgb": "#5861b5",
		"pdbimg": "http://staticlive.douyutv.com/upload/dygift/005786105dd86e3964732e7fc2fc2085.png",
		"pdhimg": "http://staticlive.douyutv.com/upload/dygift/6ffb9bc8d35d315943ae117dc788824e.gif",
		"small_effect_icon": "http://staticlive.douyutv.com/upload/dygift/75e55aae938fc703d977e8c966fef91d.png",
		"big_effect_icon": "http://staticlive.douyutv.com/upload/dygift/40f964e70faa46923dcc4c4931bbac8f.gif",
		"pad_big_effect_icon": "http://staticlive.douyutv.com/upload/dygift/ccffe8c6453074a68be1730802203241.gif"
		},
		...略
	]
	}
}
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

搜索直播間

請求地址:
http://capi.douyucdn.cn/api/v1/searchNew/<search_string>/1?limit=1&offset=0
參數:
search_string: 要搜索的內容,房間id或者房間名
limit:
offset:
返回數據:

{
	"error": 0,
	"data": {
		"count": 299,
		"room": [
			{
			"room_id": "73327",
			"room_src": "http://rpic.douyucdn.cn/z1602/24/02/73327_160224021924.jpg",
			"cate_id": "134",
			"room_name": "返回Windows寫個博客",
			"show_status": "1",
			"subject": "",
			"show_time": "1456244441",
			"owner_uid": "2154075",
			"specific_catalog": "dotaonly",
			"specific_status": "1",
			"vod_quality": "0",
			"nickname": "ShaneX",
			"online": 5,
			"child_id": "0",
			"url": "/dotaonly",
			"game_url": "/directory/game/wsm",
			"game_name": "玩數位",
			"fans": "2490"
			}
		]
	}
}
12345678910111213141516171819202122232425262728

以上就是我覺著有用的不用登陸可獲取API,下麵是需要登陸的

需登陸可用的API

獲取登陸token

請求地址:
http://capi.douyucdn.cn/api/v1/login?username=<user_name>&password=<password_md5>
參數:
user_name: 用戶名
password_md5: 密碼的md5
返回數據:

{
	"error": 0,
	"data": {
	"uid": "2154075",
	"username": "auto_beKEugHSJv",
	"nickname": "ShaneX",
	"email": "245****@qq.com",  //不知道鬥魚為何要遮蔽郵箱以及下麵的電話
	"qq": "",
	"mobile_phone": "150****3913",
	"phone_status": "1",
	"email_status": "1",
	"lastlogin": "1455383420",
	"avatar": {  //頭像
		"small": "http://uc.douyutv.com/avatar.php?uid=2154075&size=small",
		"middle": "http://uc.douyutv.com/avatar.php?uid=2154075&size=middle",
		"big": "http://uc.douyutv.com/avatar.php?uid=2154075&size=big"
	},
	"has_room": "1", //是否是直播
	"groupid": "1",
	"is_own_room": "1",
	"gold1": "4772",  //魚丸數
	"score": "117020", //經驗值
	"level": {
		"current": {
			"lv": 12,
			"pic": "user12.gif",
			"mpic": "gold05.png",
			"name": "黃金5",
			"pic_url": "http://staticlive.douyutv.com/common/douyu/images/classimg/user12.gif?v=v26185",
			"score": 100000
		},
		"next": {
			"lv": 13,
			"pic": "user13.gif",
			"mpic": "gold04.png",
			"name": "黃金4",
			"pic_url": "http://staticlive.douyutv.com/common/douyu/images/classimg/user13.gif?v=v26185",
			"score": 150000
		}
	},
	"follow": "35",
	"ios_gold_switch": 1,
	"gold": "372.4", //魚翅
	"token": "a**********a",  //token!
	"token_exp": 1457111772 //過期時間,十天
	}
}
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647

獲取個人信息

請求地址:
http://capi.douyucdn.cn/api/v1/my_info?token=<token>
參數:
token: 登陸token
返回數據:

和上面的一毛一樣。
1

獲取關註列表

請求地址:
http://capi.douyucdn.cn/api/v1/remind_list?token=<token>&limit=1&offset=1
參數:
token:
limit:
offset:
請求地址2:
http://capi.douyucdn.cn/api/v1/followRoom?token=<token>&live=1
參數:
token:
live: 1是正在直播的,0是沒開直播的
返回數據:

{
"error": 0,
"data": [
	{
	"id": "163643",
	"room_id": "163643",
	"room_src": "http://rpic.douyucdn.cn/z1602/24/00/163643_160224001525.jpg",
	"cate_id": "26",
	"nickname": "藍天上的流雲",
	"show_status": "2",
	"owner_uid": "4773042",
	"name": "【流雲紅警】一個人默默地直播,5555~",
	"game_tag_id": "26",
	"game_tag_name": "懷舊游戲",
	"owner": "藍天上的流雲",
	"owner_avatar_small": "http://uc.douyutv.com/avatar.php?uid=4773042&size=small",
	"owner_avatar_middle": "http://uc.douyutv.com/avatar.php?uid=4773042&size=middle",
	"owner_avatar_big": "http://uc.douyutv.com/avatar.php?uid=4773042&size=big",
	"remind_status": "0",
	"live_status": "2",
	"online": 0,
	"show_time": "1456238974",
	"fans": "47425"
	}
]
}
1234567891011121314151617181920212223242526

取消關註

【POST】請求地址:
http://capi.douyucdn.cn/api/v1/follow/del

參數:
ids: 要取消關註的列表, e.g.:123,321,132
返回數據:

{
	"error": 0,
	"data": [20360, 184219]
}
1234

獲取觀看歷史

請求地址:
http://capi.douyucdn.cn/api/v1/history?token=<token>
參數:
token:
返回數據:

{
	"error": 0,
	"data": [
		{
		"room_id": "73327",
		"room_src": "http://rpic.douyucdn.cn/z1602/24/01/73327_160224015628.jpg",
		"cate_id": "134",
		"room_name": "返回Windows寫個博客",
		"show_status": "1",
		"subject": "",
		"show_time": "1456244441",
		"owner_uid": "2154075",
		"specific_catalog": "dotaonly",
		"specific_status": "1",
		"vod_quality": "0",
		"nickname": "ShaneX",
		"online": 4,
		"child_id": "0",
		"url": "/dotaonly",
		"game_url": "/directory/game/wsm",
		"game_name": "玩數位",
		"rid": "73327",
		"oid": "2154075",
		"n": "返回Windows寫個博客",
		"lt": "1456246497",
		"uc": "5",
		"ls": "1",
		"on": "ShaneX",
		"fans": "2489"
		}
	]
}
1234567891011121314151617181920212223242526272829303132

寫在最後

我寫這個時候在直播,有個人跑我直播間說我抓這個毫無意義,那我就呵呵了。還有就是不得不感慨一下鬥魚程式猿寫代碼能力之弱,我翻代碼時候甚至看到過這樣的代碼(time/1000/60)*60 前端js也是很亂。
額,如果有什麼問題或者不明,歡迎留言,轉載請註明。
我的直播間: 鬥魚 不定時會直播碼code

 

   
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 摘自:https://www.cnblogs.com/jyuf/p/7251591.html 函數都比較簡單,直接看就ok了 ...
  • MVC: MVC的全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,是一種軟體設計典範。它是用一種業務邏輯、數據與界面顯示分離的方法來組織代碼,將眾多的業務邏輯聚集到一個部件裡面,在需要改進和個性化定製界面及用戶交互的同時 ...
  • 歡迎大家的持續關註。上一次,我們結合第一篇推導出來的類圖,到第二篇根據類圖進行實際代碼的編寫,對裝飾者模式有了一個整體的概念以及實戰。不知道對你幫助如何呢?小編已經有門道了,看完接下來的一部分,你會恍然大悟,原來實際編碼中你一直在用裝飾者模式。 真實世界的裝飾者:Java I/O 看到標題,是不是就 ...
  • 公司說我們的開發方式是敏捷開發,實際上只是使用了一些敏捷開發的方法,只有遵守敏捷開發的價值觀和原則,才能算是敏捷開發。微服務也是一樣,不是說拆分成多個服務去部署,就叫做微服務。也不是採用市面上常用的微服務框架,就是微服務了。 上面這段話是我對微服務的簡單理解。 隨著公司業務的發展,部門領導要求其中一 ...
  • [TOC] LWC知識整理(一) 最近Salesforce那群閑不住的研究員又推出了一款針基於Web的開發組件 Lighting Web Component(簡稱 LWC ),這個組件的推出將對Salesforce開發進行一次比較大的更新換代(沒錯,你之前拼命學的Aura要逐漸淡出Salesforc ...
  • [TOC] 2、GET API get API 可以通過文檔id從索引中獲取json格式的文檔,以下示例從 索引中獲取 為`_doc`,id值為0為的JSON文檔: 返回結果: 上述返回結果包含文檔的_index, _type, _id 和_version 欄位。如果 欄位為 , 就會返回 欄位,即 ...
  • 1. 構造猜數字核心函數 2. 構造用戶外殼函數 3. 構造輸入判斷函數 4. 調用執行 ...
  • 一般使用$_FILES來進行文件上傳時,可以使用$_FILES["file"]["error"]來判斷文件上傳是否出錯。$_FILES["file"]["error"]會返回相應的錯誤代碼: UPLOAD_ERR_OK 其值為 0,沒有錯誤發生,文件上傳成功。 UPLOAD_ERR_INI_SIZE ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...