...

View Full Version : Youtube Video Information from URL



Camron467
05-25-2009, 10:31 PM
This snippet not all of it is mine, however it is published freely for use on the internet (I will try and find the websites). I put this together using Google's youtube API with PHP.

At the bottom are pretty self explanatory variables that include the information. Uses GET so, a request could be youtube.php?url=http://youtube.com/?v=whatever&?=somethingblahblahblah


// function to parse a video <entry>
function parseVideoEntry($entry) {
$obj= new stdClass;

// get nodes in media: namespace for media information
$media = $entry->children('http://search.yahoo.com/mrss/');
$obj->title = $media->group->title;
$obj->description = $media->group->description;

// get video player URL
$attrs = $media->group->player->attributes();
$obj->watchURL = $attrs['url'];

// get video thumbnail
$attrs = $media->group->thumbnail[0]->attributes();
$obj->thumbnailURL = $attrs['url'];

// get <yt:duration> node for video length
$yt = $media->children('http://gdata.youtube.com/schemas/2007');
$attrs = $yt->duration->attributes();
$obj->length = $attrs['seconds'];

// get <yt:stats> node for viewer statistics
$yt = $entry->children('http://gdata.youtube.com/schemas/2007');
$attrs = $yt->statistics->attributes();
$obj->viewCount = $attrs['viewCount'];

// get <gd:rating> node for video ratings
$gd = $entry->children('http://schemas.google.com/g/2005');
if ($gd->rating) {
$attrs = $gd->rating->attributes();
$obj->rating = $attrs['average'];
} else {
$obj->rating = 0;
}

// get <gd:comments> node for video comments
$gd = $entry->children('http://schemas.google.com/g/2005');
if ($gd->comments->feedLink) {
$attrs = $gd->comments->feedLink->attributes();
$obj->commentsURL = $attrs['href'];
$obj->commentsCount = $attrs['countHint'];
}

//Get the author
$obj->author = $entry->author->name;
$obj->authorURL = $entry->author->uri;


// get feed URL for video responses
$entry->registerXPathNamespace('feed', 'http://www.w3.org/2005/Atom');
$nodeset = $entry->xpath("feed:link[@rel='http://gdata.youtube.com/schemas/
2007#video.responses']");
if (count($nodeset) > 0) {
$obj->responsesURL = $nodeset[0]['href'];
}

// get feed URL for related videos
$entry->registerXPathNamespace('feed', 'http://www.w3.org/2005/Atom');
$nodeset = $entry->xpath("feed:link[@rel='http://gdata.youtube.com/schemas/
2007#video.related']");
if (count($nodeset) > 0) {
$obj->relatedURL = $nodeset[0]['href'];
}

// return object to caller
return $obj;
}

// get video ID from $_GET
if (!isset($_POST['url'])) {
die ('Please enter a youtube video URL');
} else {
$vid = stripslashes($_POST['url']);
$string = $vid;
$url = parse_url($string);
parse_str($url['query']);


}

// set video data feed URL
$feedURL = 'http://gdata.youtube.com/feeds/api/videos/'. $v;

// read feed into SimpleXML object
$entry = simplexml_load_file($feedURL);

// parse video entry
$video = parseVideoEntry($entry);


//These variables include the video information
$video_title = mysql_real_escape_string(stripslashes($video->title));
$video_description = mysql_real_escape_string(stripslashes($video->description));
$video_thumbnail = stripslashes($video->thumbnailURL);
$video_author = mysql_real_escape_string(stripslashes($video->author));
$embed = '<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/'.$v.'&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/'.$v.'&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>';

Suhail
08-19-2009, 02:10 PM
Thanks friend, i was searching for this.

ebookict.com
09-15-2009, 08:42 AM
great ~~!

can you edit my code for me
http://ebookict.com/test/

code: http://ebookict.com/test.zip

dniwebdesign
06-11-2010, 10:15 PM
I know this is older but it should be noted that this class will not work if allow_url_fopen is set to off.

If there are any alternatives that do not use the allow_url_fopen, I would like to know.

Fou-Lu
06-11-2010, 10:29 PM
I know this is older but it should be noted that this class will not work if allow_url_fopen is set to off.

If there are any alternatives that do not use the allow_url_fopen, I would like to know.

You can scrape a page using curl, and load the resulting string into simplexml. You can also set up a socket on 80 to read the source (socketing is almost always available).

dniwebdesign
06-12-2010, 06:15 AM
Actually, I have done the curl which was pretty simple. Almost everything remains the same except for one function (which I humbly donate to the community). ;-)


function getVideo($url) {
echo $url;
// get video ID from $_GET
if (!isset($url)) {
return 'Please enter a YouTube video URL.';
} else {
$vid = stripslashes($url);
$string = $vid;
$url = parse_url($string);
parse_str($url['query']);
}
// set video data feed URL
$feedURL = 'http://gdata.youtube.com/feeds/api/videos/'. $v;


//Since allow_url_fopens is off use curl to get
//the xml document from youtube. ;)
//Added by DNI Web Design, June 11, 2010
$ch = curl_init(); // initialize curl handle
curl_setopt($ch, CURLOPT_URL,$feedURL); // set url to post to
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable
curl_setopt($ch, CURLOPT_TIMEOUT, 4); // times out after 4s

$result = curl_exec($ch); // run the whole process*/

// read feed into SimpleXML object
$entry = simplexml_load_string($result);

// parse video entry
$video = $this->parseVideoEntry($entry);

//These variables include the video information
$videos["title"] = stripslashes($video->title);
$videos["description"] = stripslashes($video->description);
$videos["thumbnail"] = stripslashes($video->thumbnailURL);
$videos["author"] = stripslashes($video->author);
$videos["embed"] = '<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/'.$v.'&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/'.$v.'&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>';
$videos["key"] = $v;
return $videos;
}

castex
06-26-2010, 12:34 PM
Hi dni, your code gives this error;


Fatal error: Using $this when not in object context in /home/downloa8/public_html/youtube-download/you.php on line 32

Fou-Lu
06-26-2010, 05:55 PM
Drop the $this-> off the method call and treat both as functions. Or wrap both functions in a class and change it to object oriented.



EZ Archive Ads Plugin for vBulletin Copyright 2006 Computer Help Forum