Improved error message when URL pattern doesn't match supported types.
[embedvideo/.git] / ItemAddEmbedVideo.inc
index ac7b1cf05dde317810575fc2f0820a8e02d77503..d598ee2c1d09dd501eff2dd03430aa8a0eaa4f07 100644 (file)
@@ -71,6 +71,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
           global $width, $height, $externalFlvPlayer, $externalFlvPlayerVars;
           global $flvThumbnail, $useRemoteSize, $autoStart;
           global $watermarkVideos, $watermarkImage, $watermarkAlignment;
+          global $unsupported_url;
 
           /* Find out what value our parameters should have by looking to see if they
             * are defined in our overrides section or default section. If they are not
@@ -117,7 +118,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
           /* Store other string constants we'll use later */
          
           /* youtube */
-          $youtubeUrlPattern="youtube.com";
+          $youtubeUrlPattern="youtube";
           $youtubeApiUrl="http://gdata.youtube.com/feeds/api/";
           $youtubeThumbnailUrl="http://img.youtube.com/vi/";
           /* We can't extract the server size from youtube */
@@ -125,43 +126,43 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
           $youtubeHeight="350";
 
           /* google */
-          $googleUrlPattern="video.google.com";
+          $googleUrlPattern="video.google";
           $googlePlayer="http://video.google.com/googleplayer.swf";
           /* We can't extract the server size from google video */
           $googleWidth="400";
           $googleHeight="326";
           
           /* yahoo */
-          $yahooUrlPattern="video.yahoo.com";
+          $yahooUrlPattern="video.yahoo";
           $yahooThumbnailUrl="http://thmg01.video.search.yahoo.com/image/";
           
           /* metacafe */
-          $metacafeUrlPattern="metacafe.com";
+          $metacafeUrlPattern="metacafe";
           $metacafeThumbnailUrl="http://www.metacafe.com/thumb/";
 
           /* revver */
-          $revverUrlPattern="revver.com";
+          $revverUrlPattern="revver";
           $revverThumbnailUrl="http://frame.revver.com/frame/120x90/";
 
           /* dailymotion */
-          $dailymotionUrlPattern="dailymotion.com";
+          $dailymotionUrlPattern="dailymotion";
           $dailymotionThumbnailUrl="http://www.dailymotion.com/thumbnail/160x120/video/";
 
           /* divshare */
-          $divshareUrlPattern="divshare.com";
+          $divshareUrlPattern="divshare";
           $divshareThumbnailUrl="http://www.divshare.com/direct/video_thumb/";
 
           /* stickam */
-          $stickamUrlPattern="stickam.com";
+          $stickamUrlPattern="stickam";
           $stickamThumbnailUrl="http://static.stickam.com/";
 
           /* myspace */
-          $myspaceUrlPattern="vids.myspace.com";
-          $myspaceUrlPattern2="myspacetv.com";
+          $myspaceUrlPattern="vids.myspace";
+          $myspaceUrlPattern2="myspacetv";
           $myspaceThumbnailUrl="http://mediaservices.myspace.com/services/rss.ashx?type=video&videoID=";
 
           /* vimeo */
-          $vimeoUrlPattern="www.vimeo.com";
+          $vimeoUrlPattern="vimeo.com";
           
           /* Gallery2 specific paths and variables */
           $urlGenerator =& $gallery->getUrlGenerator();
@@ -169,6 +170,9 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
           $gallery2_flv_thumbnail = "modules/embedvideo/images/G2video_thumbnail.jpg";
           $gallery2_video_watermark = "modules/embedvideo/images/G2video_watermark1.png";
           $gallery2_flv_player = "modules/flashvideo/lib/G2flv.swf";
+
+          /* Unsupported URLs */
+          $unsupported_url=0;
           
           /* Store the passed URL in a shorter local variable */
           $url = $form['webPage']['URL'];
