Bonjour,
En farfouillant dans le forum à la recherche d'une raison pour laquelle les web-services ne marchait pas pour moi je suis tombé sur ce post (pourtant épinglé, honte à moi) : http://fr.piwigo.org/forum/viewtopic.php?pid=131850
Mon but était de pourvoir récupérer une image au hasard et de l'afficher dans Facebook (petite page de promo en html)
Première constatation : le script n'était pas encore finalisé.
Deuxième :il me fallait adapter la fonction légèrement car un script n'est pas utilisable avec FB dans mon cas.
Comment cha marche ?
L'idée lancé sur le post sus-cité débouche sur un fichier complémentaire à celui d'origine, ws.php, qu'on appel lors de l'utilisation des web-services et qui s'appelle ws2.php.
A l'origine une fonction d'affichage y était intégrée mais j'ai eu l'idée de séparer la gestion du web service de l'affichage lui même.
Du coup voilà deux fichiers pour le même prix :
- ws2.php légèrement retouché et fonctionnel
- img_hasard.php qui affiche donc une image au hasard
L’intérêt de ce système réside dans la possibilité d'utiliser un seul ws2.php pour plusieurs autres fichiers d'affichage.
Le mien en l’occurrence est particulier. Il se comporte comme une image et peut donc être utilisé comme tel. Y compris dans un système pointilleux comme Facebook.
Le code des deux fichiers maintenant :
- ws2.php
<?php /* Remplacez [Dossier d'install Piwigo] par ce qui correspond à votre cas */ $piwigo = '[Dossier d'install Piwigo]/'; /* Définition de la racine du site */ $files=$_SERVER['PHP_SELF']; $file= explode('/',$files); $file=$file[count($file)-1]; $racine = $_SERVER['SERVER_NAME'].str_replace( $file ,'',$_SERVER['PHP_SELF']); /* Il faut corriger les adresses des photos dans la base de données pour éviter les croix html */ /* Dans la base de données l'adresse des photos sont en relatif, sauf pour les sites distants. */ $adr_rel='http://'. $racine.'galleries'; $adr_absolue='http://'. $racine.$piwigo.'galleries'; /* Génération des attribus pour le WS */ if(!isset($_GET['method'])||$_GET['method']==null) {$_GET['method']='pwg.categories.getImages';}; if(!isset($_GET['format'])||$_GET['format']==null) {$_GET['format']='php';}; if(!isset($_GET['recursive'])||$_GET['recursive']==null) {$_GET['recursive']='true';}; if(!isset($_GET['order'])||$_GET['order']==null) {$_GET['order']='random';}; if(!isset($_GET['f_with_thumbnail'])||$_GET['f_with_thumbnail']==null){$_GET['f_with_thumbnail']='false';}; if(!isset($_GET['per_page'])||$_GET['per_page']==null) {$_GET['per_page']='1';};/* 1 = 1 image */ if(!isset($_GET['page'])||$_GET['page']==null) {$_GET['page']='1';}; /* Ajouter variables pour définir la taille d'image renvoyée */ /* Les WS fonctionnes dans le contexte de Piwigo */ /* Il faut donc définir les chemins pour accéder à ce contexte */ if (!defined('PHPWG_ROOT_PATH')) define('PHPWG_ROOT_PATH', './'.$piwigo); @include (PHPWG_ROOT_PATH.'include/common.inc.php'); global $conf; //========================= Code pour debuggage ================================== //========= Permet d'afficher toutes les variables traitées dans ce script ======= // echo '<div style="visibility:hidden; height:0 "><pre>'; // print_r($conf); // echo '</pre></div>'; //================================================================================ /* Récupération du flux généré par WS en fonction des attribues passés par $_GET */ ob_start(); include (PHPWG_ROOT_PATH . 'ws.php'); $result .= ob_get_contents(); ob_end_clean(); $thumbc = unserialize($result);/* que nous "désérialisons" (d) */ ?>
- img_hasard.php :
<?php include 'ws2.php'; if ($thumbc["stat"]=='ok') /* Réponse correcte ? */ { for ($i=0;$i<$thumbc["result"]["images"]["count"];$i++) { $picture = $thumbc["result"]["images"]["_content"][$i]; // dans picture nous avons : id, width, height, hit, file, name, comment, tn_url, element_url //Il faut un chemin relatif(Free.fr ???) et un nom de fichier, pas un script $picture['element_url']=str_replace('http://'.$_SERVER['SERVER_NAME'].'/',$piwigo,$picture['element_url']); //Enlever les commentaires suivants pour générer une image réelle (sauf ceux en anglais) /* function LoadJPG($imgname) {*/ $im = @imagecreatefromjpeg($picture['element_url']);/* Attempt to open */ if(!$im)/* See if it failed */ { $im = imagecreatetruecolor(600, 30);/* Create a blank image */ $bgc = imagecolorallocate($im, 255, 255, 255); $tc = imagecolorallocate($im, 0, 0, 0); imagefilledrectangle($im, 0, 0, 600, 30, $bgc); imagestring($im, 1, 5, 5, 'Error loading ' . $picture['element_url'], $tc);/* Output an error message */ } /* return $im; }*/ header('Content-Type: image/jpg'); //$img = LoadJPG($picture['element_url']); imagejpeg($im); imagedestroy($im); } } ?>
Et à titre d'exemple testez ce lien :
http://hors.serie.free.fr/img_hasard.php
ou mieux aller faire un "J'aime" sur la page Facebook :
https://www.facebook.com/galerieIcietLa … 3516562748
Merci d'avance pour vos retours de toutes natures
Dernière modification par websigns (2012-03-20 21:31:00)
Hors ligne
Désolé de pas avoir vu tes fils avant, mais il y a beaucoup plus simple: créer un WebService perso.
En plugin personel, insère ce code:
add_event_handler('ws_add_methods', 'add_get_random_image_method'); function add_get_random_image_method($arr) { $service = &$arr[0]; $service->addMethod( 'pwg.images.getRandom', 'ws_images_getRandom', array(), 'Get a random Image.' ); } function ws_images_getRandom() { $query = ' SELECT path FROM '.IMAGES_TABLE.' INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON id = ic.image_id '.get_sql_condition_FandF ( array ( 'forbidden_categories' => 'category_id', 'visible_categories' => 'category_id', 'visible_images' => 'id' ), 'WHERE' ).' ORDER BY '.DB_RANDOM_FUNCTION.'() LIMIT 1 ;'; list($file) = pwg_db_fetch_row(pwg_query($query)); switch (get_extension($file)) { case 'jpg': case 'jpeg': header('Content-type: image/jpeg'); break; case 'gif': header('Content-type: image/gif'); break; case 'png': header('Content-type: image/png'); break; default: header('Content-type: unknow'); break; } header('Last-Modified: '.date('r', filemtime($file))); readfile($file); exit(); }
Ensuite, pour afficher une image au hasard, il suffit de mettre une image avec comme src:
http://monsite/ws.php?method=pwg.images.getRandom
Et voilà le plugin en action sur le site de test de piwigo sur free:
http://piwigo.free.fr/ws.php?method=pwg … .getRandom
Hors ligne
Ah pas de problème.
Ca fait un moment que j'ai travaillé sur ce truc et je viens juste de mettre le message à l'occasion de la présentation de ma galerie.
Ca fera deux solutions pour qui veut.
La tienne n'était pas décrite ailleurs non ? Parceque je n'ai pas trouvé à l'époque, sur le forum en tout cas.
Hors ligne
websigns a écrit:
Ca fera deux solutions pour qui veut.
La tienne n'était pas décrite ailleurs non ? Parceque je n'ai pas trouvé à l'époque, sur le forum en tout cas.
Non, je ne l'ai pas décrite dans le forum, mais c'est la méthode que j'utilise dans [extension by P@t] GThumb+ pour générer des miniatures custom.
Je te conseillerai quand même de laisser tomber ta méthode et d'utiliser un ws perso, c'est quand même beaucoup plus propre, vu qu'il n'y a pas de fichiers à créer en plus... c'est un simple plugin.
Hors ligne
P@t a écrit:
Désolé de pas avoir vu tes fils avant, mais il y a beaucoup plus simple: créer un WebService perso.
En plugin personel, insère ce code: .
Salut, j'ai essayé ta méthode mais elle ne donne rien pour ma galerie :
http://very-zatchbell.com/galeriez/ws.p … .getRandom
J'ai également essayé celle de websigns sans succès.
Pourrais-tu détailler un peu plus la démarche à faire ? Merci. ^^