socialapis / youtubedownloader
这是一个使用私有API抓取YouTube视频的小项目。
Requires
- php: >=7.0
- google/protobuf: 3.11
- guzzlehttp/guzzle: 6.2
This package is auto-updated.
Last update: 2024-09-06 20:27:37 UTC
README
你喜欢这个项目吗?通过捐赠支持它
socialAPIS
YoutubeDownloader
这是一个PHP编写的YouTube私有API客户端
互联网上存在许多基于PHP的YouTube下载器,但其中大多数已经多年未更新,或者它们依赖于youtube-dl。
每一个,几乎每一个下载器都使用YouTube的前端,然后从YouTube前端响应中提取数据,这有点[不好];
我想构建一个Java安卓应用程序来在后台播放YouTube视频,我在所有网络下载器上都遇到了很多问题。
我的意思是,你有一些可以工作的库,但是当YouTube在前面改变了一些东西时,它们需要更新,是的,YouTube每个月都会定期改变。
除了这个之外,没有其他纯PHP的YouTube下载器可以工作。
这是第一个可以工作的纯PHP YouTube下载器。
这个脚本不依赖于除cURL以外的任何东西。cURL由GuzzleHttp使用。没有JavaScript解释器,没有调用shell... 只有纯PHP,也没有重型依赖。
如果你喜欢这个项目,请随意分叉并贡献!
演示
这总是有效的,你可以有1M请求,如果YouTube阻止你,只需让服务器再次注册你,你就有了一个新的未禁止的密钥。
以下是此示例在浏览器中运行的截图。
这里你可以看到整个响应
安装
推荐通过Composer安装
composer require socialAPIS/youtubedownloader
将FetchPlayer示例复制到你的服务器文件夹并运行它
用法
要使用YouTube的私有API,你首先需要注册。注册你可以调用这个
$registrationResponse = $yt->registerDevice();
为了节省带宽,你可以将响应中的id/密钥保存下来并保存到数据库或其他方法中。
如果你有id/密钥,你可以这样注册
$yt->registerIdKey("id", "key");
$yt = new \YoutubeDownloader\YoutubeDownloader(); $registrationResponse = $yt->registerDevice(); //or $yt->registerIdKey("id", "key");
然后你需要有视频id
$playerResponse = $yt->playerRequest->fetch_player_info('video_id_comes_here');
//to se some output you can
echo $playerResponse->serializeToJsonString();
你会得到这个输出
{ "requestData": { "googleVisitorId": "" }, "playerVideos": { "id": 21540, "videos": [ { "id": 17, "videoUrl": "https://r3---sn-vox-n32e.googlevideo.com/videoplayback?expire=1587287354&ei=2sCbXqv1KYmK7gOolJDQAw&ip=146.255.75.42&id=o-ADg-JhQhyb5_HLjBIDhsgPBiCE-m1W1TJEE_ut1_j4L9&itag=17&source=youtube&requiressl=yes&mh=7F&mm=31%2C29&mn=sn-vox-n32e%2Csn-c0q7lnse&ms=au%2Crdu&mv=m&mvi=2&pcm2cms=yes&pl=24&pcm2=no&initcwndbps=462500&vprv=1&mime=video%2F3gpp&gir=yes&clen=4053996&dur=436.256&lmt=1557915191960575&mt=1587265652&fvip=3&c=ANDROID&txp=5431432&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cpcm2%2Cvprv%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJpPlLswRQIgaBWKonzA2at6trESlwPOkW8391wYbwL5mFuI4BT6sd0CIQD3MT2lvaa75iuEtO6AbC1knTEaQu9L9IuqToZPkljMpA%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpcm2cms%2Cpl%2Cinitcwndbps&lsig=ALrAebAwRQIgd8KLX0ldFKlRJiY4W9eUFBB6Qhg_HD7aLsF0mjkepsQCIQC8cd38PmQSxaXCiF8rIh_UOb3TxD1DPpuk0MeEJTAeAw%3D%3D", "format": "video/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\"", "size": "small", "sizeFormat": "144p" }, { "id": 18, "videoUrl": "https://r3---sn-vox-n32e.googlevideo.com/videoplayback?expire=1587287354&ei=2sCbXqv1KYmK7gOolJDQAw&ip=146.255.75.42&id=o-ADg-JhQhyb5_HLjBIDhsgPBiCE-m1W1TJEE_ut1_j4L9&itag=18&source=youtube&requiressl=yes&mh=7F&mm=31%2C29&mn=sn-vox-n32e%2Csn-c0q7lnse&ms=au%2Crdu&mv=m&mvi=2&pcm2cms=yes&pl=24&pcm2=no&initcwndbps=462500&vprv=1&mime=video%2Fmp4&gir=yes&clen=35587198&ratebypass=yes&dur=436.233&lmt=1557917191257289&mt=1587265652&fvip=3&c=ANDROID&txp=5431432&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cpcm2%2Cvprv%2Cmime%2Cgir%2Cclen%2Cratebypass%2Cdur%2Clmt&sig=AJpPlLswRQIgW_UDRYl8zmYRNf4fVikpqjenp2l2vMKuiynmChUmCwUCIQD4Q6ggKRo_78nGkXnScL1z9d6Ig4yRap5HKm9QUgyhaw%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpcm2cms%2Cpl%2Cinitcwndbps&lsig=ALrAebAwRQIgd8KLX0ldFKlRJiY4W9eUFBB6Qhg_HD7aLsF0mjkepsQCIQC8cd38PmQSxaXCiF8rIh_UOb3TxD1DPpuk0MeEJTAeAw%3D%3D", "format": "video/mp4; codecs=\"avc1.42001E, mp4a.40.2\"", "size": "medium", "sizeFormat": "360p" }, ... } ...
待办事项列表
- 重构
- 解释加密密钥准备(哈希/加密)
- 解释URL和Body签名过程
- 实现搜索/浏览视频
- 实现从响应中获取Google-Visitor-id
- 实现数据持久化接口
许可证
- 互惠公共许可证1.5 (RPL-1.5): https://open-source.org.cn/licenses/RPL-1.5
法律
此代码与YouTube或其任何附属公司或子公司无关,未获授权、维护、赞助或认可。这是一个独立和非官方的API。使用风险自担。