socialapis / youtubedownloader

这是一个使用私有API抓取YouTube视频的小项目。

v1.0.1 2020-06-07 22:12 UTC

This package is auto-updated.

Last update: 2024-09-06 20:27:37 UTC


README

compatible

你喜欢这个项目吗?通过捐赠支持它

socialAPIS

  • btc 比特币:bc1qkauwj52rr6pelckjfq4htgjl7jvamkq5lklqca

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
  • 实现数据持久化接口

许可证

法律

此代码与YouTube或其任何附属公司或子公司无关,未获授权、维护、赞助或认可。这是一个独立和非官方的API。使用风险自担。