Importer dans WikiCommons des centaines de photos à partir d'un csv

 

Bellevue - La Terrasse

 

Depuis 2017, les archives des Hauts-de-Seine mettent en ligne le fonds de cartes postales anciennes (CPA). En octobre 2020, cela représente 9558 CPA provenant de la sous-série 9Fi réunissant les CPA de 1900 à 1944. Ces photos tombées dans le domaine public accompagnées de quelques métadonnées sont publiées sur le site d'Open Data des Hauts-de-Seine. Cela peut surprendre mais il y a quelques fonds de cartes postales et fonds photographiques sur les sites d'open data. C'est en fait une très bonne idée car ces sites sont adaptés à une réutilisation massive des données, contrairement aux sites des archives qui ne sont pas faits pour récupérer des centaines ou milliers de documents d'un seul coup.

Suite à cette découverte, j'ai importé un peu plus de 200 photos de la revue municipale de Marseille des années 1930, une collection de cartes postales de la ville de Brocas dans les Landes, avant de m'attaquer à ce gros fonds.

Dans ce billet de blog, je souhaite vous montrer ma méthode qui est adaptée aux personnes, comme moi, qui ne savent pas se servir de l'API, coder en Python, etc. Je commence par récupérer les données en format CSV ou EXCEL afin de les visualiser dans un tableur. 

1. Télécharger les images

La première étape consiste à récupérer les images. Pour cela j'utilise l'extension Simple mass downloader qui existe en version Firefox et Chrome. Il suffit de copier les urls du csv dans l'extension :

  1. copier les liens
  2. lancer le logiciel
  3. onglet Download list 
  4. menu Hamburger Import URLs from clipboard 
  5. Lancer la sauvegarde en cliquant sur start selected

Dans le cas des archives des Hauts-de-Seine, j'atteins assez vite le quota quotidien de requêtes qui permet de télécharger environ 3000 fichiers. Tous les fichiers téléchargés iront dans le dossier Téléchargements si vous utilisez Windows.

Les fichiers n'ont pas d'extension, j'utilise le logiciel Advanced Renamer pour rajouter l'extension jpg (<Name>.jpg).

Enfin dans le tableur, il faut indiquer l'emplacement des fichiers en remplaçant https://opendata.hauts-de-seine.fr/api/v2/catalog/datasets/cartes-postales/files/ par le répertoire où sont stockés vos fichiers.

2. Mettre en forme les données

Un travail de mise en forme des données est nécessaire. 

2.1 Coordonnées géographiques

Pour les coordonnées, je crée une colonne avec la formule de LibreOffice Calc : CONCATENER("{{Object location|";B2;"}}"). Puis je fais un collage spécial du texte dans une autre colonne (Pattypan ne semblant pas comprendre les cellules avec des formules) et enfin je remplace la virgule par un pipe ( | ).

2.2 Identifiants

Il peut également être nécessaire dans certains cas de retravailler les identifiants qui sont de la forme 9FI/ANT_1, 9FI/ANT_15, 9FI/ANT_153, ce qui ne peut pas se trier correctement. Dans une autre colonne je copie le contenu, puis supprime tout sauf les chiffres à l'aide d'une expression régulière dans Rechercher/Remplacer : (.......)_ par rien. Puis dans Notepad++, j'ajoute les zéros manquants : \n(..)\r par \n0$1\r puis \n(.)\r par \n00$1\r

2.3 Noms des fichiers

Wikimedia Commons ne souhaite pas de titres incompréhensibles du type 2e8e8c525c2ae4c9f983c64e725ef047.jpg ou 9FI/ANT_15.jpg. Il faut donc créer un titre si possible simple mais explicite et précis. Avec la commande CONCATENER je créé les nouveaux titres ainsi : 
Carte postale - VILLE - TITRE - IDENTIFIANT.jpg.
L'ajout de l'identifiant permet d'éviter d'avoir des titres identiques, ce qui n'est pas possible sur Wikimedia Commons.
 
Attention le titre ne doit pas contenir de crochets et ne doit pas être trop long. Dans le cas contraire, le logiciel d'import des données arrêtera le téléchargement. La commande NBCAR permet de compter le nombre de caractères d'une cellule et ainsi rapidement détecter les titres très longs. La documentation de MediaWiki n'indique pas le nombre de caractères limite mais parle d'une limite de 255 bytes. Des tests sont nécessaires pour savoir à quoi cela correspond en caractères, mais de toute façon il est préférable d'utiliser des noms de fichier pas trop longs dans MediaWiki.

