Page 1 of 1
Parse Youtube ID from Youtube URL
Posted: Thu Aug 26, 2010 7:49 am
by defroster
How could I from the varying URLs parse only the YouTube video ID?
Code: Select all
http://www.youtube.com/watch?v=SwrawcORlp0&feature=player_embedded
http://www.youtube.com/watch?v=SwrawcORlp0&feature=popular
How can I from the URLs above only extract the id into a variable $url
Thanks, df
Re: Parse Youtube ID from Youtube URL
Posted: Thu Aug 26, 2010 7:58 am
by defroster
Actually just stumbled upon one which works well.
Code: Select all
/*
* Retrieve the video ID from a YouTube video URL
* @param $ytURL The full YouTube URL from which the ID will be extracted
* @return $ytvID The YouTube video ID string
*/
function getYTid($ytURL) {
$ytvIDlen = 11; // This is the length of YouTube's video IDs
// The ID string starts after "v=", which is usually right after
// "youtube.com/watch?" in the URL
$idStarts = strpos($ytURL, "?v=");
// In case the "v=" is NOT right after the "?" (not likely, but I like to keep my
// bases covered), it will be after an "&":
if($idStarts === FALSE)
$idStarts = strpos($ytURL, "&v=");
// If still FALSE, URL doesn't have a vid ID
if($idStarts === FALSE)
die("YouTube video ID not found. Please double-check your URL.");
// Offset the start location to match the beginning of the ID string
$idStarts +=3;
// Get the ID string and return it
$ytvID = substr($ytURL, $idStarts, $ytvIDlen);
return $ytvID;
}
Re: Parse Youtube ID from Youtube URL
Posted: Thu Aug 26, 2010 10:52 am
by AbraCadaver
That's a lot of code:
Code: Select all
$url = 'http://www.youtube.com/watch?v=SwrawcORlp0&feature=player_embedded';
// parse into global scope
parse_str($url);
echo $v;
// or parse into array
parse_str($url, $vars);
echo $vars['v'];
Re: Parse Youtube ID from Youtube URL
Posted: Thu Aug 26, 2010 11:07 am
by defroster
Wow, that was a lot easier way of doing it! thanks
Re: Parse Youtube ID from Youtube URL
Posted: Thu Aug 26, 2010 11:08 am
by McInfo
Before you can use parse_str(), you need to extract the query string from the URL. Otherwise, parse_str() returns NULL.
Code: Select all
$url = 'http://www.youtube.com/watch?v=SwrawcORlp0&feature=player_embedded#internal';
// Solution 1
$args = null;
parse_str(parse_url($url, PHP_URL_QUERY), $args);
echo $args['v']; // SwrawcORlp0
// Solution 2
$matches = null;
preg_match('/v=([^&#]+)/', $url, $matches);
echo $matches[1]; // SwrawcORlp0
Edit: Added # to regex.
Re: Parse Youtube ID from Youtube URL
Posted: Thu Aug 26, 2010 11:11 am
by AbraCadaver
Good catch!
Re: Parse Youtube ID from Youtube URL
Posted: Thu Aug 26, 2010 12:06 pm
by defroster
Thanks

This is truly a great forum