2009-09-01 4 views
12

Ich habe schon eine ganze Weile versucht zu überprüfen, ob die eingereichten Links gültige Videoclips von youtube.com oder vimeo.com sind, aber das ist mir nicht gelungen.Prüfe, ob Youtube und Vimeo-Clips gültig sind

Irgendwelche Ideen, wie URLs zu überprüfen, wie:

http://www.youtube.com/watch?v=jc0rnCBCX2c&feature=fvhl (valid) 
http://www.youtube.com/watch?v=jc0FFCBCX2c&feature=fvhl (not valid) 
http://www.youtube.com/v/jc0rnCBCX2c (valid) 
http://www.youtube.com/v/ddjcddddX2c (not valid) 
http://www.vimeo.com/463l522 (not valid) 
http://www.vimeo.com/1483909 (valid) 
http://www.vimeo.com/lumiblue (not valid) 
http://www.youtube.com/user/dd181921 (not valid) 

?

Ich benutze PHP.

Antwort

7

Ich sehe eine Antwort auf dieser Seite: www.experts-exchange.com/Programming/Languages/Scripting/JavaScript/Q_23765374.html

und er sagte:

würde ich mit YouTube-API vorschlagen da Sie versuchen zu überprüfen, ob das Video vorhanden ist. oder wenn Sie nicht in API-Sachen gehen wollen, dann können Sie einen einfachen Trick machen. überprüfen Sie diesen Link:

http://code.google.com/apis/youtube/developers_guide_php.html#RetrievingVideoEntry

für die Existenz eines Videos zu überprüfen müssen Sie "v" Wert extrahieren und eine Anfrage zu senden, die die Video-ID enthält zu:

http://gdata.youtube.com/feeds/api/videos/videoID

wo videoID ist der "v" Wert zum Beispiel ein Video FLE2htv9oxc wird so abgefragt werden http://gdata.youtube.com/feeds/api/videos/FLE2htv9oxc wenn es nicht existiert dann werden Sie ein pa bekommen ge mit "Ungültige ID" , wenn es existiert, wird einen XML-Feed mit verschiedenen Informationen über das Video zurückgeben. Auf diese Weise können Sie überprüfen, ob das Video vorhanden ist.

hoffe, das wird dich in die richtige richtung bringen.

die gleiche Sache mit Vimeo, versuchen Sie, in der Dokumentation in Api-Website zu suchen. http://www.vimeo.com/api

+8

Bitte, bitte nicht direkt an die elenden Experten-Austauschstelle in Ihrer Antwort zu verknüpfen. Dieser Standort ist eines der Probleme, die SO effektiv gelöst hat. Vergiss die 'Paywall'. Ich habe deine Antwort fast bearbeitet, um sie zu entfernen, aber ... es ist nicht meine Antwort, also werde ich nicht. Sie können die Quelle angeben, nehmen Sie einfach den "http" Teil, um den Link zu entfernen. –

+0

Die Verwendung der API ist der richtige Weg, um zu prüfen, ob ein Video existiert, aber sei dir bewusst, dass YouTube-Videos nicht immer so schnell über die API verfügbar sind, wie sie auf der Website verfügbar sind. Grundsätzlich könnte eine Verbindung gültig sein, während die API sagt, dass es nicht für mehrere Minuten ist. –

0

Sie können versuchen, die 301-Header zu fangen, die Sie Rohr wirft, wenn das Video ist nicht mehr gültig

2

ich diese Funktion geschrieben zu überprüfen, ob die Verbindung ein gültiger YouTube-Link ist.

/** 
* This function will check if 'url' is valid youtube video and return the ID. 
* If the return value === false then this is **not** a valid youtube url, otherwise the youtube id is returned. 
* 
* @param <type> $url 
* @return <type> 
*/ 


private static function get_youtube_id($url) { 
     $link = parse_url($url,PHP_URL_QUERY); 

    /**split the query string into an array**/ 
    if($link == null) $arr['v'] = $url; 
    else parse_str($link, $arr); 
    /** end split the query string into an array**/ 
    if(! isset($arr['v'])) return false; //fast fail for links with no v attrib - youtube only 

    $checklink = YOUTUBE_CHECK . $arr['v']; 

    //** curl the check link ***// 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL,$checklink); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 5); 
    $result = curl_exec($ch); 
    curl_close($ch); 

    $return = $arr['v']; 
    if(trim($result)=="Invalid id") $return = false; //you tube response 

    return $return; //the stream is a valid youtube id. 
} 
+0

hier YOUTUBE_CHECK menas?Kannst du die Details geben – naveen

+0

YOUTUBE_CHECK = http://gdata.youtube.com/feeds/api/videos/ Sie können mit etwa der Hälfte dieses Codes, und nur den CURL-Teil, und vielleicht einige preg_match oder so zu tun kürze den Code. Sonst funktioniert das und hat mich heute gerettet. –

22

Wenn Sie die Antwort-Header aus einer Anfrage an http://gdata.youtube.com/feeds/api/videos/videoId überprüfen, wo videoId das Video Identifier Google ist, sollten Sie ein 200 erhalten, wenn das Video existiert und ein 400 (bad request), wenn das Video nicht existiert.

// PHP code 

// Check if youtube video item exists by the existance of the the 200 response 
$headers = get_headers('http://gdata.youtube.com/feeds/api/videos/' . $youtubeId); 
if (!strpos($headers[0], '200')) { 
    echo "The YouTube video you entered does not exist"; 
    return false; 
} 
+0

Ich habe das gerade versucht, und es scheint nicht mehr zu funktionieren. –

+0

@DavidLawrence: seltsam, es funktioniert für mich. Ich vermutete, dass es ein Problem geben könnte, wenn Header bereits gesendet wurden, aber es funktioniert auch, nachdem etwas auf den Bildschirm gedruckt wurde (d. H. Wenn Header bereits gesendet wurden). Ich weiß nicht, was das Problem war, als du es versucht hast. –

0
/* 
* Verify YouTube video status 
*/ 

    $videoID = "o8UCI7r1Aqw"; 
    $header = get_headers("http://gdata.youtube.com/feeds/api/videos/". $videoID); 

    switch($headers[0]) { 
    case '200': 
    // video valid 
    break; 

    case '403': 
    // private video 
    break; 

    case '404': 
    // video not found 
    break; 

    default: 
    // nothing above 
    break; 
    } 
+0

funktioniert nicht mehr – Pons

Verwandte Themen