@@ -187,6 +191,8 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                   $extra_params = $matches[2];
               } else if (preg_match("/watch\?v=(.*)/",$url,$matches)) {
                   $video_id = $matches[1];
+              } else if (preg_match("/v\/(.*)/",$url,$matches)) {
+                  $video_id = $matches[1];
               } else {
                   return array(GalleryCoreApi::error(ERROR_BAD_PARAMETER,__FILE__,__LINE__,
                                "Unable to extract video id from url: $url"),null,null);
@@ -194,7 +200,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
 
               /* If extra params were given, handle them here */
               if(strcmp($extra_params,"")) {
-                /* Handle the HD format information */
+                /* Handle the high quality format information */
                 if(preg_match("/fmt=(\d+)/",$extra_params,$matches)) {
                   $extra_params="&ap=%2526fmt%3D".$matches[1];
                 }
@@ -325,10 +331,11 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
               }
 
               /* Extract the thumbnail URL from the webpage contents */
-              preg_match('/<img src="(http:\/\/video\.google\.com\/ThumbnailServer2.+?)" /i',
+              preg_match('/thumbnail: \'(http:\/\/.*?\/ThumbnailServer2.+?)\'/i',
                          $contents, $matches);
               $thumbnail=$matches[1];
-              $thumbnail=preg_replace("/offsetms=0/","offsetms=0",$thumbnail);
+              $thumbnail=preg_replace("/\\\\x26/","&",$thumbnail);
+              $thumbnail=preg_replace("/\\\\x3d/","=",$thumbnail);
 
               /* Determine what our width and height should be based on our useRemoteSize parameter */
               if(!strcmp($useRemoteSize,"true")) {
@@ -365,7 +372,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                                "Unable to extract vid id from url: $url"),null,null);
               }
 
-              /* Grab the contents of the webpage used to display the video on video.google.com */
+              /* Grab the contents of the webpage used to display the video */
               list ($successfullyCopied, $contents, $response, $headers) =
                 GalleryCoreApi::fetchWebPage($url, $extraHeaders);
               if (!$successfullyCopied) {
@@ -415,7 +422,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                                "Unable to extract item id from url: $url"),null,null);
               }
 
-              /* Grab the contents of the webpage used to display the video on video.google.com */
+              /* Grab the contents of the webpage used to display the video */
               list ($successfullyCopied, $contents, $response, $headers) =
                 GalleryCoreApi::fetchWebPage($url, $extraHeaders);
               if (!$successfullyCopied) {
@@ -468,7 +475,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                                "Unable to extract item id from url: $url"),null,null);
               }
 
-              /* Grab the contents of the webpage used to display the video on video.google.com */
+              /* Grab the contents of the webpage used to display the video */
               list ($successfullyCopied, $contents, $response, $headers) =
                 GalleryCoreApi::fetchWebPage($url, $extraHeaders);
               if (!$successfullyCopied) {
@@ -526,7 +533,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                                "Unable to extract item id from url: $url"),null,null);
               }
 
-              /* Grab the contents of the webpage used to display the video on video.google.com */
+              /* Grab the contents of the webpage used to display the video */
               list ($successfullyCopied, $contents, $response, $headers) =
                 GalleryCoreApi::fetchWebPage($url, $extraHeaders);
               if (!$successfullyCopied) {
@@ -576,7 +583,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                                "Unable to extract item id from url: $url"),null,null);
               }
 
-              /* Grab the contents of the webpage used to display the video on video.google.com */
+              /* Grab the contents of the webpage used to display the video */
               list ($successfullyCopied, $contents, $response, $headers) =
                 GalleryCoreApi::fetchWebPage($url, $extraHeaders);
               if (!$successfullyCopied) {
@@ -625,7 +632,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                                "Unable to extract item id from url: $url"),null,null);
               }
 
-              /* Grab the contents of the webpage used to display the video on video.google.com */
+              /* Grab the contents of the webpage used to display the video */
               $url=preg_replace("/&amp;/","&",$url);
               list ($successfullyCopied, $contents, $response, $headers) =
                 GalleryCoreApi::fetchWebPage($url, $extraHeaders);
@@ -653,7 +660,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
               }
 
               /* Format the description to hold a reference to the embedded video */
-              if(preg_match('/input type.+?'.$item_id.'.+?value="(.+?)"/', $contents, $matches)) { 
+              if(preg_match('/readonly value="(.+?)"/', $contents, $matches)) { 
                 $description=$matches[1];
                 $description=preg_replace("/&quot;/","'",$description);
                 $description=preg_replace("/&lt;/","<",$description);
@@ -683,7 +690,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                                "Unable to extract video id from url: $url"),null,null);
               }
 
