Displaying videos from Youtube in Coppermine. Displaying videos from Youtube in Coppermine.
 

News:

cpg1.5.48 Security release - upgrade mandatory!
The Coppermine development team is releasing a security update for Coppermine in order to counter a recently discovered vulnerability. It is important that all users who run version cpg1.5.46 or older update to this latest version as soon as possible.
[more]

Main Menu

Displaying videos from Youtube in Coppermine.

Started by Nibbler, October 31, 2006, 03:42:27 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Nibbler

This mod allows you to embed Youtube videos in your Coppermine gallery. A new section appears on the upload page where you enter the URL of the video. Coppermine will use the video thumbnail and title/caption/keywords from Youtube when adding the video.


Demo: http://gelipo.com/members/Nibbler/pictures/61993

To use this mod you will need some extra things:


Files to be changed: upload.php, theme.php

upload.php, add this code near the top of the file after the comments (you can skip this step if you have PHP5)


if (!function_exists('file_put_contents')) {
function file_put_contents($n,$d) {
$f=@fopen($n,"w");
if (!$f) {
return false;
} else {
fwrite($f,$d);
fclose($f);
return true;
}
}
}


Then find


            // Add the control device.
            $form_array[] = array('control', 'phase_1', 4);
           

before it, add
           

           // Youtube
           if (USER_ID) {
            $form_array[] = 'Youtube uploads';
              $form_array[] = array('', 'YT_array[]', 0, 256, 3);
              $form_array[] = 'Note: YouTube videos must be added in the form http://www.youtube.com/watch?v=xxxxxxxxxxx';
}
         
         
Find         

//Now we must prepare the inital form for adding the pictures to the database, and we must move them to their final location.
         
before it, add
         

    // youtube
   
   $YT_array = count($_POST['YT_array']);

if ($YT_array) {
$YT_failure_array = array();

for ($counter = 0; $counter < $YT_array; $counter++) {

// Create the failure ordinal for ordering the report of failed uploads.

$failure_cardinal = $counter + 1;

$failure_ordinal = ''.$failure_cardinal.'. ';
           
$YT_URI = $_POST['YT_array'][$counter];

if (!$YT_URI) continue;


if (preg_match('/youtube\.com\/watch\?v=(.*)/', $YT_URI, $matches)){

$vid = $matches[1];
                     
$xurl = "http://www.youtube.com/api2_rest?method=youtube.videos.get_details&dev_id=xxxxxxxxxxx&video_id=$vid";
                     
$xdata = file_get_contents($xurl);

file_put_contents($CONFIG['fullpath'] . "edit/yt_$vid.xml", $xdata);

// todo: parse the xml properly
if (preg_match('/<thumbnail_url>(.*)<\/thumbnail_url>/', $xdata, $xmatches)){

$thumbnail = $xmatches[1];

$rh = fopen($thumbnail, 'rb');
$wh = fopen($CONFIG['fullpath'] . "edit/yt_$vid.jpg", 'wb');


        while (!feof($rh)) fwrite($wh, fread($rh, 1024));

fclose($rh);
fclose($wh);
     
$escrow_array[] = array('actual_name'=>"youtube_$vid.jpg", 'temporary_name'=> "yt_$vid.jpg");

} else {
$YT_failure_array[] = array( 'failure_ordinal'=>$failure_ordinal, 'URI_name'=> $YT_URI, 'error_code'=> $xdata);
}
             
             } else {
                 $YT_failure_array[] = array( 'failure_ordinal'=>$failure_ordinal, 'URI_name'=> $YT_URI, 'error_code'=> 'Failed to find video');
             }
         }
     }



In the block of code above, you must replace xxxxxxxxxxx with your youtube developer id.
     
Find

     
     $zip_error_count = count($zip_failure_array);


After, add

     
      $YT_error_count = count($YT_failure_array);

     
