diff --git a/gestion_des_portfolios/README b/gestion_des_portfolios/README index 76d8e7f76d21a9af3f96970c83d9ab420bf8b73a..0e61483de4bd99f0e9567945ac295bce8724b985 100644 --- a/gestion_des_portfolios/README +++ b/gestion_des_portfolios/README @@ -2,18 +2,35 @@ Gestion des porfolios API Bibs depot git : https://gitlab.univ-lille.fr/rachid.aliouat/apialma/-/tree/master/gestion_des_portfolios + +-------- +CLE API +-------- +Pour tous les programmes , les cles API doivent être mises dans un fichier dédié : cle.key +Dupliquer le fichier cle.exempe pour en faire le fichier cle.key +Ce fichier est un simple fichier texte séparateur tabulation cle/valeur +Ne renseigner que la valeur. Ne pas renmmer le libellé de la clé +exemple : +api_user_bibs extract_bib_item_test +api_cle_bibs l8xx6####################625 + +-------- +-------- -------------- -1er programme +1er programme : active-portfolios.pl -------------- programme perl pour récupérer les portfolios(GET), et éventuellement pour activer des portfolios (API PUT) si l'URL contient le motif voulu Le programme a besoin de son fichier de configuration à passer en parametre (voir config-activer.exemple) -api_user_bibs extract_bib_item_test -api_cle_bibs l8xx6e14707########7625 -motif_url https://pepite-depot -proxy DEFAULT +motif_url https://pepite-depot +proxy +rapport yes +email_subject Rapport portfolio +email_destinataire prenom.nom@univ-machin.fr +smtp smtp.univ-machin.fr +from noreply@univ-machin.fr On passe au programme la liste des MMS ID des notices sur lesquelles il doit travailler @@ -69,20 +86,22 @@ Activation MMS_ID=991007858583205601 --> Porfolio_id=53267587030005601 -------------- -2eme programme +2eme programme creer-portfolios.pl -------------- Programme perl pour creer des portfolios +Les clé api doivent être dans cle.key (voir plus haut) Le programme a besoin de son fichier de configuration à passer en parametre (voir config-creer.exemple) -api_user_bibs extract_bib_item_test -api_cle_bibs l8xx6e14707########7625 +zone_uri 856 +zone_uri_url u +zone_uri_note z Le programme a besoin d'un fichier modele de portfolio : modele-portfolio.xml On passe au programme la liste des MMS ID des notices sur lesquelles il doit travailler - perl creer-portfolios.pl liste-mms.csv +perl creer-portfolios.pl config-creer.conf liste-mms.csv Exemple de fichier liste-mms.csv @@ -94,6 +113,6 @@ MMS_ID Algorithme : Pour chaque mms_id, le programme récupére la notice. -Pour chaque 856$u, il va récuperer l'url +Pour chaque zone_url sous champ zone_uri_url (exemple 856$u), il va récuperer l'url, et la note public dans zone_uri sous champ zone_uri_note (exemple 856$z) Le programme recupere tous les portfolio existants. Il compare avec sa liste d'URL pour ne pas créer de doublon. Le programme créé les portfolios pour les url qui n'existent pas encore en tant que portfolio. diff --git a/gestion_des_portfolios/active-portfolios.pl b/gestion_des_portfolios/active-portfolios.pl index 5f44841c8a1b5505e2d455325def4a73b23991c9..0afa0726fb9694b6c00f3cd0255e153ff31ed210 100644 --- a/gestion_des_portfolios/active-portfolios.pl +++ b/gestion_des_portfolios/active-portfolios.pl @@ -9,6 +9,7 @@ # 31-03-2023 : ajout activation du proxy si la variable proxy est alimentée dans la conf # 18-07-2023 : modif du code : tri sur la clé portofolio_id lors du traitement pour avoir un fichier journal plus linéaire # 29/11/2024 : passage du fichier de conf en parametre +# 29/05/2025 : fichier cle.key dedié aux clés api. les clés api ne sont plus mise dans les fichier de conf. plus pratique pour la gestion GIT. ########### # passage de parametre -> active_portfolios.pl fichier-conf.conf liste.csv ############################## @@ -22,7 +23,8 @@ use MIME::Lite; my $nom_fic_csv=""; my %hash_conf=(); -my $nom_fic_conf=""; +my $nom_fic_conf=""; +my $nom_fic_cle="cle.key"; # les clés API impérativement dans ce fichier my @tab_inter = (); my $i=0; my $mms_id=""; @@ -36,16 +38,32 @@ my $balise_proxy_enable="<proxy_enabled desc=\"Yes\">true</proxy_enabled>"; my $balise_proxy=""; - -if (!(exists $ARGV[0])) {print "Manque le fichier de conf en parametre.\n";exit(0)}; +## test si fichier des mms id est en paramétre +if (!(exists $ARGV[0])) {print "Manque des fichiers en parametre : perl active-portfolios.pl config.conf liste-mms.csv\n";exit(0)}; $nom_fic_conf=$ARGV[0]; -if (!(exists $ARGV[1])) {print "Manque le fichier des MMS_ID en parametre.\n";exit(0)}; +if (!(exists $ARGV[1])) {print "Manque des fichiers en parametre : perl active-portfolios.pl config.conf liste-mms.csv\n";exit(0)}; $nom_fic_csv=$ARGV[1]; +##### LIRE LE FICHIER DE CLE + +open (CONF, $nom_fic_cle) or die "Ouverture fichier de cle api $nom_fic_cle impossible , cause : $! \n"; +print "lecture des cle api:\n"; +print "-" x 20, "\n"; +@tab_inter = <CONF>; +close(CONF); +$i=0; +for ($i=0;$i<=$#tab_inter;$i++) { + #print $tab_inter[$i]; + my @ligne=split('\t',$tab_inter[$i]); # decoupage ligne + $hash_conf{$ligne[0]}=epure($ligne[1]); # alimentation de la table de hash avec les cles + + +} + ##### LIRE LE FICHIER DE CONF -open (CONF, $nom_fic_conf) or die "Ouverture fichier de configuration $nom_fic_conf impossible , cause : $! \n"; -print "lecture de la configuration:\n"; +open (CONF, $nom_fic_conf) or die "Ouverture fichier de conf $nom_fic_conf impossible , cause : $! \n"; +print "lecture des conf :\n"; print "-" x 20, "\n"; @tab_inter = <CONF>; close(CONF); @@ -53,7 +71,7 @@ $i=0; for ($i=0;$i<=$#tab_inter;$i++) { #print $tab_inter[$i]; my @ligne=split('\t',$tab_inter[$i]); # decoupage ligne - $hash_conf{$ligne[0]}=epure($ligne[1]); # alimentation de la table de hash avec la conf + $hash_conf{$ligne[0]}=epure($ligne[1]); # alimentation de la table de hash avec les cles } @@ -73,6 +91,16 @@ print "lecture des MMS_ID:\n"; print "-" x 20, "\n"; @tab_inter = <CSV>; close(CSV); +for ($i=1;$i<=$#tab_inter;$i++) { #supprimer les lignes vides ou sans mms_id + print "$tab_inter[$i] =>\n"; + if ($tab_inter[$i]=~ /^\d.*/) { # si cela ne commence par par un chiffre + print "OK pour [".$tab_inter[$i]."]\n"; + } else { + print "delete [".$tab_inter[$i]."]\n"; + delete $tab_inter[$i]; + + } +} ######## Ouvrir le rapport d'errreur des lignes non traité : par exemple PPN inconnu open (ERR, ">journal-activer-portfolios-$date_jour_rapport.txt") or die "Ouverture fichier de journal impossible , cause : $! \n"; print ERR "Motif\tCommentaire\n"; # on récupére l'entête , on ajoute une colone avant pour renseigner ensuite le motif du rejet @@ -84,18 +112,17 @@ close (ERR); ######### Recuperer tous les portfolios $i=1; # on passe la ligne d'entete => on commence à 1 for ($i;$i<=$#tab_inter;$i++) { + ## passer les lignes vides print "############ Traitement de la ligne : ################\n$tab_inter[$i]#########################\n"; my @ligne=split('\t',$tab_inter[$i]); # decoupage ligne dès que le CSV comporte plusieurs colonne #$mms_id=epure($tab_inter[$i]); $mms_id=epure($ligne[0]); print "############ Traitement du MMS_ID : ################\n$mms_id\n#########################\n"; - ## passer les ligne vide $twig_portfolios=XML::Twig->new( # on créer un objet TWIG dans lequel on met toute la structure XML - - pretty_print => 'indented', - ); + pretty_print => 'indented', + ); $block_xml=get_portfolios_from_mms_id($mms_id); # Appel de l'API sur le mms_id pour récuperer toutes les portfolios - #print $block_xml,"\n"; + print $block_xml,"\n"; if ($block_xml !~ /total_record_count="0"/) { # s'il y a un portfolos $twig_portfolios->parse($block_xml); # ici tout est dans la structure twig my $root= $twig_portfolios->root->first_child('portfolios'); @@ -105,14 +132,11 @@ for ($i;$i<=$#tab_inter;$i++) { my $portfolio_id=$un_portfolio_id->first_child('id')->text ; #portfolio_id print $portfolio_id,"\n"; $hash_portfolios{$portfolio_id}=$mms_id; - - } + } } else { # log erreur print "Aucun portfolios pour $mms_id\n"; ecrire_log("Aucun portfolio",$mms_id); - } - } ########### Activer tous les portfolios pour lesquels l'url contient le motif (motif_url) diff --git a/gestion_des_portfolios/cle.exemple b/gestion_des_portfolios/cle.exemple new file mode 100755 index 0000000000000000000000000000000000000000..2547c4d0d33bf1b2e0b334bf32574b9163cdcd91 --- /dev/null +++ b/gestion_des_portfolios/cle.exemple @@ -0,0 +1,2 @@ +api_user_bibs extract_bib_item_test +api_cle_bibs l8xx6####################625 diff --git a/gestion_des_portfolios/config-creer.exemple b/gestion_des_portfolios/config-creer.exemple index 6e95bf251e995c4722a588087a1fb78e99c24c29..2a61945dd15727a12b82f1a7065960b72737844f 100755 --- a/gestion_des_portfolios/config-creer.exemple +++ b/gestion_des_portfolios/config-creer.exemple @@ -1,2 +1,3 @@ -api_user_create_hold_item create_hold_item_test -api_cle_create_hold_item l8xx0f3#############7ed8945d81 +zone_uri 856 +zone_uri_url u +zone_uri_note z diff --git a/gestion_des_portfolios/creer_portfolios.pl b/gestion_des_portfolios/creer_portfolios.pl index 09fcceaa72a82087b278e79da5a5b01f3628da51..b81b41998eac794318708554faf40b4204600662 100644 --- a/gestion_des_portfolios/creer_portfolios.pl +++ b/gestion_des_portfolios/creer_portfolios.pl @@ -12,6 +12,7 @@ # 28/09/2023 : creer les portfolio dans l'ordre d'apparition des 856 # 04/12/2023 : ajouter dans les logs une information de creation du portfolio # 29/11/2024 : passage du fichier de conf en parametre +# 29/05/2025 : fichier cle.key dedié aux clés api. les clés api ne sont plus mise dans les fichier de conf. plus pratique pour la gestion GIT. ########### # passage de parametre -> creer_portfolio.pl fichier-conf.conf liste.csv ############################## @@ -26,6 +27,7 @@ use Encode; my $nom_fic_csv=""; my %hash_conf=(); my $nom_fic_conf=""; +my $nom_fic_cle="cle.key"; # les clés API impérativement dans ce fichier my @tab_inter = (); my $i=0; my $mms_id=""; @@ -37,11 +39,27 @@ my %tab_mms_id_url_ordonnee=(); # table de hash des mmd_id et url avec l'ordre d my $ordre_apparition_856=0; my $nbr_portfolios=0; -if (!(exists $ARGV[0])) {print "Manque le fichier de conf en parametre.\n";exit(0)}; +if (!(exists $ARGV[0])) {print "Manque des fichiers en parametre : perl creer_portfolio.pl fichier-conf.conf liste.csv.\n";exit(0)}; $nom_fic_conf=$ARGV[0]; -if (!(exists $ARGV[1])) {print "Manque le fichier des MMS_ID en parametre.\n";exit(0)}; +if (!(exists $ARGV[1])) {print "Manque des fichiers en parametre : perl creer_portfolio.pl fichier-conf.conf liste.csv.\n";exit(0)}; $nom_fic_csv=$ARGV[1]; +##### LIRE LE FICHIER DE CLE + +open (CONF, $nom_fic_cle) or die "Ouverture fichier de cle api $nom_fic_cle impossible , cause : $! \n"; +print "lecture des cle api:\n"; +print "-" x 20, "\n"; +@tab_inter = <CONF>; +close(CONF); +$i=0; +for ($i=0;$i<=$#tab_inter;$i++) { + #print $tab_inter[$i]; + my @ligne=split('\t',$tab_inter[$i]); # decoupage ligne + $hash_conf{$ligne[0]}=epure($ligne[1]); # alimentation de la table de hash avec les cles + + +} + ##### LIRE LE FICHIER DE CONF open (CONF, $nom_fic_conf) or die "Ouverture fichier de configuration $nom_fic_conf impossible , cause : $! \n";