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

Code: Select all

SwrawcORlp0
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