Added support for new youtube API: GDATA. Deprecated youtubeDevId
authorAlan J. Pippin <ajp@server.pippins.net>
Fri, 18 Apr 2008 03:46:59 +0000 (21:46 -0600)
committerAlan J. Pippin <ajp@pippins.net>
Fri, 18 Apr 2008 03:46:59 +0000 (21:46 -0600)
ItemAddEmbedVideo.inc
templates/EmbedVideoSiteAdmin.tpl

index 0e277a490427e598fda49ef8a32c2473ca12118b..ac7b1cf05dde317810575fc2f0820a8e02d77503 100644 (file)
@@ -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("/&quot;/","'",$description);
-                  $description=preg_replace("/&lt;/","<",$description);
-                  $description=preg_replace("/&gt;/",">",$description);
-                  $description=preg_replace("/&amp;/","&",$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("/&#60;/","<",$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("/&#60;/","<",$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
index 6dc7f8cc02cd175127be19df4c38e91833642e16..f45ba5de5c7d3f538adc4b359a0dfa23303c5e64 100644 (file)
     <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>