Find

   
        // Create error report if we have errors.
    if (($file_error_count + $URI_error_count + $zip_error_count) > 0) {

   
Change to

   
        // Create error report if we have errors.
    if (($file_error_count + $URI_error_count + $zip_error_count + $YT_error_count) > 0) {

     
Find

     
             // Close the error report table.
        endtable()


before it, add
       
     
                // Look for YT upload errors.
        if ($YT_error_count > 0) {

            // There are URI upload errors. Generate the section label.
            form_label("YT errors:");
            echo "<tr><td>URI</td><td>Error message</td></tr>";

            // Cycle through the file upload errors.
            for ($i=0; $i < $YT_error_count; $i++) {

                // Print the error ordinal, file name, and error code.
                echo "<tr><td>{$YT_failure_array[$i]['failure_ordinal']} {$YT_failure_array[$i]['URI_name']}</td><td>{$YT_failure_array[$i]['error_code']}</td></tr>";

            }

        }

       
Find

       
                $form_array = array(
        sprintf($lang_upload_php['max_fsize'], $CONFIG['max_upl_size']),
        array($lang_upload_php['album'], 'album', 2),
        array('MAX_FILE_SIZE', $max_file_size, 4),
        array($lang_upload_php['picture'], 'userpicture', 1, 1),
        array($lang_upload_php['pic_title'], 'title', 0, 255, 1),
        array($captionLabel, 'caption', 3, $CONFIG['max_img_desc_length']),
        array($lang_upload_php['keywords'], 'keywords', 0, 255, 1),
        array('event', 'picture', 4)
        );


Change to
       
       
        if (preg_match('/^youtube_(.*)\.jpg$/', $file_set[0], $ytmatches)){

         $vid = $ytmatches[1];

$xdata = file_get_contents($CONFIG['fullpath'] . "edit/yt_$vid.xml");


// todo: parse the xml properly
preg_match('/<description>(.*)<\/description>/', $xdata, $xmatches);
$description = substr($xmatches[1], 0, $CONFIG['max_img_desc_length']);

// todo: parse the xml properly
preg_match('/<tags>(.*)<\/tags>/', $xdata, $xmatches);
$keywords = $xmatches[1];

// todo: parse the xml properly
preg_match('/<title>(.*)<\/title>/', $xdata, $xmatches);
$title = substr($xmatches[1], 0, 255);


                $form_array = array(
        array($lang_upload_php['album'], 'album', 2),
        array($lang_upload_php['pic_title'], 'title', 0, 255, 1, $title),
        array($captionLabel, 'caption', 3, $CONFIG['max_img_desc_length'], $description),
        array($lang_upload_php['keywords'], 'keywords', 0, 255, 1, $keywords),
    array('control', 'phase_2', 4),
    array('unique_ID', $_POST['unique_ID'], 4),
        );
       
   
    } else {

                $form_array = array(
        sprintf($lang_upload_php['max_fsize'], $CONFIG['max_upl_size']),
        array($lang_upload_php['album'], 'album', 2),
        array('MAX_FILE_SIZE', $max_file_size, 4),
        array($lang_upload_php['picture'], 'userpicture', 1, 1),
        array($lang_upload_php['pic_title'], 'title', 0, 255, 1),
        array($captionLabel, 'caption', 3, $CONFIG['max_img_desc_length']),
        array($lang_upload_php['keywords'], 'keywords', 0, 255, 1),
        array('event', 'picture', 4)
        );

}


theme.php (if you can't find this code, copy theme_html_picture() over from sample theme and then apply the change)

Find


if (isset($image_size['reduced'])) {


Change to


      if (preg_match('/^youtube_(.*)\.jpg$/', $CURRENT_PIC_DATA['filename'], $ytmatches)){
   
    $vid = $ytmatches[1];
      $pic_html = '<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/'. $vid . '"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/'. $vid . '" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object><br />';
   
    } elseif (isset($image_size['reduced'])) {



If you get this message when you upload:

Quote
        1YouTube internal error. Please report this issue -- including the exact method of producing this error -- to YouTube.

then your dev_id is probably wrong.


Gilbert

Thanks, I'll try that next week.
I was also busy with a solution but yours is more professional and with euchm neat code, and I hadn't a solution for the thumbnails.


ninocass

Many thanks for the time you have spent coding this :)

However im getting the following error:


Fatal error: Call to undefined function: file_put_contents() in /home/fhlinux192/n/nino.fruitvalestudios.com/user/htdocs/gallery/upload.php on line 2064


Many thanks

Antonio

Nibbler


Iced Coffee

What about photobucket.com? Can I link videos from photobucket the same way? or what should I modify?


netager

Great forum here - I found all answers here even without registration... :)
QuotePHP 5 (I will review this later, it is only required for convenience)
Any update on this? I have PHP 4.4.1 and really like to have this mod.
Thanks :)

Nibbler

#8
Try adding this code into the top of upload.php


if (!function_exists('file_put_contents')) {
function file_put_contents($n,$d) {
  $f=@fopen($n,"w");
  if (!$f) {
   return false;
  } else {
   fwrite($f,$d);
   fclose($f);
   return true;
  }
}
}

Iced Coffee

Quote from: Nibbler on November 01, 2006, 01:53:09 PM
No idea.

Too bad for me then as I prefer to use photobucket. youtube is good but they reduce the quality of the movies badly.

netager

Nibbler, thank you :) That was quick.
I'll try it tomorrow and report how it works :)

Pascal YAP

#11
Displaying videos from Youtube in Coppermine in French.

Morning Nibbler, All ozers,

  This MOD/HACK in our French board (in French)

Thanx

PYAP

netager

Heh... I don't know if I did everything right, but... I got this trying to open Upload page:

Parse error: parse error, unexpected $ in /home/xxxxxxxxx/public_html/gallery/upload.php on line 2702

kegobeer

Quote from: netager on November 03, 2006, 03:35:40 AM
Heh... I don't know if I did everything right, but... I got this trying to open Upload page:

Parse error: parse error, unexpected $ in /home/xxxxxxxxx/public_html/gallery/upload.php on line 2702

You didn't.  Review your changes and make sure you did everything correctly.  Most likely you forgot a curly bracket or a semicolon somewhere.
Do not send me a private message unless I ask for one.  Make your post public so everyone can benefit.

There are no stupid questions
But there are a LOT of inquisitive idiots


netager


h4nh4n

#16
Nice scripts, however when uploading I got this message
0 uploads were successful.

What's wrong with that?



___________edit____________
OMG! I just realized, I can't upload images/photos from the url as well, as I'm never use this one before (always using batch add)

_________________________
My bad, allow_url_fopen is off, I'll ask my hosting provider to change it.
Artis Indonesia - Albums of Indonesian Actresses
Johan Ng - Personal Website

h4nh4n

#17
Hi Nibbler,
I am confused with theme.php which theme.php should we change, the ones we use for default template or only on /sample/theme.php ?


Thank you



Don't worry I solved the problem :) works like charming!

h4nh4n
Artis Indonesia - Albums of Indonesian Actresses
Johan Ng - Personal Website

h4nh4n

#18
Hi Nibbler, I guess mine has a problem now... After I installed this mod I can't use batch-add anymore...

When I selected the folder in batch-add, the thumbnail didn't show up, but the links to images are working fine... When I tried insert to an album I got an error message saying "click for details or to reload" I clicked and nothing changes.

Have you test yours one? or maybe its only happened to me?

__________________________
And another one, does it effect to sitemap as well? http://www.cariartis.com/sitemap.php <<< check this out, I just realized when I visited google.com/webmaster and suprised an error with my sitemap...

This Sitemap has the following errors:
Leading whitespace
We've detected that your Sitemap file begins with whitespace. We've accepted the file, but you may want to remove the whitespace so that the file adheres to the XML standard.




h4nh4n
Artis Indonesia - Albums of Indonesian Actresses
Johan Ng - Personal Website

Nibbler

You probably added some whitespace at the end of your theme.php by accident.