【问题标题】:Resolve relative urls of youtube using PHP使用 PHP 解析 youtube 的相对 url
【发布时间】:2017-11-27 20:06:39
【问题描述】:

之前有人问过这个问题,但没有一个答案对我有用。

我使用以下代码直接将文件从远程服务器复制到我的服务器,

<?php

set_time_limit(0); //Unlimited max execution time
$remote_file_url = $_GET['url'];
$ext = pathinfo($remote_file_url, PATHINFO_EXTENSION);
$name = basename($remote_file_url);
if(isset($ext)){
    $local_file = 'download/'.$name.'.'.$ext;
}
else
    $local_file = 'download/'.$name;
$copy = copy( $remote_file_url, "1.mp4" );

if( !$copy ) {
    echo "Doh! failed to copy $file...\n";
}
else{
    echo "WOOT! success to copy $file...\n";
    
}
?>

它运行良好,但它不会复制我从Youtube 获得的文件。我使用 Firefox 的 1-Click Youtube Video Downloader 扩展名,它可以直接链接到 youtube 视频。我也可以在浏览器和 Internet 下载管理器中使用这些直接链接。

例如直接的url

https://www.youtube.com/watch?v=xPXrJwQ5lqQ

https://r6---sn-ab5l6nzy.googlevideo.com/videoplayback?ipbits=0&requiressl=yes&sparams=dur,ei,expire,id,initcwndbps,ip,ipbits,ipbypass,itag,lmt,mime,mip,mm,mn,ms,mv,pl,ratebypass,requiressl,source&ei=3DNOWfq4CImGc9rxvcgO&signature=3D188D073D872381433A45462E84928383D10D02.4E0AF7D777E76AA19A576D42983A81F4E62EF84D&lmt=1472135086539955&mime=video%2Fmp4&ratebypass=yes&id=o-ABaoUEn3pBt5SLXdWXlrzCdteMLfLPizrRTPoakDoLSX&expire=1498318908&source=youtube&dur=119.211&itag=22&pl=20&ip=162.217.31.128&key=cms1&redirect_counter=1&req_id=ce038b9993a9a3ee&cms_redirect=yes&ipbypass=yes&mip=159.203.89.210&mm=31&mn=sn-ab5l6nzy&ms=au&mt=1498297234&mv=m

问题是我的代码无法将此文件复制到我的服务器。我想知道有什么办法可以解决这样的网址吗?

错误是

打开流失败:HTTP 请求失败! HTTP/1.1 403 禁止在 /home/...

提前致谢。

【问题讨论】:

    标签: php video youtube


    【解决方案1】:

    好吧,我不知道为什么会这样。 (它会过期吗?我希望不会)我只是设法在您的代码中尝试 another link for the above video (copy the link using right click) 作为 $remote_file_url 并且它按预期工作

    • 我是如何获得该链接的?

    我使用了the underlined library : YouTube-Downloader the 1-Click Youtube Video Downloader extension(该扩展程序固有地使用它),这样您就可以更好地控制流程。然后在您的网络服务器中托管文件之后。只需运行index.php,当你使用它时,你会得到类似的东西:

    然后您可以自动化最后一部分以满足您的需求。

    这并不意味着所有视频都可以用这种方法顺利下载。因为the used videos that have signatures issuethat are recently uploaded issuehere's the list of issues of Youtube-Downloader

    为此有一个修复程序:youtube-dl-php,它基于一个合理的原则:有一个非常好的命令行实用程序来下载 YouTube 视频,称为 youtube-dl:这里是 the download page 基本上,您只需使用php 调用它。然后,请注意,您需要安装它的路径才能使以下操作生效

    • 安装Composer 后,转到您的Web 项目文件夹 并按照Github page 中的说明运行composer require norkunas/youtube-dl-php
    • 在运行它的示例时,我得到一个错误

      proc_open() 267 CreateProcess 失败

    我以前从未处理过Symphony,我发现使用YoutubeDl.php 并重新定义传递给createProcess$arguments 并注释掉许多不太有用的配置选项来获得特别有趣摆脱那个错误,给它更多的时间来运行 ini_set('max_execution_time', 300); 哎呀,它被下载了。 除非您想不出更好的方法,否则您不必遵循此方法。如果您还没有弄清楚,它只是应该让您了解问题出在哪里。如果你一开始就有这个问题。

    private function createProcess(array $arguments = [])
        {
            array_unshift($arguments, $this->binPath ?: 'youtube-dl');
    
            $process = new Process("youtube-dl https://www.youtube.com/watch?v=nDMwW41AlSI");
            /*$process->setEnv(['LANG' => 'en_US.UTF-8']);
            $process->setTimeout($this->timeout);
            $process->setOptions($this->processOptions);
    
            if ($this->moveWithPhp) {
                $cwd = sys_get_temp_dir();
            } else {
                $cwd = $this->downloadPath ?: sys_get_temp_dir();
            }
    
            $process->setWorkingDirectory($cwd);*/
    
            return $process;
        }
    

    或者您也可以编写自己的代码调用youtube-dl,祝您好运!

    【讨论】:

      猜你喜欢
      • 2013-01-30
      • 2019-02-08
      • 2018-08-30
      • 2012-10-11
      • 1970-01-01
      • 2010-12-03
      • 2011-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多