2010-10-28 30 views
1

Comment puis-je récupérer l'ID vidéo uniquement à partir des URL de YouTube?Saisissez l'ID vidéo uniquement à partir des URL de YouTube

Par exemple,

http://www.youtube.com/watch?v=aPm3QVKlBJg

quelque temps les URL contiennent d'autres informations après le 'v' comme

http://www.youtube.com/watch?v=Z29MkJdMKqs&feature=grec_index

mais je ne vouloir l'autre info, juste l'ID de la vidéo.

Je ne peux penser à utiliser exploser,

$url = "http://www.youtube.com/watch?v=aPm3QVKlBJg"; 
$pieces = explode("v=", $url); 

mais comment nettoyer les URL comme celui-ci?

http://www.youtube.com/watch?v=Z29MkJdMKqs&feature=grec_index

+0

double possible de [analyser youtube id vidéo à l'aide de preg_match] (http://stackoverflow.com/questions/2936467/parse-youtube-video -id-using-preg-match) – kennytm

+0

Ceci n'est * pas * un doublon sauf si vous supposez que l'utilisateur était après une solution regex, ce qui n'est * * pas * la meilleure solution à ce problème. – meagar

+0

@meagar mais cette question avait aussi une solution 'parse_url' de Gumbo, donc ça fonctionnera comme un doublon. –

Répondre

10

Vous ne devez jamais utiliser des expressions régulières quand la même chose peut être accompli grâce à des fonctions construits à cet effet.

Vous pouvez utiliser parse_url pour briser l'URL en ses segments et parse_str pour briser la partie de chaîne de requête dans un tableau clé/valeur:

$url = 'http://www.youtube.com/watch?v=Z29MkJdMKqs&feature=grec_index' 

// break the URL into its components 
$parts = parse_url($url); 

// $parts['query'] contains the query string: 'v=Z29MkJdMKqs&feature=grec_index' 

// parse variables into key=>value array 
$query = array(); 
parse_str($parts['query'], $query); 

echo $query['v']; // Z29MkJdMKqs 
echo $query['feature'] // grec_index 

La forme alternative de parse_str variables extraits dans le périmètre actuel . Vous pouvez construire cela en fonction de trouver et retourner le paramètre v:

// Returns null if video id doesn't exist in URL 
function get_video_id($url) { 
    $parts = parse_url($url); 

    // Make sure $url had a query string 
    if (!array_key_exists('query', $parts)) 
    return null; 

    parse_str($parts['query']); 

    // Return the 'v' parameter if it existed 
    return isset($v) ? $v : null; 
} 
+0

merci beaucoup pour cela! c'est beau! :-) – laukok

+0

Le problème avec cette solution est que les URL YouTube sont incohérentes, c'est le moins qu'on puisse dire. Il y a au moins 10 formats d'URL différents que YouTube acceptera et seulement quelques-uns d'entre eux utilisent le format? V = pour soumettre l'ID vidéo. La plupart des formats d'URL contiennent l'ID de la vidéo dans le cadre du chemin des URL, comme suit: 'http: // www.youtube.com/e/dQw4w9WgXcQ' – Benjam