2017-06-24 8 views
2

この質問は私のために働いたが、答えの中で答えられませんでした。PHPを使用してYouTubeの相対URLを解決してください

私はそれがうまく動作しますが、それは私が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"; 

} 
?> 

、直接私のサーバーへのリモートサーバからファイルをコピーするには、次のコードを使用します。私はFirefox用の 1-Click Youtube Video Downloader拡張子を使用してYouTubeのビデオに直接リンクしてくれます。これらのダイレクトリンクは、ブラウザとインターネットのダウンロードマネージャーでも使用できます。例えば

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

の直接のURLは、問題が私のサーバーにこのファイルをコピーすることはできません私のコードです

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

です。私はそのようなURLを解決する方法があることを知りたいですか?

エラーが

では、ストリームをオープンに失敗しました:HTTP要求に失敗しました! HTTP/1.1 403/home /で禁止されています...

ありがとうございます。

答えて

1

これはどうして起こったのかわかりません。私はちょうど$remote_file_urlとしてあなたのコードでanother link for the above video (copy the link using right click)を試すために管理し、予想通り、それはどのように私はそのリンクを取得するのですか?

  • を働いていた(私はないと思い?期限切れになりますか)

私はあなたがプロセスをより細かく制御する必要があります。この方法は(それは本質的にその拡張子によって使用されている)the underlined library : YouTube-Downloaderthe 1-Click Youtube Video Downloader extensionに使用しました。その後、あなたのWebサーバーにファイルをホストした後。単にindex.phpを実行し、あなたがそれを使用するときに、あなたのような何かを得るでしょう:次に、あなたのニーズに合わせて、この最後の部分を自動化することができます

Running YouTube-Downloader screenshot

を。

この方法ですべての動画をスムーズにダウンロードできたわけではありません。そのためthe used videos that have signatures issueまたはthat are recently uploaded issue

here's the list of issues of Youtube-Downloaderのやや関与されている修正プログラムがあることについて:youtube-dl-php、音の原理に基づいている:youtube-dlと呼ばれるYouTubeの動画をダウンロードするには非常に良いコマンドラインユーティリティがある:ここthe download pageです 基本的には、phpを使用して呼び出します。そのを実行している場合Github page

  • で説明したようにその後、あなたはそのパスはあなたがComposerをインストールした後

    • に動作するように、次のためにインストールされている必要があります通知は、Webプロジェクトフォルダ に移動してcomposer require norkunas/youtube-dl-phpを実行しますたとえば、私はエラーに

      は、proc_open()267件のCreateProcessを取得

    012に失敗しました

    私はこれまでに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を呼び出す独自のコード、幸運を書くことができます!

  • 関連する問題