From: Alan J. Pippin <ajp@server.pippins.net> Date: Fri, 18 Apr 2008 03:46:59 +0000 (-0600) Subject: Added support for new youtube API: GDATA. Deprecated youtubeDevId X-Git-Tag: 1_1_1~4 X-Git-Url: http://git.pippins.net/%27%20.%20%24this-%3Ephpgw_js_url%20.%20%27/jscalendar/%7Bview%7D?a=commitdiff_plain;h=bbe9d512174553b9b410742bb82c69ffa67911f5;p=embedvideo%2F.git Added support for new youtube API: GDATA. Deprecated youtubeDevId --- diff --git a/ItemAddEmbedVideo.inc b/ItemAddEmbedVideo.inc index 0e277a4..ac7b1cf 100644 --- a/ItemAddEmbedVideo.inc +++ b/ItemAddEmbedVideo.inc @@ -67,7 +67,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin { } /* Store any Parameters into some simpler, shorter, local variables */ - global $debugOutput, $useInternalFlvPlayer, $youtubeDevId; + global $debugOutput, $useInternalFlvPlayer; global $width, $height, $externalFlvPlayer, $externalFlvPlayerVars; global $flvThumbnail, $useRemoteSize, $autoStart; global $watermarkVideos, $watermarkImage, $watermarkAlignment; @@ -78,7 +78,6 @@ class ItemAddEmbedVideo extends ItemAddPlugin { */ $debugOutput = $this->getParameter($ItemAddEmbedVideo, 'debugOutput', "false"); $useInternalFlvPlayer = $this->getParameter($ItemAddEmbedVideo, 'useInternalFlvPlayer', "true"); - $youtubeDevId = $this->getParameter($ItemAddEmbedVideo, 'youtubeDevId', ""); $youtubeShowRelated = $this->getParameter($ItemAddEmbedVideo, 'youtubeShowRelated', "false"); $width = $this->getParameter($ItemAddEmbedVideo, 'width', "320"); $height = $this->getParameter($ItemAddEmbedVideo, 'height', "240"); @@ -99,7 +98,6 @@ class ItemAddEmbedVideo extends ItemAddPlugin { print "<h2>Variable Parameters</h2>\n"; print "debugOutput=$debugOutput<br>\n"; print "useInternalFlvPlayer=$useInternalFlvPlayer<br>\n"; - print "youtubeDevId=$youtubeDevId<br>\n"; print "youtubeShowRelated=$youtubeShowRelated<br>\n"; print "width=$width<br>\n"; print "height=$height<br>\n"; @@ -120,7 +118,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin { /* youtube */ $youtubeUrlPattern="youtube.com"; - $youtubeApiUrl="http://www.youtube.com/api2_rest"; + $youtubeApiUrl="http://gdata.youtube.com/feeds/api/"; $youtubeThumbnailUrl="http://img.youtube.com/vi/"; /* We can't extract the server size from youtube */ $youtubeWidth="425"; @@ -201,148 +199,94 @@ class ItemAddEmbedVideo extends ItemAddPlugin { $extra_params="&ap=%2526fmt%3D".$matches[1]; } } - + + /* Youtube api feed */ + $feed = $youtubeApiUrl."videos/$video_id"; + if(!strcmp($debugOutput,"true")) { - print "<h2>URL Parsing Results</h2>"; + print "\n<h2>Youtube URL Parsing Results</h2>"; print "video_id: $video_id<br>"; print "extra_embed_params: $extra_params<br>"; + print "gdata feed: $feed<br>"; print "<hr>"; } - - /* If we have a valid youtube developer id, use that to get information about the video */ - /* Otherwise, just parse it directly from the HTML page */ - $dev_id = $youtubeDevId; - if(!preg_match("/\w+/",$dev_id)) { - /* No developer ID found. Proceed with direct page parsing. */ - - /* Grab the contents of the webpage used to display the video on video.google.com */ - list ($successfullyCopied, $contents, $response, $headers) = - GalleryCoreApi::fetchWebPage($url, $extraHeaders); - if (!$successfullyCopied) { - return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__, - "Unable to get video information at url: $url - $response"),NULL,NULL); - } - - /* Extract the summary from the webpage contents */ - preg_match('/<meta name="description" content="(.+?)">/i', $contents, $matches); - $summary=$matches[1]; - - /* Extract the title from the webpage contents */ - preg_match('/<meta name="title" content="(.+?)">/i', $contents, $matches); - $title=$matches[1]; - /* Extract the thumbnail URL from the webpage contents */ - $thumbnail=$youtubeThumbnailUrl.$video_id."/default.jpg"; - - /* Determine if the video should autoplay or not based on the autoStart parameter */ - $autoStartStr=""; - if(!strcmp($autoStart,"true")) { - $autoStartStr="&autoplay=1"; - } else { - $autoStartStr="&autoplay=0"; - } - - /* Determine if the video should show related videos or not based on the youtubeShowRelated parameter */ - $youtubeShowRelatedStr=""; - if(!strcmp($youtubeShowRelated,"false")) { - $youtubeShowRelatedStr="&rel=0"; - } else { - $youtubeShowRelatedStr="&rel=1"; - } - - /* Format the description to hold a reference to the embedded video */ - if(preg_match('/id=\"embed_code\".+?value=\'(.+?)\'/', $contents, $matches)) { - $description=$matches[1]; - $description=preg_replace("/"/","'",$description); - $description=preg_replace("/</","<",$description); - $description=preg_replace("/>/",">",$description); - $description=preg_replace("/&/","&",$description); - $description=preg_replace("/$video_id/",$video_id.$autoStartStr.$youtubeShowRelatedStr,$description); - $description=preg_replace("/$video_id/",$video_id.$extra_params,$description); - if(!strcmp($useRemoteSize,"false")) { - $description=preg_replace("/width='\d+'/","width='".$width."'",$description); - $description=preg_replace("/height='\d+'/","height='".$height."'",$description); - } - } else { - return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__, - "Unable to extract embedded video information from url: $url"),NULL,NULL); - } - - } else { - /* We found a valid developer ID. Proceed with API calls. */ - - /* Youtube api feed */ - $feed = $youtubeApiUrl.'?method=youtube.videos.get_details'; - $feed.= "&dev_id=$dev_id&video_id=$video_id"; - - /* Get the youtube xml feed as a string data source */ - list ($successfullyCopied, $xml, $response, $headers) = - GalleryCoreApi::fetchWebPage($feed, $extraHeaders); - if (!$successfullyCopied) { - return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__, - "Unable to get video information at url: $url - $response"),null,null); - } - - if(preg_match("/This video is private/",$xml)) { - return array(GalleryCoreApi::error(ERROR_BAD_PARAMETER,__FILE__,__LINE__, - "Unable to retrieve video information from youtube.". - "You cannot embed a private youtube video: $url"),null,null); - } + /* Get the youtube xml feed as a string data source */ + list ($successfullyCopied, $xml, $response, $headers) = + GalleryCoreApi::fetchWebPage($feed, $extraHeaders); + if (!$successfullyCopied) { + return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__, + "Unable to get video information at url: $url - $response"),null,null); + } - if(!strcmp($debugOutput,"true")) { - print "\n<h2>Youtube XML Dump</h2>"; - print "$xml"; - print "<hr>"; - } + if(preg_match("/This video is private/",$xml)) { + return array(GalleryCoreApi::error(ERROR_BAD_PARAMETER,__FILE__,__LINE__, + "Unable to retrieve video information from youtube.". + "You cannot embed a private youtube video: $url"),null,null); + } - /* Extract certain information from the xml feed */ - preg_match_all("/\<title\>(.+?)\<\/title\>/smi",$xml, $title); - preg_match_all("/\<description\>(.+?)\<\/description\>/smi",$xml, $description); - preg_match_all("/\<thumbnail_url\>(.+?)\<\/thumbnail_url\>/smi",$xml, $thumbnail); + if(!strcmp($debugOutput,"true")) { + print "\n<h2>Youtube XML Dump</h2>"; + print "$xml"; + print "<hr>"; + } - array_shift($title); - array_shift($thumbnail); - array_shift($description); + /* Extract certain information from the xml feed */ + preg_match_all("/\<media:title.+?\>(.+?)\<\/media:title\>/smi",$xml, $title); + preg_match_all("/\<media:description.+?\>(.+?)\<\/media:description\>/smi",$xml, $description); + preg_match_all("/\<media:thumbnail url='(.+?)'/smi",$xml, $thumbnail); - /* Replace html characters. More can be added but this seems to work */ - for($i=0;$i<count($description[0]);$i++){ - $description[0][$i] = preg_replace("/</","<",$description[0][$i]); - $description[0][$i] = html_entity_decode($description[0][$i],ENT_QUOTES); - } + array_shift($title); + array_shift($thumbnail); + array_shift($description); + + /* Replace html characters. More can be added but this seems to work */ + for($i=0;$i<count($description[0]);$i++){ + $description[0][$i] = preg_replace("/</","<",$description[0][$i]); + $description[0][$i] = html_entity_decode($description[0][$i],ENT_QUOTES); + } - /* Store the information found in some local variables */ - $title = $title[0][0]; - $summary = $description[0][0]; - $thumbnail = $thumbnail[0][0]; + /* Store the information found in some local variables */ + $title = $title[0][0]; + $summary = $description[0][0]; - /* Determine what our width and height should be based on our useRemoteSize parameter */ - if(!strcmp($useRemoteSize,"true")) { - $width = $youtubeWidth; - $height = $youtubeHeight; - } + /* The last thumbnail match we make will always be the highest resolution */ + $thumbnail = $thumbnail[0][sizeof($thumbnail[0])-1]; + + if(!strcmp($debugOutput,"true")) { + print "title: $title<br>"; + print "summary: $summary<br>"; + print "thumbnail: $thumbnail<br>"; + } - /* Determine if the video should autoplay or not based on the autoStart parameter */ - $autoStartStr=""; - if(!strcmp($autoStart,"true")) { - $autoStartStr="&autoplay=1"; - } + /* Determine what our width and height should be based on our useRemoteSize parameter */ + if(!strcmp($useRemoteSize,"true")) { + $width = $youtubeWidth; + $height = $youtubeHeight; + } - /* Determine if the video should show related videos or not based on the youtubeShowRelated parameter */ - $youtubeShowRelatedStr=""; - if(!strcmp($youtubeShowRelated,"false")) { - $youtubeShowRelatedStr="&rel=0"; - } + /* Determine if the video should autoplay or not based on the autoStart parameter */ + $autoStartStr=""; + if(!strcmp($autoStart,"true")) { + $autoStartStr="&autoplay=1"; + } - /* Format the description to hold a reference to the embedded video */ - $description = '<object width="'.$width.'" height="'.$height.'">'; - $description.= '<param name="movie" '; - $description.= 'value="http://www.youtube.com/v/'.$video_id.$extra_params.'"></param>'; - $description.= '<param name="wmode" value="transparent"></param>'; - $description.= '<embed src="http://www.youtube.com/v/'; - $description.= $video_id.$extra_params.$autoStartStr.$youtubeShowRelatedStr; - $description.= '" type="application/x-shockwave-flash" wmode="transparent" '; - $description.= 'width="'.$width.'" height="'.$height.'"></embed></object>'; + /* Determine if the video should show related videos or not based on the youtubeShowRelated parameter */ + $youtubeShowRelatedStr=""; + if(!strcmp($youtubeShowRelated,"false")) { + $youtubeShowRelatedStr="&rel=0"; } + + /* Format the description to hold a reference to the embedded video */ + $description = '<object width="'.$width.'" height="'.$height.'">'; + $description.= '<param name="movie" '; + $description.= 'value="http://www.youtube.com/v/'.$video_id.$extra_params.'"></param>'; + $description.= '<param name="wmode" value="transparent"></param>'; + $description.= '<embed src="http://www.youtube.com/v/'; + $description.= $video_id.$extra_params.$autoStartStr.$youtubeShowRelatedStr; + $description.= '" type="application/x-shockwave-flash" wmode="transparent" '; + $description.= 'width="'.$width.'" height="'.$height.'"></embed></object>'; + /* ********************************** * Embed a Google Video diff --git a/templates/EmbedVideoSiteAdmin.tpl b/templates/EmbedVideoSiteAdmin.tpl index 6dc7f8c..f45ba5d 100644 --- a/templates/EmbedVideoSiteAdmin.tpl +++ b/templates/EmbedVideoSiteAdmin.tpl @@ -121,9 +121,6 @@ <tr class="gbEven"><td>externalFlvPlayerVars</td><td>flashvars= options for external flash player</td> <td>{g->text text="provides the module with the flashvars to use for the external flash player"}</td></tr> - <tr class="gbOdd"><td>youtubeDevId</td><td>xxxxxxxxxxx</td> - <td>{g->text text="specify the youtube Developer ID used when this plugin makes API calls to youtube"}</td></tr> - <tr class="gbEven"><td>youtubeShowRelated</td><td>true/false</td> <td>{g->text text="specify whether you want to show the related video links in the youtube embedded player"}</td></tr>