#1 2009-11-27 23:25:48

plg
Équipe Piwigo
Nantes, France, Europe
2002-04-05
12254

synchronisation distante sans navigateur web

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.

Code:

#!/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:

Code:

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.


Dernier billet du blog Piwigo.com (3 mai 2018) Nouveau formulaire d'abonnement

Hors ligne

#2 2010-04-27 20:14:30

Gotcha
Equipe Piwigo
Pierrelatte (26)
2007-03-14
13324

Re: synchronisation distante sans navigateur web

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 ?


Ayez comme premier réflexe de consulter le wiki.
Ensuite, veuillez effectuer une recherche sur le forum avant de poser votre question.

LE FAIRE EST LE REVELATEUR DE L'ETRE

Hors ligne

#3 2010-04-27 20:38:15

tosca
Former Piwigo Team
Cévennes (Gard)
2006-09-23
3818

Re: synchronisation distante sans navigateur web

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

#4 2010-04-27 21:01:54

Gotcha
Equipe Piwigo
Pierrelatte (26)
2007-03-14
13324

Re: synchronisation distante sans navigateur web

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 ^^


Ayez comme premier réflexe de consulter le wiki.
Ensuite, veuillez effectuer une recherche sur le forum avant de poser votre question.

LE FAIRE EST LE REVELATEUR DE L'ETRE

Hors ligne

#5 2013-07-03 11:43:58

Big Z
Membre
2013-05-29
6

Re: synchronisation distante sans navigateur web

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

#6 2013-07-03 11:59:36

Big Z
Membre
2013-05-29
6

Re: synchronisation distante sans navigateur web

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

#7 2013-07-12 11:59:51

Big Z
Membre
2013-05-29
6

Re: synchronisation distante sans navigateur web

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

#8 2013-07-12 14:31:05

flop25
Équipe Piwigo
2006-07-06
6382

Re: synchronisation distante sans navigateur web

oui ce sera en 2.6 ^^

Hors ligne

#9 2014-07-04 10:43:20

Huy
Membre
2014-07-04
2

Re: synchronisation distante sans navigateur web

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 :) :

Code:

#!/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

#10 2014-07-04 10:48:05

Huy
Membre
2014-07-04
2

Re: synchronisation distante sans navigateur web

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

Pied de page des forums

Propulsé par FluxBB