Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Youtube API - Extract video ID

Tags:

php

youtube

I am coding a functionality that allows users to enter a Youtube video URL. I would like to extract the video ID from these urls.

Does Youtube API support some kind of function where I pass the link and it gives the video ID in return. Or do I have to parse the string myself?

I am using PHP ... I would appreciate any pointers / code samples in this regard.

Thanks

like image 584
Gabriel Spiteri Avatar asked Jul 02 '11 10:07

Gabriel Spiteri


1 Answers

Here is an example function that uses a regular expression to extract the youtube ID from a URL:

/**  * get youtube video ID from URL  *  * @param string $url  * @return string Youtube video id or FALSE if none found.   */ function youtube_id_from_url($url) {     $pattern =          '%^# Match any youtube URL         (?:https?://)?  # Optional scheme. Either http or https         (?:www\.)?      # Optional www subdomain         (?:             # Group host alternatives           youtu\.be/    # Either youtu.be,         | youtube\.com  # or youtube.com           (?:           # Group path alternatives             /embed/     # Either /embed/           | /v/         # or /v/           | /watch\?v=  # or /watch\?v=           )             # End path alternatives.         )               # End host alternatives.         ([\w-]{10,12})  # Allow 10-12 for 11 char youtube id.         $%x'         ;     $result = preg_match($pattern, $url, $matches);     if ($result) {         return $matches[1];     }     return false; }  echo youtube_id_from_url('http://youtu.be/NLqAF9hrVbY'); # NLqAF9hrVbY 

It's an adoption of the answer from a similar question.


It's not directly the API you're looking for but probably helpful. Youtube has an oembed service:

$url = 'http://youtu.be/NLqAF9hrVbY'; var_dump(json_decode(file_get_contents(sprintf('http://www.youtube.com/oembed?url=%s&format=json', urlencode($url))))); 

Which provides some more meta-information about the URL:

object(stdClass)#1 (13) {   ["provider_url"]=>   string(23) "http://www.youtube.com/"   ["title"]=>   string(63) "Hang Gliding: 3 Flights in 8 Days at Northside Point of the Mtn"   ["html"]=>   string(411) "<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/NLqAF9hrVbY?version=3"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/NLqAF9hrVbY?version=3" type="application/x-shockwave-flash" width="425" height="344" allowscriptaccess="always" allowfullscreen="true"></embed></object>"   ["author_name"]=>   string(11) "widgewunner"   ["height"]=>   int(344)   ["thumbnail_width"]=>   int(480)   ["width"]=>   int(425)   ["version"]=>   string(3) "1.0"   ["author_url"]=>   string(39) "http://www.youtube.com/user/widgewunner"   ["provider_name"]=>   string(7) "YouTube"   ["thumbnail_url"]=>   string(48) "http://i3.ytimg.com/vi/NLqAF9hrVbY/hqdefault.jpg"   ["type"]=>   string(5) "video"   ["thumbnail_height"]=>   int(360) } 

But the ID is not a direct part of the response. However it might contain the information you're looking for and it might be useful to validate the youtube URL.

like image 193
hakre Avatar answered Sep 20 '22 11:09

hakre