[MOD/HACK] "YouTube" vidéos dans Coppermine [MOD/HACK] "YouTube" vidéos dans Coppermine
 

News:

CPG Release 1.6.26
Correct PHP8.2 issues with user and language managers.
Additional fixes for PHP 8.2
Correct PHP8 error with SMF 2.0 bridge.
Correct IPTC supplimental category parsing.
Download and info HERE

Main Menu

[MOD/HACK] "YouTube" vidéos dans Coppermine

Started by Pascal YAP, October 31, 2006, 08:09:42 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Pascal YAP

MOD / HACK YouTube Videos et Coppermine 1.4.x

Ce MOD/HACK va vous permettre d'importer des Vidéos depuis YouTube directement vers votre Coppermine.

Coppermine utilisera les Mot-Clefs / Vignettes / Descriptions de YouTube durant l'importation des Vidéos.

1 / Pour utiliser ce MOD vous devez être en possession de ceci :
    * Youtube dev API USER-ID (http://www.youtube.com/dev)
    * PHP URL "fopen" en fonction (à vérifier depuis votre phpinfo())
    * PHP 5 (semble OK avec 4.xx, mais voir le Post suivant)
    * Droits d'Upload sur votre Galerie en règle !

2/ Les fichiers à modifier seront upload.php et theme.php

3/ Ouvrez upload.php et recherchez :
            // Add the control device.
            $form_array[] = array('control', 'phase_1', 4);

et avant le code ci-dessus ajoutez :
           // 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';
}


trouvez :
//Now we must prepare the inital form for adding the pictures to the database, and we must move them to their final location.
et avant le code ci-dessus ajoutez :
    // 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("albums/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("albums/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');
             }
         }
     }

Dans le block ci-dessus remplacez les "xxxxxxxxxxxx" par vos identifiants de développeur YouTube.

Trouvez ceci :
     $zip_error_count = count($zip_failure_array);
et à la suite, ajoutez ceci :
      $YT_error_count = count($YT_failure_array);

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

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


Trouvez :
     
             // Close the error report table.
        endtable()

et avant le code ci-dessus, placez ceci :
     
                // 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>";

            }

        }


Recherchez :
       
                $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)
        );

remplacez le code ci-dessus par celui-ci :
       
        if (preg_match('/^youtube_(.*)\.jpg$/', $file_set[0], $ytmatches)){

         $vid = $ytmatches[1];

$xdata = file_get_contents("albums/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)
        );

}


4/ Ouvrez theme.php

Recherchez :
if (isset($image_size['reduced'])) {
et remplacez par :

      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 /><table align=\"center\">';
   
    } elseif (isset($image_size['reduced'])) {

Si vous ne trouvez pas if (isset($image_size['reduced'])) { dans votre fichier theme.php, ouvrez le fichier theme.php (votre-cpg/themes/sample/theme.php) et copiez/collez l'ensemble de function theme_html_picture()

*** Si vous obtenez un message d'erreur comme celui-ci, il est très probable que vous n'avez pas renseigné votre ID dev YouTube correctement !
Quote        1YouTube internal error. Please report this issue -- including the exact method of producing this error -- to YouTube.


PYAP

sujet original en anglais : http://forum.coppermine-gallery.net/index.php?topic=37962.0

Pascal YAP

#1
Bonjour,

Si il est supposé que ce MOD fonctionne avec PHP 4.x, il peut apparaitre malgré tout des disfonctionnements.
Si c'est le cas, essayez cette possibilité. (sas garantie  ;) )
Ouvrez UPLOAD.PHP et copiez/collez le code suivant au début du fichier juste avant :
Quote// Check to see if user can upload pictures.  Quit with an error if he cannot.

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;
  }
}
}


PYAP

liviobiz

Bonjour,

Je trouve ce mod vraiment super interessant, cependant je n'arrive pas l'installer, c'est un peu bete ! lol

Voila ce qu'il m'affiche apres avoir suivi toutes les étapes :

