L'API Python d'ArcGIS
vous permet d'automatiser votre SIG web, que ce soit pour vos analyses
spatiales, vos processus d'administration des utilisateurs ou la encore
gestion du contenu de votre portail.
Parmi toutes les capacités l'API, ma préférée est certainement la
possibilité d'accéder à différentes applications du portail
via le module arcgis.apps, comme par exemple
Hub,
StoryMaps,
Survey123, etc. Cela vous permet par exemple, une fois une analyse exécutée, de mettre
à jour automatiquement le contenu d'une application avec les résultats de
cette analyse ; ou encore de créer rapidement un grand nombre d'applications
aux mises en pages uniformes.
Lors de la
mise à jour en version 2.2.0 en octobre dernier, j'ai donc appris avec grand plaisir qu'une nouvelle application du portail
était désormais prise en charge par l'API : Experience Builder, avec
l'introduction du
sous-module expbuilder.
Dans cet article, je vous propose de voir ensemble un peu plus en détails ce
que nous permet de faire l'API Python d'ArcGIS avec Experience Builder. Notez
que, même si pour l'instant les capacités restent limitées, il s'agit d'une
première implémentation qui sera enrichie au fur et à mesure des mises à jour
de l'API, dont je vous tiendrai au courant sur ce blog. Vous pouvez accéder au
code présenté dans cet article
ici sur Github, ou alors directement via
ce Notebook partagé dans ArcGIS Online.
Prérequis
Avant de commencer, assurez-vous que la version de l'API Python d'ArcGIS que
vous utilisez est au minimum la 2.2.0. Vous pouvez vérifier cela très
facilement en interrogeant la version de l'API directement dans votre script
:
import arcgis
arcgis.__version__
Si ça n'est pas le cas, vous pouvez retrouver la dernière version de l'API (Ã
l'heure où j'écris cet article) ici :
Vous devrez ensuite vous connecter à votre portail SIG :
from arcgis.gis import GIS
#utiliser une des deux méthodes ci-dessous :
gis = GIS("https://url/portal/home", "username")#remplacer par l'url de votre portail et votre nom d'utilisateur
#gis = GIS("home")#utilisez cette ligne si votre environnement est connecté à votre portail
Nous allons maintenant pouvoir explorer le module expbuilder. Celui-ci est
composé de deux classes, Templates et WebExperience, que je vous propose de
regarder ensemble. Je vous conseille de travailler dans un environnement
Notebook pour profiter de l'interactivité (depuis n'importe quel Jupyter
Notebook, ou alors directement dans la suite ArcGIS via les Notebooks d'ArcGIS
Pro ou d'ArcGIS Online).
Classe Templates
La classe Templates permet de prévisualiser les modèles d'expérience
disponibles, afin de pouvoir vérifier que les mises en page vous conviennent
avant de créer une expérience.
Vous devrez commencer par importer la classe :
from arcgis.apps.expbuilder import Templates
Pour l'instant, tous les modèles ne sont pas encore accessibles via l'API. La
ligne suivante vous permet d'obtenir facilement la liste des modèles que vous
pouvez appeler :
dir(Templates)
De nouveaux modèles devraient être accessibles via les futures mises à jour de
l'API, mais voici ceux que vous pouvez utiliser à l'heure actuelle :
'BILLBOARD', 'BLANKFULLSCREEN', 'BLANKSCROLLING', 'DART', 'DASH', 'EPIC',
'EXHIBITION', 'FOLDABLE', 'GALLERY', 'GENERAL', 'INDICATOR', 'INTRODUCTION',
'JEWELERYBOX', 'JOURNEY', 'LAUNCHPAD', 'MONITOR', 'PARALLAX', 'POCKET',
'QUICKNAVIGATION', 'REVEAL', 'RIBBON', 'SCENIC', 'SNAPSHOT', 'SUMMARY',
'TIMELINE'.
En choisissant un modèle dans cette liste, vous pouvez le prévisualiser avec
le code suivant :
launchpad = Templates.LAUNCHPAD
launchpad.preview()
WebExperience est la deuxième classe disponible avec ce module. C'est elle qui
va nous permettre de créer, supprimer, publier, cloner des expériences.
Commençons par l'importer :
from arcgis.apps.expbuilder import WebExperience
Voici comment la classe est référencée dans la documentation :
Il est très facile d'instancier cette classe :
- Pour travailler avec une expérience déjà existante sur votre portail, il suffit de renseigner l'argument item avec la chaîne de caractères de l'item ou de l'item ID de l'expérience de votre portail avec laquelle vous souhaitez travailler ;
-
Pour travailler avec une expérience locale créée à partir d'Experience
Builder en version desktop, il faut renseigner l'argument path avec
le chemin vers le le fichier config.json ;
-
Pour créer une nouvelle expérience, il faudra simplement instancier la
classe sans renseigner les arguments item ou path, mais
uniquement en renseignant un modèle et un nom.
Créer et manipuler une nouvelle expérience
Voyons cela ensemble, et commençons par créer une nouvelle expérience. Nous
allons donc renseigner les arguments template et name :
new_exp = WebExperience(template = "billboard", name = "Experience - API Python")
Notez que cette fois-ci, il faut donner le nom du modèle en minuscule. Par
défaut, l'expérience sera créée dans le portail SIG auquel nous nous sommes
connectés au début, qui est notre environnement actif. Cependant, vous pouvez
utiliser un troisième paramètre, gis, pour enregistrer l'expérience
dans un autre portail.
Nous pouvons également appeler la propriété item comme ci-dessous, pour
que le Notebook nous donne un lien direct vers l'item créé dans notre portail
:
La propriété itemid permet quant à elle de récupérer la chaîne de
caractères donnant l'identifiant de l'élément créé dans le portail :
new_exp.itemid
Comme tout à l'heure avec la classe Template, nous pouvons tirer parti de la
fonction preview() pour visualiser l'expérience dans l'interface interactive
du Notebook. Sachez que vous pouvez utiliser les arguments width et
height pour modifier la taille d'affichage de la prévisualisation (par
défaut, width = 800 et height = 500).
Pour l'instant, cette expérience possède le statut de brouillon, elle n'est
pas encore publiée. La méthode save() va nous permettre de sauvegarder
l'expérience, et, si nous le souhaitons, de la publier. Il suffit pour cela de
fixer la valeur du paramètre publish sur True :
new_exp.save(publish=True)
Vous pouvez également accéder à des paramètres supplémentaire, comme
access permettant de définir le niveau de partage de votre expérience
("private", "org" ou "public"), ou encore tags qui vous permet d'y
ajouter des balises.
new_exp.save(publish=True, access='org', tags='test, API Python')
Une fois publiée, vous pouvez visualiser l'élément publié, mais cette fois-ci
avec la méthode view() (la méthode preview() utilisée plus tôt permet de voir
ce qui n'est pas encore publié).
new_exp.view()
Enfin, vous pouvez supprimer une expérience avec la méthode delete().
new_exp.delete()
Nous allons maintenant regarder d'autres méthodes disponibles, permettant de
regarder les sources de données d'une expérience ou bien d'en cloner une. Il
est bien sûr possible de le faire avec une expérience créée directement avec
l'API, mais nous allons ici travailler sur des expériences déjà existantes sur
notre portail.
Manipuler une expérience existante
Pour accéder à une expérience existante il suffit de connaître l'identifiant
de l'expérience. Vous pouvez le récupérer très facilement dans l'url de l'item
: Il suffit ensuite d'instancier la classe WebExperience en passant
l'itemid en argument :
exp = WebExperience("34212dda74e9443bbc3e5a6be7058036")#itemid à modifier
L'expérience étant déjà publiée, j'utilise view() pour voir à quoi elle
ressemble :
exp.datasources
Maintenant, si vous ne connaissez pas directement l'itemid de votre
expérience, vous pouvez bien sûr utiliser les capacités classiques de l'API
pour retrouver cette dernière. Ci-dessous par exemple, j'ai pu retrouver
mon expérience à partir de son nom avec la méthode search() du
ContentManager. Cette méthode renvoyant une liste, j'instancie ensuite la classe
WebExperience comme plus tôt, en récupérant l'itemid du premier élément
de la liste :
search_exp = gis.content.search(query="title:Ressources Experience Builder",#changer le titre de l'experience si nécessaire
#outside_org=True, #à utiliser pour élargir la recherche en dehors de votre application
item_type="Web Experience",
max_items=1)
toclone_exp = WebExperience("{0}".format(search_exp[0].itemid))
Nous allons maintenant voir comment cloner cet expérience, par exemple vers le
contenu d'un autre utilisateur. Pour cela, je définis tout d'abord quelle sera
la "cible", c'est-à dire-l'endroit où le clone de l'expérience sera copié.
Pour cela, je vais rester dans mon portail actuel mais passer les informations
d'authentification d'un utilisateur tiers. Nous pouvons ensuite utiliser la
méthode clone() pour cloner l'expérience :
cible = GIS(username="username",password="password")#infos d'authentification à modifier
cloned_exp = toclone_exp.clone(
target = cible,
owner = "username",
search_existing_items = False
)
cloned_exp
A nouveau, nous pouvons utiliser la fonction view() pour visualiser
l'expérience clonée, et vérifier qu'elle fonctionne correctement :
Voilà , nous arrivons au bout des fonctions majeures implémentées par cette
première version du module expbuilder. Comme évoqué plus tôt, les
équipes d'Esri ont prévu d'y ajouter de nouvelles méthodes au fur et à mesure
des nouvelles versions de l'API, pour nous permettre d'aller plus loin dans la
manipulation d'Experience Builder avec Python. Nous en reparlerons évidemment
sur ce blog ; mais en attendant, je vous invite à consulter
les autres nouveautés de la version 2.2.0 de l'API
! N'oubliez pas également que tout le code présenté est téléchargeable sur Github ou depuis
cet item sur ArcGIS.
Aucun commentaire:
Enregistrer un commentaire