Je poursuis ma série de tutoriels consacrés à l'usage de l'API ArcGIS for Python. Aujourd'hui, je vous propose de voir comment automatiser le chargement de documents (Excel, Word, PowerPoint, PDF, ...) sur votre portail ArcGIS. Ce tutoriel, que vous pourrez compléter avec d'autres types de fichiers supportés par les portails ArcGIS, montre également comment créer un dossier et partager les éléments une fois ajoutés au portail ArcGIS.
Le Notebook présenté ci-dessous est téléchargeable ici.
Création de l'objet GIS et authentification sur le portail ArcGIS.
In [1]:
from IPython.display import display
from arcgis.gis import GIS
import os, pathlib
gis = GIS("https://www.arcgis.com", "username", "password")
display(gis)
Ci-dessous quelques variables permettant de paramétrer le chemin d'accès aux fichiers locaux et le filtre sur les extensions de fichiers (par exemple pour ne prendre que les fichiers PDF, Excel, ...). Vous indiquerez également le nom du dossier à créer sur le portail. Si aucun dossier n'est précisé, les fichiers seront charger à la racine de vos contenus. Les options de partage des documents chargés se paramètrent vis les variables share_with_everyone et share_with_organization.
In [2]:
# Chemin d'accès aux photos
data_dir = "/Users/glavenu/Downloads/Docs"
# Extension des fichiers, Attention ce paramètre est case-sensitive,
# '*.*' peut être utilisé pour charger l'ensemble des fichiers
document_ext = "*.*"
portal_folder = "Docs"
share_with_everyone=False
share_with_organization=True
La fonciton ci-dessous permet de retourner le type de document en fonction de l'extension du fichier. Vous pouvez compléter cette liste avec d'autres types de document supportés par les portails ArcGIS.
In [3]:
def GetDocType(ext):
doc_type=None
document_types={".doc":"Microsoft Word",
".docx":"Microsoft Word",
".xls":"Microsoft Excel",
".xlsx":"Microsoft Excel",
".ppt":"Microsoft Powerpoint",
".pptx":"Microsoft Powerpoint",
".pdf":"PDF"}
doc_type=document_types.get(ext.lower())
return doc_type
La fonction ci-dessous retourne l'image miniature correspondant au type de fichier pour être utilisée lors de la création de l'élément sur le portail ArcGIS.
In [4]:
def GetDocIcon(doc_type):
doc_icon=None
document_icons={"Microsoft Word":"https://upload.wikimedia.org/wikipedia/commons/thumb/4/4f/Microsoft_Word_2013_logo.svg/440px-Microsoft_Word_2013_logo.svg.png",
"Microsoft Excel":"https://upload.wikimedia.org/wikipedia/fr/c/cf/Logo_Microsoft_Excel_2013.png",
"Microsoft Powerpoint":"https://upload.wikimedia.org/wikipedia/fr/c/c2/Logo_Microsoft_PowerPoint_2013.png",
"PDF":"https://fr.cdn.v5.futura-sciences.com/buildsv6/images/largeoriginal/d/d/c/ddc35b596c_77727_pdfpaysage.jpg"}
doc_icon=document_icons.get(doc_type)
return doc_icon
Création du dossier dans les contenus de l'utilisateur, si ce dernier n'existe pas.
In [5]:
# Creation du dossier sur le portail
if portal_folder is not "":
try:
gis.content.create_folder(portal_folder)
except:
pass
# Recupereration et filtrage de la liste des fichiers
document_file_list = [str(doc_file) for doc_file in pathlib.Path(data_dir).glob(document_ext)]
print("Nombre de documents trouvés: " + str(len(document_file_list)))
Chargement de chaque fichier sur le portail, puis partage de l'élément créé.
In [6]:
for current_doc_file in document_file_list:
try:
path, DocName = os.path.split(current_doc_file)
DocType=GetDocType('.'+ str(current_doc_file).split(".")[1])
DocIcon=GetDocIcon(DocType)
item = gis.content.add({'type': DocType, 'title': DocName.lower() , 'tags': 'Document,' + DocType}, current_doc_file, DocIcon,None,None,portal_folder)
item.share(share_with_everyone, share_with_organization, None, False)
display(item)
except:
pass
print('Import des documents terminé')

0 comments :
Enregistrer un commentaire