2017-06-24 42 views
2

之前詢問過此問題,但沒有答案適用於我。使用PHP解析YouTube的相關網址

我用下面的代碼直接從遠程服務器複製文件到我的服務器,

<?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下載管理器中使用這些直接鏈接。

。例如

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/...

在此先感謝。

回答

1

嗯,我不知道爲什麼會發生這種情況。 (難道是過期的?我希望不是),我只是設法嘗試在你的代碼another link for the above video (copy the link using right click)$remote_file_url和它的工作如預期

  • 我是怎麼想出來的鏈接?

我用the underlined library : YouTube-Downloaderthe 1-Click Youtube Video Downloader extension(它本質上是由該擴展使用)這種方式,您將擁有的過程中加以控制。然後在您的Web服務器中託管這些文件。只需運行index.php,當你使用它,你會得到這樣的:

Running YouTube-Downloader screenshot

然後你就可以自動完成這一最後一部分,以滿足您的需求。

這並不意味着所有的視頻都可以用這種方法順利下載。由於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項目文件夾 和運行composer require norkunas/youtube-dl-phpGithub page
  • 作爲解釋的運行時,其例如,我得到一個錯誤

    proc_open()267個CreateProcess的失敗

我從來沒有處理Symphony之前,我發現它特別有趣與YoutubeDl.php玩,並重新定義$arguments傳遞到createProcess和註釋掉大部分不太有用的配置選項來擺脫該錯誤,給它更多的時間與 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,祝你好運!