使用正则表达式在php中下载Youtube视频

使用正则表达式在php中下载Youtube视频,php,regex,curl,download,youtube,Php,Regex,Curl,Download,Youtube,我使用以下代码下载youtube视频 <?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'

我使用以下代码下载youtube视频

    <?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>

问题不在于正则表达式,问题在于库对YouTube页面格式的假设。替换:

}

function get_youtube($url){

(这会在
get\u flv\u link()
中的
if
中添加
else
),您将收到一条消息,指出内容不匹配。这可能意味着YouTube已经改变了他们的页面格式(可能是因为人们试图这样做)

此外,我对以下几点感到困惑:

if (preg_match('/watch_fullscreen(.*)plid/i', $string, $out)){
    if (!preg_match('/watch_fullscreen(.*)plid/i', $data, $out)) {
也就是说,“如果匹配,那么检查它是否与另一个变量(此时尚未声明)不匹配”。即使页面内容与预期内容匹配,您也可能需要在库中修复其他位

}

function get_youtube($url){
    else { echo "No match"; }
}

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