"Template error
Failed to find block 'img_desc'(#(<!-- BEGIN img_desc -->)(.*?)(<!-- END img_desc -->)#s) in :"

Merci d'avance si vous arrivez à m'aider !

Liviobiz

Pascal YAP

Bonjour,

Difficile à dire, mais ça sent le TEMPLATE non comptible avec la version 1.4x de Coppermine pour laquelle ce MOD est conçu.
Quelle est votre version de Coppermine ?
La fonction fopen est activée sur votre serveur ?
Quel Thème utilisez-vous ?

PYAP

liviobiz

J'utilise le theme de base de coppermine, la derniere version me semble-t-il (1.4.10)
Pour la fonction fopen du serveur, ca j'ai pas vérifié effectivement, mais je sais pas comment le faire...



liviobiz

Enfin dans phpmyadmin, je ne trouve pas PHP URL fopen, je sais pas ou il faut chercher : phpinfo je ne le trouve pas non plus...

liviobiz

Petite précision qui a son importance,
UN moment on doit faire cette opération :
4/ Ouvrez theme.php

Recherchez :
Code:

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

et remplacez par :
Code:


        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 /><table align=\"center\">';
       
       } elseif (isset($image_size['reduced'])) {

Si vous ne trouvez pas if (isset($image_size['reduced'])) { dans votre fichier theme.php, ouvrez le fichier theme.php (votre-cpg/themes/sample/theme.php) et copiez/collez l'ensemble de function theme_html_picture()


Or moi, dans mon fichier theme.php de classic, j'ai strictement rien, j'ai que des choses dans les autres themes, mais dans le theme classique, j'ai rien.
Il est précisé que je copie coll l'ensemble de la function theme_html_picture de theme.php du theme sample.D'accord, mais je le colle où ? sur le theme classic ? je l'ajoute ?

Merci encore !

Pascal YAP

Bonjour,

pour savoir tout des possibilités de votre serveur, faites (mode Admin) www. votre-coppermine/phpinfo.php

Copiez la fonction décrite dans votre THEME.PHP (classic)
Pour vous rassurrer, faites une sauvegarde de votre fichier vide !  :D

;D

PYAP

liviobiz

Merci bcp PYAP ! ca fait plaisir ! j'avance mais ca fonctionne toujours pas  ;D

En fait quand j'essaie d'uploader les fichier, il y a bien la possibilité d'ajouter des vidéos youtube, mais quand je veux les charger : bing erreur !

Voila ce qu'il m'affiche :

Fatal error: Call to undefined function: file_put_contents() in /home/music/public_html/gallery/upload.php on line 1996

Je pense sans trop prendre de risque que donc ca vient de la ligne 1996 du fichier UPLOAD ! lol je suis trop fort non ?
Par contre pour savoir l'erreur que j'ai fait alors la c'est une autre histoire !

Je te ferai bien une copie du fichier upload ici, mais je sais pas si c'est autorisé ! dans le doute j'attendrai ton accord !

En espérant que tu aies la solution, histoire que je puisse lancer mon site au plus vite ! ;D

Pascal YAP

Quotepuisse lancer mon site au plus vite !
pas de précipitation !  ;)

Fatal error: Call to undefined function: file_put_contents() in /home/music/public_html/gallery/upload.php on line 1996
Révisez le code que vous avez coller. Il semble qu'une fonction ne soit pas interprétée !
Vérifiez bien qu'il n'y ait pas la présence "invisible" d'un caractère "ESPACE" à la suite de -> en fin de fichier THEME.PHP

Quoteje te ferai bien une copie du fichier upload ici, mais je sais pas si c'est autorisé !
Oui c'est autorisé, mais inutile d'expédier l'intégralité du fichier. "Zoomez" sur la zone du code concerné !

PYAP

liviobiz

J'arrrive pas trouver l'erreur, mais j'ai remarqué que le point d'interrogation à la fin du fichier upload.php devrait etre rouge il me semble or il est noir ????? c'est pas normal ca non ? tout au début du fichier il est rouge et a la fin il est noir, alors que dans le fichier sans modif il est bien rouge a la fin...

De quoi ca peut bien venir ?? ???

Pascal YAP

Je vous suggère de repartir depuis un fichier "clair".
Eventuellement utilisez WinMerge un comparateur de fichiers TXT ou asci bien pratique dans de tels cas !  ;)

PYAP

claire19

ya pas le meme mod avec dailymotion par hasard ?

liviobiz

#13
Hello !

J'ai toujours pas réussi a faire fonctionner le mod Youtube :-\
J'ai bien tout repris a zero, mais rien a faire toujours la meme erreur !
J'ai une copie de la zone qui comprend la ligne 1996 qui est celle ou se situe apparemment l'erreur d'apres le message :
Pour info la ligne 1996 est celle soulignée et en gras

// $zip_upload_count = count($_FILES['ZIP_array']['name']);
// 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=sXOUCtsNYSg&video_id=$vid";
$xdata = file_get_contents($xurl);
[u][b]file_put_contents("albums/edit/yt_$vid.xml", $xdata);[/b][/u]
// todo: parse the xml properly
if (preg_match('/<thumbnail_url>(.*)<\/thumbnail_url>/', $xdata, $xmatches)){
$thumbnail = $xmatches[1];
$rh = fopen($thumbnail, 'rb');
$wh = fopen("albums/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');
             }
         }
     }
    // 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("albums/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("albums/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');
             }
         }
     }

Merci d'avance!


François Keller

Quote from: liviobiz on February 21, 2007, 11:51:42 PM
UP  :)
en règle générale, si il n'y a pas de réponse, c'est que personne n'est en mesure de vous aider.
Avez vous lu la DOC ? la FAQ ? et cherché sur le forum avant de poster ?
Did you read the DOC ? the FAQ ? and search the board before posting ?
Mon Blog

Pascal YAP

Bonjour,

J'ose espérer que vous êtes en possession de votre ID YouTube !
http..../youtube.com/api2_rest?method=youtube.videos.get_details&dev_id=xxxxxxxxxxx&video_id=$vid";

PYAP

liviobiz

Punaise, il fallait simplement que je rajoute ce que tu as mis au début du post concernant php 4 !!!!

L'upload fonctionne apparemment mais en fait dans mes albums ils n'affichent que les vignettes, il n'y a aucune possibilité de lire les vidéos. On voit les vignettes et c'est tout.

PYAP si tu peux encore me consacrer quelques minutes pour tenter de résoudre mon ptit pb, ca serait tres aimable de ta part ! :-)

Merci d'avance !

Pascal YAP

Ouh! visiblement on s'approche de la solution !
Inutile de vous demander si vos navigateurs sont équipés du plugin FLASH !

PYAP

liviobiz

Oui c'est inutile ! ;D

Mais j'ai bien une vignette de la vidéo qui s'affiche à la place de la vidéo.

Que faire ?