2009-09-01 21 views
12

Ho cercato per un po 'di tempo per verificare se i link inviati sono filmati validi da youtube.com o vimeo.com ma non ci sono riuscito.Verifica se Youtube e Vimeo-clip sono validi

Delle idee come controllo URL del tipo:

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) 

?

Io uso php.

risposta

7

vedo una risposta in questo sito: www.experts-exchange.com/Programming/Languages/Scripting/JavaScript/Q_23765374.html

e disse:

Io suggerirei di usare API di YouTube dal momento che stai provando a convalidare se il video esiste. o se non vuoi entrare nella roba dell'API, allora puoi fare un trucco semplice. controllare questo link:

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

per verificare l'esistenza di un video hai bisogno di estrarre valore "v" e inviare una richiesta che contiene l'ID del Video a:

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

dove videoID è il valore "v" ad esempio un video FLE2htv9oxc verrà interrogato come questo http://gdata.youtube.com/feeds/api/videos/FLE2htv9oxc se non esiste quindi si otterrà un pa ge con "ID non valido" se esiste, restituirà un feed XML con varie informazioni sul video. in questo modo è possibile verificare che il video esista.

spero che questo ti guiderà nella giusta direzione.

la stessa cosa con vimeo, prova a cercare nella documentazione api nel sito. http://www.vimeo.com/api

+8

prega, perche non collega direttamente a quel sito esperti di scambio miserabile nella sua risposta. Quel sito è uno dei problemi che SO ha risolto in modo efficace. Non importa il 'paywall'. Ho quasi modificato la tua risposta per scollegarlo, ma ... non è la mia risposta, quindi non lo farò. Puoi citare la fonte, basta rimuovere la parte "http" per rimuovere il collegamento. –

+0

L'uso dell'api è il modo corretto per verificare se esiste un video, ma sappi che ho riscontrato che i video di YouTube non sono sempre disponibili tramite l'API tanto rapidamente quanto sono disponibili per essere guardati sul sito. Fondamentalmente, un link potrebbe essere valido, mentre l'API dice che non è per diversi minuti. –

0

Si può cercare di prendere il 301 intestazione che you tube getta se il video non è più valido

2

Ho scritto questa funzione per controllare se il link è un link youtube valida.

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

qui YOUTUBE_CHECK menas?puoi dare i dettagli – naveen

+0

YOUTUBE_CHECK = http://gdata.youtube.com/feeds/api/videos/ Puoi farcela con circa la metà di quel codice, e usare solo la parte CURL, e magari fare qualche preg_match o altro abbreviare il codice. Altrimenti funziona e mi ha salvato oggi. –

22

Se si controlla le intestazioni di risposta da una richiesta di http://gdata.youtube.com/feeds/api/videos/videoId dove videoId è il video Identifier google, si dovrebbe ottenere un 200 se il video esiste e una (cattiva richiesta) 400 se il video non esiste.

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

Ho appena provato questo, e sembra non funzionare più. –

+0

@DavidLawrence: strano, funziona per me. Ho intuito che potrebbe esserci un problema se le intestazioni sono già state inviate, ma funziona anche dopo che qualcosa è stato stampato sullo schermo (ad esempio quando le intestazioni sono già state inviate). Non so qual è stato il problema quando ci hai provato. –

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

non funziona più – Pons

Problemi correlati