此包的最新版本(0.0.2)没有可用的许可证信息。

RutubeM3U8Scrapper 帮助您检索 Rutube LiST 视频的 HLS 流列表。

0.0.2 2020-11-17 22:30 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 更新为类