agusrisan/youtubedownloader

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

v1.0.2 2020-11-24 18:06 UTC

This package is auto-updated.

Last update: 2024-09-25 02:48:31 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,没有重依赖。

如果您喜欢这个项目,请随时fork和贡献!

演示

这将每次都工作,您可以有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和正文签名过程
  • 实现搜索/浏览视频
  • 实现从响应中获取Google访客ID
  • 实现用于持久化数据的接口

许可证

法律

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