Bonjour à tous,
Plusieurs fois nous avons reçu des demandes pour pouvoir automatiser la synchronisation. La réponse habituelle était "ça doit pouvoir se faire en automatisant l'appel à une page web dans le navigateur". Suite à une demande un peu plus "documentée" de worwan sur le forum anglais : wget to automatically quick local sync, et fort de mon expérience technique avec l'API web de piwigo et pLoader, j'ai écrit un petit script en Perl (qui doit marcher sous Windows/Linux/Mac) pour lancer la synchro.
#!/usr/bin/perl # perl remote_sync.pl --base_url=http://localhost/piwigo/dev/branches/2.0 --username=plg --password=plg use strict; use warnings; use LWP::UserAgent; use Getopt::Long; my %opt = (); GetOptions( \%opt, qw/ base_url=s username=s password=s / ); our $ua = LWP::UserAgent->new; $ua->agent('Mozilla/remote_sync.pl'); $ua->cookie_jar({}); $ua->default_headers->authorization_basic( $opt{username}, $opt{password} ); my $form = { method => 'pwg.session.login', username => $opt{username}, password => $opt{password}, }; my $result = $ua->post( $opt{base_url}.'/ws.php?format=json', $form ); # perform the synchronization $form = { 'sync' => 'files', 'display_info' => 1, 'add_to_caddie' => 1, 'privacy_level' => 0, 'sync_meta' => 1, # remove this parameter, turning to 0 is not enough 'simulate' => 0, 'subcats-included' => 1, 'submit' => 1, }; $result = $ua->post( $opt{base_url}.'/admin.php?page=site_update&site=1', $form ); use Data::Dumper; print Dumper($result);
Copier ce code dans un fichier remote_sync.pl puis lancer:
perl remote_sync.pl --base_url=http://localhost/piwigo/dev/branches/2.0 --username=plg --password=plg
En plus de Perl, il faudra que le module LWP soit installé (dans le paquet Debian libwww-perl)
A priori, je pense l'intégrer dans piwigo_remote.pl.
Hors ligne
Bon... je remets le couvert sur ce sujet car je vais bientôt en avoir besoin.
Tout d'abord, une question :
Avec mon Batch_Optimisateur je vais uploader via FTP des dossiers entiers.
Est-il possible de lancer la synchronisation uniquement sur ces dossiers précis ?
Hors ligne
Gotcha a écrit:
Avec mon Batch_Optimisateur je vais uploader via FTP des dossiers entiers.
Est-il possible de lancer la synchronisation uniquement sur ces dossiers précis ?
Je ne suis pas sûre d'avoir compris ... par FTP, tu crées des catégories physiques et - sauf erreur de ma part - lors de la synchronisation, tu peux choisir quelles catégories synchroniser, non ?
Hors ligne
tosca a écrit:
Gotcha a écrit:
Avec mon Batch_Optimisateur je vais uploader via FTP des dossiers entiers.
Est-il possible de lancer la synchronisation uniquement sur ces dossiers précis ?Je ne suis pas sûre d'avoir compris ... par FTP, tu crées des catégories physiques et - sauf erreur de ma part - lors de la synchronisation, tu peux choisir quelles catégories synchroniser, non ?
Oui mais je veux le faire tout simplement en... deux clics.
Sous Lightroom un clic pour exporter et le deuxième pour choisir mon application. Mon application sait faire jusqu'au chargement par FTP. Après... mes connaissances sont nulles.
HS : J'ai prévu de faire une vidéo pour illustrer ma technique ^^
Hors ligne
Je suis désolé de déterrer un aussi vieux post mais j'aimerais utiliser ce script et je pense que pas mal de choses ont bougé depuis !
J'aimerais simplement lancer une synchro du répertoire galleries en évènement planifié mais le script perl me renvoie une erreur
"The requested URL was not found on this server"
J'ai fait plusieurs tests et j'ai bien le script php site_update appelé par le perl dans /piwigo/admin/
J'ai modifié l'url de base renseignée dans perl remote_sync.pl
Merci d'avance messieurs les Jedi de Piwigo !
Dernière modification par Big Z (2013-07-03 11:54:21)
Hors ligne
Trouvé !
Il faudra bien modifier
perl remote_sync.pl --base_url=http://localhost/piwigo/dev/branches/2.0 --username=plg --password=plg
Chez moi ça ne fonctionnait pas, message d'erreur de l'url passée en argument (404)
En modifiant en
perl remote_sync.pl --base_url=http://localhost/piwigo/ --username=bob --password=bob
Ca fontionne !
Hors ligne
Autre question,
Les albums créés lors de la synchro automatique n'héritent pas des droits des albums parents.
Est-il possible d'automatiser dans le script l'héritage des droits sur les albums ? (l'équivalent du bouton appliquer aux sous albums en fait).
Je viens de voir que ça sera une des nouvelles possibilités de piwigo 2.6, je peux attendre.
Dernière modification par Big Z (2013-07-12 12:09:34)
Hors ligne
oui ce sera en 2.6 ^^
Hors ligne
Bonjour,
Merci beaucoup PLG pour ton script. J'ai pu l'utiliser en l'adaptant à mon cas, et cela fonctionne très bien.
Si comme moi vous disposer d'une énorme bibliothèque de photo, peut-être que vous rencontrerez les même problèmes que moi. Je dispose de piwigo sur un serveur, et ma bibliothèque sur un autre (plus de 2To de photo). J'y accède grâce à un montage CIFS et comme vous vous en doutez la synchro est longue, trop longue. J'ai donc eu un problème avec le max_execution_time (par defaut 30 sec dans le php.ini) que j'ai bien tenté d'augmenté, voir même de ne pas limiter, mais rien à faire, le temps de synchro trop long provoque un timeout.
J'ai donc modifier un chouia le script qui me permet désormais de synchroniser dossier par dossier et donc de ne pas tout faire d'un coup, tout en faisant quand même les dossiers les uns après les autres.
Je n'active pas l'option de synchroniser les sous-dossiers dans le sens ou ils seront fait quoiqu'il arrive ensuite.
Voila pour ceux que ça intéresse, n'ayant jamais appris ni codé en perl ce que j'ai ajouté n'est surement pas parfait, mais marche chez moi :) :
#!/usr/bin/perl # perl remote_sync.pl --base_url=http://localhost/piwigo/ --username=exemple --password=exemple use strict; use warnings; use LWP::UserAgent; use Getopt::Long; use Data::Dumper; use HTML::Form; my %opt = (); GetOptions( \%opt, qw/ base_url=s username=s password=s / ); our $ua = LWP::UserAgent->new; $ua->agent('Mozilla/remote_sync.pl'); $ua->cookie_jar({}); $ua->default_headers->authorization_basic( $opt{username}, $opt{password} ); my $form = { method => 'pwg.session.login', username => $opt{username}, password => $opt{password}, }; my $result = $ua->post( $opt{base_url}.'/ws.php?format=json', $form ); my $response = $ua->request( HTTP::Request->new(GET => $opt{base_url}.'/admin.php?page=site_update&site=1') ); $form = HTML::Form->parse($response); my @catValues = $form->find_input('cat')->possible_values(); my $v = 0; foreach $v (@catValues){ # perform the synchronization $form = { 'sync' => 'files', 'display_info' => 1, 'add_to_caddie' => 1, 'privacy_level' => 0, 'sync_meta' => 1, # remove this parameter, turning to 0 is not enough 'simulate' => 0, 'cat' => $v, 'subcats-included' => 0, 'submit' => 1, }; $result = $ua->post( $opt{base_url}.'/admin.php?page=site_update&site=1', $form ); print Dumper($result); }
Dernière modification par Huy (2014-07-04 10:56:46)
Hors ligne
Au passage, la synchro aura pris chez moi plus de 3h. Et je test maintenant de resynchroniser pour voir le temps que le script met pour reparcourir ma bibliothèque (en sachant qu'il n'aura qu'à modifier les changements : suppressions, ajouts, modifs).
Faire cela, permet surtout de faire une estimation du temps que vous pouvez mettre dans le crontab pour ce script dans le but de ne pas le lancer si jamais il est encore en exécution.
Dernière modification par Huy (2014-07-04 10:58:13)
Hors ligne