Rechercher des images dans le CDN de Geotribu#
Parcourir le CDN via l'interface web#
L'accès en lecture à notre entrepôt d'images accumulées depuis toutes ces années est ouvert et c'est même un passage recommandé pour tout contributeur/rice :
- adresse : https://cdn.geotribu.fr
- identifiant :
invité
- mot de passe :
geotribu_bemyguest2020
En plus de permettre un petit voyage dans le temps, autant que toutes ces ressources servent en plus de notre site . Merci de ne pas en abuser en respectant le fair-use. Pensez également à créditer les auteur/es.
Chercher une image#
Filtrer le dossier courant#
La barre de recherche en haut permet de filtrer sur le nom du fichier parmi ceux du répertoire courant. A noter qu'il faut attendre que l'ensemble des fichiers du répertoire soient listés pour que ce la fonctionne.
Recherche avancée#
Il est également possible d'effectuer une recherche dans l'arborescence en cliquant sur le menu descendant à droite de la barre de filtre et de sélectionner "Recherche avancée" :
Faire une recherche en requêtant l'index lunr#
Si l'interface graphique vous semble trop longue ou la recherche assez fine ou que vous n'avez pas les identifiants sous la main, il est possible d'interroger l'index des images stockées généré avec lunr.py toutes les heures et qui est accessible librement.
Pré-requis :
- Python >= 3.9
- une connexion autorisée vers https://cdn.geotribu.fr
Créer un environnement virtuel#
Sauf si vous voulez installer lunr.py au niveau de votre interpréteur système, mieux vaut faire la tambouille dans un environnement isolé :
-
Créer un dossier pour le script et s'y déplacer :
1
mkdir -p ~/Geotribu/ && cd ~/Geotribu
-
Créer l'environnement virtuel :
1
python3 -m venv .venv
-
Activer l'environnement virtuel :
1
source .venv/bin/activate
Installer ou mettre à jour les dépendances#
Une fois l'environnement virtuel activé, on met à jour pip et les paquets de base :
1 2 |
|
Puis on installe les dépendances :
1 |
|
Let's script again#
Avec notre script, on va :
- télécharger localement le fichier d'index depuis le CDN
- le charger et regarder un peu à quoi il ressemble
- faire une recherche
- enrichir les résultats
Télécharger l'index du CDN#
On cherche donc à télécharger le fichier https://cdn.geotribu.fr/img/search-index.json
dans un sous-dossier .geotribu/search/
qu'on crée si besoin dans le dossier personnel de l'utilisateur courant : /home/nom_utilisateur/
sur Linux ou C:\Users\nom_utilisateur\
sur Windows, généralement accessible avec l'alias ~
.
Pour télécharger le fichier de l'index, étant donné qu'on n'a pas de cas particulier (VPN, authentification...) on utilise la bibliothèque standard de Python :
Téléchargement du fichier JSON distant avec urllib | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Normalement, à ce stade, on a donc un fichier dans notre dossier personnel :
Charger et ausculter le fichier#
S'agissant d'un fichier JSON, on ajoute l'import du package en haut de notre script :
1 2 3 4 5 |
|
Puis on charge le fichier à la suite de notre script :
1 2 |
|
Comme toujours avec des données distantes, on prend le temps de regarder un peu la structure :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
On voit donc qu'on a :
- un dictionnaire en contenant 2 autres dont les clés sont :
images
etindex
- le dictionnaire
images
contient 3 934 entrées, chacune correspondant à une image du CDN dont la clé est le chemin et la valeur est une liste contenant 2 entiers. En se référant au script qui génère l'index, on comprend qu'il s'agit de la largeur et la longueur en pixels de l'image. - le dictionnaire
index
correspond à la structure d'index de lunr
Faire une recherche#
Pour la recherche, on utilise lunr.py.
On commence par importer le module depuis le package en haut de fichier. On en profite pour ajouter aussi pprint
qui nous permettra d'y voir plus clair dans les résultats :
1 2 3 4 5 6 7 8 9 |
|
On charge l'index :
1 |
|
Et on peut alors faire une recherche :
1 2 3 4 5 6 7 8 |
|
Recherche avancée#
Il est aussi possible de passer des paramètres de recherche plus avancés. Par exemple :
- rechercher la correspondance seulement dans le nom du fichier :
1 2 3 4 |
|
- quand il y a 2 termes, c'est la clause
OR
qui s'applique. Exemple, les images qui correspondent àopenstreetmap
oulogo
:
1 |
|
- rechercher les images qui correspondent à
openstreetmap
etlogo
:
1 2 3 4 |
|
- rechercher les images qui contiennent
logo
dans le chemin etqgis
dans le nom du fichier
1 2 3 4 5 6 7 |
|
Enrichir la recherche#
C'est déjà pas mal mais on aimerait croiser avec les métadonnées qui sont dans le dictionnaire images
d'à-côté. En regardant de plus près la structure de nos résultats de recherche, on voit qu'il s'agit là d'un dictionnaire contenant 3 clés/valeurs :
match_data
donne les termes de correspondance entre la requête et les résultatsref
contient le chemin du fichier relatif à l'URL de base du CDNscore
donne le score de correspondance
Il y a donc matière à faire une jointure entre les deux dictionnaires sur le chemin du fichier : ref
d'un côté, clé de l'autre.
On itère donc sur les résultats et on étend chaque résultat avec les métadonnées :
Croisement résultat de recherche et métadonnées | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
Aller plus loin#
Il s'agit ici d'un exemple rapide de script rapide.
Si vous utilisez régulièrement la recherche dans l'index, je vous recommande d'utiliser notre script search_playground.py
qui intègre :
- la gestion des erreurs HTTP
- le téléchargement du fichier d'index seulement selon un temps de rotation (24h par défaut)
-
étape où un contributeur propose d'intégrer ses modifications dans le socle principal du projet. Voir la documentation de GitHub. ↩