3. Importer les données

Pour cette phase j'utilise Pattypan. La première étape du logiciel consiste à Générer un tableau. Importez les photos, sélectionnez le modèle MediaWiki que vous souhaitez utiliser (dans mon cas il s'agit de Template:Photograph) puis indiquez les champs à remplir par défaut :

  • Photographer : {{unknown|author}}
  • Title : {{fr|Carte postale des Hauts-de-Seine}}
  • Institution : {{institution:Archives départementales des Hauts-de-Seine}}
  • Source : https://data.opendatasoft.com/explore/dataset/fr-219200730-cartes-postales-anciennes%40hauts-de-seine/information/
  • Licence : {{licence ouverte}}

Et je coche les champs Description, Date, Accession number et Partnership pour que Pattypan remplisse ces champs à l'aide des données dans le tableur. Vous obtenez un tableau de ce type avec des colonnes pré-remplies et d'autres à remplir à l'aide des données provenant des archives départementales :


Partnership va servir à indiquer la géolocalisation. Pour cela, il faut aller dans le 2e onglet Template du tableau créé par Pattypan afin de déplacer ce modèle. Cet onglet peut sembler vide mais en agrandissant la taille des cellules on voit le code des modèles de Wikimedia Commons. Le fonctionnement de cet onglet n'étant pas documenté, je ne sais pas exactement comment il fonctionne et pourquoi le contenu est dupliqué dans de nombreuses cellules. Faites donc le changement dans toutes les cellules.

'=={{int:filedesc}}==
{{Photograph
 |photographer = ${photographer}
 |title = ${title}
 |description = ${description}
 |depicted people =
 |depicted place =
 |date = ${date}
 |medium =
 |dimensions =
 |institution = ${institution}
 |department =
 |references =
 |object history =
 |exhibition history =
 |credit line =
 |inscriptions =
 |notes =
 |accession number = ${accession_number}
 |source = ${source}
 |permission =
 |other_versions =
}}
${partnership}
=={{int:license-header}}==
${license}

<#if categories ? has_content>
<#list categories ? split(";") as category>
[[Category:${category?trim}]]
</#list>
<#else>{{subst:unc}}
</#if>

Une fois le travail de mise en forme des données terminé, vous pouvez passer à la 2e étape de Pattypan qui s'intitule Valider et envoyer.

À l'heure actuelle, le logiciel s'arrête de téléverser les photos sans afficher le moindre message d'erreur s'il rencontre un problème. Par contre, il se contente de zapper l'import dans deux cas : s'il détecte que le fichier a déjà été importé et si le nom est déjà utilisé.

Je télécharge les photos dans la catégorie Collections of Archives départementales des Hauts-de-Seine de Wikimedia Commons, ainsi que dans une des catégories de Postcards of Hauts-de-Seine (Postcards in Meudon, Suresnes, etc.) Il est sans doute possible d'ajouter des catégories en utilisant les thèmes associés provenant des archives.

Les cartes postales géolocalisées peuvent être visualisées dans Wikimedia maps.


4. Dernières retouches

Quatre outils peuvent servir pour affiner la catégorisation et les données :

4.1 Fichiers manquants

À la fin de l'import, il y avait sur Wikimedia Commons un millier de cartes postales en moins que sur le site des Hauts-de-Seine. Des fichiers ont dû se perdre lors du téléchargement des milliers de photos. Pour identifier rapidement les fichiers manquants, j'ai utilisé un outil de comparaison de listes en lui demandant de comparer les noms de fichiers.

4.2 Remplacer et déplacer un modèle

Visual File Change va notamment me permettre de corriger une erreur faite lors des premiers imports en utilisant le modèle de coordonnées géographiques adéquat et en le déplaçant. L'expression régulière consister à rechercher :

/=={{int:license-header}}==\n\{\{licence ouverte\}\}\{\{location\|([^\|]+)\|([^\|]+)\}\}/ 

Et remplacer par :

{{Object location|$1|$2}}

=={{int:license-header}}==
{{licence ouverte}}

4.3 Affiner la catégorisation

Visual File Change peut également servir à catégoriser les CPA à partir de termes inclus dans le nom du fichier. Il est possible de faire des recherches du type :

intitle:"train" incategory:"Collections of Archives départementales des Hauts-de-Seine"

Puis d'ajouter la catégorie souhaitée :

Commentaires