-              /* Grab the contents of the webpage used to display the video on video.google.com */
+              /* Grab the contents of the webpage used to display the video */
               list ($successfullyCopied, $contents, $response, $headers) =
                 GalleryCoreApi::fetchWebPage($url, $extraHeaders);
               if (!$successfullyCopied) {
@@ -710,12 +717,21 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
               if(preg_match('/thumbnail url="(.+?)"/',$video_info, $matches)) {
                 $thumbnail = $matches[1];
               } else {
-                return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__,
-                       "Unable to extract thumbnail information from url: $url"),NULL,NULL);
+                 /*
+                  * Set the thumbnail to some generic jpg image,
+                  * since we can't extract it from the site.
+                  * If no parameter is set, set it to a default value.
+                  */
+                if(preg_match("/\w+/", $flvThumbnail)) {
+                  $thumbnail = $flvThumbnail;
+                } else {
+                  $thumbnail = $gallery2_url.$gallery2_flv_thumbnail;
+                }
               }
 
               /* Format the description to hold a reference to the embedded video */
-              if(preg_match('/(&lt;embed src.+?\/embed&gt;)/', $contents, $matches)) { 
+              if(preg_match('/(&lt;embed src.+?\/embed&gt;)/', $contents, $matches) ||
+                 preg_match('/(&lt;embed src.+?\/object&gt;)/', $contents, $matches)) { 
                 $description=$matches[1];
                 $description=preg_replace("/&quot;/","'",$description);
                 $description=preg_replace("/&lt;/","<",$description);
@@ -744,7 +760,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                                "Unable to extract video id from url: $url"),null,null);
               }
 
-              /* Grab the contents of the webpage used to display the video on video.google.com */
+              /* Grab the contents of the webpage used to display the video */
               list ($successfullyCopied, $contents, $response, $headers) =
                 GalleryCoreApi::fetchWebPage($url, $extraHeaders);
               if (!$successfullyCopied) {
@@ -836,11 +852,12 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
               
           /*
            **********************************
-           * Embed a remote .flv file
+           * Embed a remote .flv or .mp4 file
            **********************************
             */
-          } else if(preg_match("/.*\/(.+?)\.flv/i",$url,$matches)) {
-
+          } else if(preg_match("/.*\/(.+?)\.flv/i",$url,$matches) ||
+                    preg_match("/.*\/(.+?)\.mp4/i",$url,$matches)) {
+            
               /* Set the title and summary to the name of the file */
               $title = $matches[1];
               $summary = $matches[1];
@@ -942,15 +959,71 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                   $description.= 'pluginspage="http://www.macromedia.com/go/getflashplayer"/>';
                   $description.= '</object></div>';
               }
-              
+
+          /*
+           **********************************
+           * Embed a generic <object ... <embed ... video
+           **********************************
+            */ 
+          } else {
+
+            /* Grab the contents of the webpage used to display the video */
+            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 URL base (site name) */
+            preg_match("/(http:\/\/.+?)\//i",$url,$matches);
+            $site = $matches[1];
+            print "site: $site<br>";
+            
+            /* Extract the summary from the webpage contents */
+            $summary="Unknown";
+            if(preg_match('/<meta name="description" content="(.+?)"/si', $contents, $matches)) {
+              $summary=$matches[1];
+            }
+
+            /* Extract the title from the webpage contents */
+            $title="Unknown";
+            if(preg_match('/<title>(.+?)<\/title>/i', $contents, $matches)) {
+              $title=$matches[1];
+            }
+
+            /*
+             * Set the thumbnail to some generic jpg image,
+             * since we can't extract it from a generic website.
+             * If no parameter is set, set it to a default value.
+             */
+            if(preg_match("/\w+/", $flvThumbnail)) {
+              $thumbnail = $flvThumbnail;
+            } else {
+              $thumbnail = $gallery2_url.$gallery2_flv_thumbnail;
+            }
+
+            /* Format the description to hold a reference to the embedded video */
+            if(preg_match('/(<object.+?<embed.+?<\/object>)/', $contents, $matches)) { 
+              $description=$matches[1];
+              if(!strcmp($useRemoteSize,"false")) {
+                $description=preg_replace("/width=\"\d+\"/","width=\"".$width."\"",$description);
+                $description=preg_replace("/height=\"\d+\"/","height=\"".$height."\"",$description);
+              }
+              $description=preg_replace("/src=\"\//","src=\"".$site."\/",$description);
+            } else {
+              $unsupported_url=1;
+            }
+          }
+          
          /*
           **********************************
           * Unsupported URL to embed
           **********************************
            */   
-          } else {
+          if($unsupported_url == 1) {
               return array(GalleryCoreApi::error(ERROR_UNSUPPORTED_FILE_TYPE,__FILE__,__LINE__,
-                           "Unable to embed video from: $url"),null,null);
+                           "The URL you have supplied is unsupported (check the list of supported URLs, they must match exactly). You tried to embed a video from this url: $url"),null,null);
           }