2012-01-23 29 views
1

私はyoutubeビデオをダウンロードするために次のコードを使用しています。Youtube Video regexを使ってPHPでダウンロード

<?php 
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past 

require_once('lib/youtube.lib.php'); 



if(preg_match('/youtube\.com/i',$_GET['url'])){ 

    if(!preg_match('/www\./i',$_GET['url'])){ 
     $_GET['url'] = str_replace('http://','http://www.',$_GET['url']); 
    } 
    list($video_id,$download_link) = get_youtube($_GET['url']);} 

else{ 
    die('<span style="color:red;">Sorry, the URL is not recognized..</span>'); 
} 

    ?> 


    <p> 
    <img src="http://img.youtube.com/vi/<?php echo trim($video_id);?>/1.jpg" alt="Preview 1" class="ythumb" /> 
    <img src="http://img.youtube.com/vi/<?php echo trim($video_id);?>/2.jpg" alt="Preview 2" class="ythumb" /> 
    <img src="http://img.youtube.com/vi/<?php echo trim($video_id);?>/3.jpg" alt="Preview 3" class="ythumb" /> 
    </p> 
    <p> 
    <a href="<?php echo trim($download_link);?>" class="ydl" title="Download as FLV">Download FLV</a> 
    <a href="<?php echo trim($download_link);?>&fmt=35" class="ydl" title="Download as MP4">Download MP4</a> 
    <a href="<?php echo trim($download_link);?>&fmt=17" class="ydl" title="Download as 3GP">Download 3GP</a> 
    </p> 

と私のge_youtube関数はyoutube.lib.phpファイルに含まれています。ファイルにはコードが含まれています..

 <?php 



function get_content_of_url($url){ 
    $ohyeah = curl_init(); 
    curl_setopt($ohyeah, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ohyeah, CURLOPT_URL, $url); 
    $data = curl_exec($ohyeah); 
    curl_close($ohyeah); 
    //print_r($data); 
    return $data; 
} 


function get_flv_link($string) { 
if (preg_match('/watch_fullscreen(.*)plid/i', $string, $out)){ 


    if (!preg_match('/watch_fullscreen(.*)plid/i', $data, $out)) { 
    $outdata = $out[1]; 
     echo '1'.'<br>'; 
    $arrs = (explode('&',$outdata)); 
    foreach($arrs as $arr){ 
     list($i,$x) = explode("=",$arr); 
     $$i = $x; 
    } 
    $link = 'http://www.youtube.com/get_video?video_id='.$video_id.'&t='.$t; 
    echo '2'; 
    echo $link; 
array($video_id,$link); 
    return array($video_id,$link); 
} 
} 
} 

function get_youtube($url){ 

    $stream = get_content_of_url($url); 
return get_flv_link($stream); 
} 



?> 

出力は非常に面白いです。出力にエラーが表示されません。それでも私は気づくことができます。コード内

> <a href="<?php echo trim($download_link);?>&fmt=17" class="ydl" 
> title="Download as 3GP">Download 3GP</a> 

が結果に表示されますが、リンクはlocalhostを指しています。

私はいくつかのトリックを逃しているようです。私はPHPを習得しようとしている間にこのスクリプトを見つけたと伝えよう。 あなたからの助けや助け?このコードを作業コードに変換するのを手伝ってください。問題は正規表現ではありません

おかげ

+0

今のところはうれしいです –

答えて

1

は、問題はライブラリが行うYouTubeのページフォーマットの仮定です。

else { echo "No match"; } 
} 

function get_youtube($url){ 

} 

function get_youtube($url){ 

get_flv_link()ifelseを追加している)、あなたは内容が一致していないというメッセージが表示されます:交換してください。これは、おそらくYouTubeがページフォーマットを変更したことを意味します(おそらく人々がこれを掻き回そうとしていたためです)。 「それは(この時点で宣言されていない)別の変数に一致しない場合、それはその後、チェック一致する場合、」言う

if (preg_match('/watch_fullscreen(.*)plid/i', $string, $out)){ 
    if (!preg_match('/watch_fullscreen(.*)plid/i', $data, $out)) { 

はまた、私がで混乱しています。ページの内容が予想された内容と一致したとしても、おそらくライブラリに修正が必要な他のビットがあるでしょう。

関連する問題