gregory-gerard / rutube
RutubeM3U8Scrapper 帮助您检索 Rutube LiST 视频的 HLS 流列表。
Requires
- php: ^7.0
- ext-json: *
- guzzlehttp/guzzle: ^6.5
This package is auto-updated.
Last update: 2024-09-19 23:05:17 UTC
README
RutubeM3U8Scrapper 帮助您检索 Rutube LiST 视频的 HLS 流列表 / M3U8 播放列表。有了这些 HLS 流,您可以 下载视频,在您喜欢的视频播放器中流式传输 或做任何您想做的事情。您 仍然需要在 Rutube LiST 网站上有一个账户,但您不再需要观看广告或回答他们的测验。
我开发 RutubeM3U8Scrapper 是为了我自己,所以它可能不是非常可扩展且无错误,但我认为其他人也会需要它!
安装
克隆仓库
git clone https://github.com/Gregory-Gerard/RutubeM3U8Scrapper.git
使用 composer 安装依赖项(Guzzle)
composer install
您还需要在您的计算机上安装 PHP >= 7.0。
apt install php
配置
如果您想在 CLI 中使用 RutubeM3U8Scrapper,您需要配置它。
cp config.example.php config.php(复制 config.example.php 到 config.php 并更新您的配置)
在 $credentials 数组中添加您的登录信息(这是一个带有 + 和您的国际电话区号 在前面的手机号码)和密码,这是由于 Rutube LiST 的设计(RutubeM3U8Scrapper 不能在不登录的情况下调用 Rutube LiST api)。
// example $credentials = [ 'phone' => '+33611111111', 'password' => 'some_strong_password' ];
如何使用
CLI
只需使用视频 ID 运行 rutube.php,例如
php rutube.php 26f9dfab263c80f22c16b0ef1c4b77ad
php rutube.php 6105209
它应该输出类似以下内容
---------- 640x360 ----------
639000 kbp/s : https://video-317-2.pladform.ru/dive/video-1-102.rutube.ru/mv3SOw-5xvhgL76wizgT9Q/hls-vod/4qZW_DvQHxhg9fVlBGJ7Ow/1604812485/582/0x5000cca255e4e76a/8aa68a1ad46f4a93813fc4262947e5c3.mp4.m3u8?i=640x360_639
1151000 kbp/s : https://video-317-2.pladform.ru/dive/video-1-102.rutube.ru/KGKhKCy2lQA7dUbjY5SQ7g/hls-vod/sS5wrPPUnYso2djOGlVnkA/1604812485/128/0x5000cca255cc90a7/b9132563fe2f40c8b402b9da03c5b879.mp4.m3u8?i=640x360_1151
---------- 1280x720 ----------
1589000 kbp/s : https://video-317-2.pladform.ru/dive/video-1-102.rutube.ru/MlAfBdfHOeX7fVXi1jt5cA/hls-vod/KL41UzT4qJ58DHZ4NlpVcw/1604812485/119/0x500003970b88170e/3750791273114be1ae6d57a434f1c2a1.mp4.m3u8?i=1280x720_1589
程序化
有关文档,请参阅 RutubeScrapper.php 代码,完整示例
$scrapper = new RutubeScrapper(); $scrapper->login('+33367358878', 'f*riaa'); $internalVideoId = $scrapper->video('26f9dfab263c80f22c16b0ef1c4b77ad'); $award = $scrapper->award($internalVideoId); foreach($scrapper->streamList($internalVideoId, $award) as $resolution => $bandwidthList) { echo PHP_EOL."---------- {$resolution} ----------".PHP_EOL; foreach ($bandwidthList as $bandwidth => $url) { echo "{$bandwidth} Kbps : {$url}".PHP_EOL; } }
$instance->streamList() 返回一个二维数组,包含每个分辨率的 URL 和不同带宽
$streamList = [ '640x360' => [ 639000 => 'https://video-317-2.pladform.ru/dive/video-1-102.rutube.ru/uPbtg49VskvVH_yBfl7WKQ/hls-vod/Sr4PXLRXagAb0vBftkax1A/1604813503/582/0x5000cca255e4e76a/8aa68a1ad46f4a93813fc4262947e5c3.mp4.m3u8?i=640x360_639', 1151000 => 'https://video-317-2.pladform.ru/dive/video-1-102.rutube.ru/L6Knb9JNjMYm7GRL4VK3LA/hls-vod/G-z2JhlM10AFGeePdlS6Zg/1604813503/128/0x5000cca255cc90a7/b9132563fe2f40c8b402b9da03c5b879.mp4.m3u8?i=640x360_1151', ], '1280x720' => [ 1589000 => 'https://video-317-2.pladform.ru/dive/video-1-102.rutube.ru/WQJWM8YqYYMqyUGDI4xnxQ/hls-vod/zPao-gq6pwNB8rmrtC1Fsw/1604813503/119/0x500003970ba81d10/3750791273114be1ae6d57a434f1c2a1.mp4.m3u8?i=1280x720_1589', ], ];
如果发生内部错误,RutubeScrapper 抛出 RutubeScrapperException。否则,如果是一个请求错误(如 404 或错误请求),则抛出 GuzzleException。
用例
现在有了您手中的 HLS 流,您可以使用 youtube-dl、ffmpeg 或在 VLC 中流式传输下载 Rutube LiST 视频。
youtube-dl -f "mp4" -o "Space Brothers 33.mp4" "https://video-317-2.pladform.ru/dive/video-1-2.rutube.ru/IgolYMB5FHGfVQMBihCISQ/hls-vod/EDXmlhyHtldODsup54cZ5g/1588904466/137/0x5000cca255cd3578/46e0da024e694e99be6529211ccdfc96.mp4.m3u8?i=1280x720_1590"
工作原理
我对 Rutube LiST 网络跟踪进行了一些反向工程,因此抓取代码简单地执行用户观看视频时所做的相同调用,以更精确地描述(您也可以阅读 RutubeScrapper.php)
- 首先,抓取器需要登录;
- 抓取器检索内部视频 ID,有时与您拥有的 ID 不同,有时相同;
- 为了检索 Rutube 视频平衡器,Rutube API 要求一个“奖励令牌”,这个奖励令牌是由 Rutube 广告或 Rutube 测验给出的;
- 因此,抓取器调用 Rutube 广告 API 以直接检索您的“奖励令牌”,而无需观看任何内容;
- 然后,它简单地输出您的视频平衡器。
待办事项
- 将 RutubeM3U8Scrapper 更新为类