Dans le lieu de travail moderne, l'intégration de Microsoft SharePoint avec les applications Python permet une gestion et un accès automatisés aux documents, dossiers et autres ressources par programmation. Ce didacticiel décrit la création et l'utilisation de la classe SharePointClient
pour interagir avec SharePoint via l'API Microsoft Graph.
Le didacticiel vous guidera tout au long de l'enregistrement des applications dans Azure, de la mise en œuvre de la classe Python et de la définition des autorisations nécessaires. Enfin, le code source complet sera partagé sur GitHub.
Avant de commencer, assurez-vous d'avoir :
Python installé sur votre machine.
Accès à un site Microsoft SharePoint.
Installé la bibliothèque requests
en Python, disponible via pip ( pip install requests
).
Pour interagir avec SharePoint via l'API Microsoft Graph, vous devez enregistrer votre application dans Azure Active Directory (Azure AD). Cela fournit les tenant_id
, client_id
et client_secret
nécessaires.
Connectez-vous au portail Azure : accédez au portail Azure et connectez-vous.
Accéder à Azure Active Directory : sélectionnez Azure Active Directory dans la barre latérale.
Enregistrez une nouvelle application : Allez dans « Inscriptions d'applications » et cliquez sur « Nouvelle inscription ». Fournissez un nom, choisissez les types de compte et définissez un URI de redirection si nécessaire.
Obtenez les identifiants et les secrets : après l'inscription, notez l'ID client et l'ID locataire fournis. Créez un nouveau secret client sous « Certificats et secrets ».
Définissez les autorisations appropriées dans Azure AD pour permettre à votre application de lire des fichiers et des sites.
Autorisations API : sur la page d'inscription de votre application, cliquez sur "Autorisations API".
Ajouter des autorisations : Sélectionnez « Ajouter une autorisation », choisissez « Microsoft Graph » puis « Autorisations des applications ».
Ajoutez des autorisations spécifiques : recherchez et ajoutez Files.Read.All
et Sites.Read.All
pour activer les fonctionnalités de lecture de fichiers et de sites.
Accorder le consentement de l'administrateur : pour activer les autorisations, cliquez sur "Accorder le consentement de l'administrateur pour [votre organisation]".
Implémentez la classe SharePointClient
qui inclut l'authentification et les méthodes pour interagir avec les données SharePoint. Ci-dessous la classe intégrée dans un script :
importer des requêtes importer osclass SharePointClient : def __init__ (self, tenant_id, client_id, client_secret, resource_url) : self.tenant_id = tenant_id self.client_id = client_id self.client_secret = client_secret self.resource_url = resource_url self.base_url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token" self.headers = {'Content-Type' : 'application/x-www-form-urlencoded'} self.access_token = self.get_access_token() # Initialise et stocke le jeton d'accès lors de l'instanciation def get_access_token(self): # Corps de la demande de jeton d'accès body = { 'grant_type': 'client_credentials', 'client_id' : self.client_id, 'client_secret' : self.client_secret, 'scope' : self.resource_url + '.default' } réponse = request.post(self.base_url, headers=self.headers, data=body) return réponse.json().get('access_token') # Extraire le jeton d'accès de la réponse def get_site_id(self, site_url): # Créez une URL pour demander l'ID du site full_url = f'https://graph.microsoft.com/v1.0/sites/{site_url}' réponse = requêtes.get(full_url, headers={'Authorization': f'Bearer {self.access_token}'}) return réponse.json().get('id') # Renvoie l'ID du site def get_drive_id(self, site_id): # Récupère les ID et les noms des lecteurs associé à un site drives_url = f'https://graph.microsoft.com/v1.0/sites/{site_id}/drives' réponse = requêtes.get(drives_url, headers={'Autorisation' : f'Bearer {self.access_token}'}) drives = réponse.json().get('value', []) return [(drive['id'], drive['name' ]) pour le lecteur dans les lecteurs] def get_folder_content(self, site_id, drive_id, dossier_path='root'): # Récupère le contenu d'un dossier dossier_url = f'https://graph.microsoft.com/v1.0/sites/{site_id}/drives/{drive_id}/root/children' réponse = requêtes.get(folder_url, headers={'Autorisation' : f'Bearer {self.access_token}'}) items_data = réponse.json() rootdir = [] si 'valeur' dans items_data : pour l'élément dans items_data['value'] : rootdir.append((item['id'], item['name'])) return rootdir # Fonction récursive pour parcourir les dossiers def list_folder_contents(self, site_id, drive_id, dossier_id, level=0) : # Récupérer le contenu d'un dossier spécifique dossier_contents_url = f'https://graph.microsoft.com/v1.0/sites/ {site_id}/drives/{drive_id}/items/{folder_id}/children' contents_headers = {'Autorisation' : f'Bearer {self.access_token}'} contents_response = requêtes.get(folder_contents_url, headers=contents_headers) dossier_contents = contents_response.json() items_list = [] # Liste pour stocker les informations si 'valeur' dans dossier_contents : pour l'élément dans dossier_contents[ 'value'] : si 'folder' dans l'élément : # Ajouter un dossier à la liste items_list.append({'name': item['name'], 'type': 'Folder', 'mimeType': None}) # Appel récursif aux sous-dossiers items_list.extend(self.list_folder_contents(site_id, drive_id, item[ 'id'], niveau + 1)) elif 'file' dans l'élément : # Ajouter le fichier à la liste avec son mimeType items_list.append({'name' : item['name'], 'type' : 'File', 'mimeType' : item['file']['mimeType']}) return items_list def download_file(self, download_url, local_path, file_name) : en-têtes = {'Autorisation' : f'Bearer {self.access_token}'} réponse = request.get(download_url, headers=headers) si réponse.status_code == 200 : full_path = os.path.join(local_path, file_name) avec open(full_path, 'wb') comme fichier : file.write(response.content) print(f"Fichier téléchargé : {full_path}") else : print(f"Échec du téléchargement de {file_name} : {response.status_code} - {response.reason}") def download_folder_contents(self, site_id, drive_id, dossier_id, local_folder_path, level=0) : # Téléchargez de manière récursive tout le contenu d'un dossier dossier_contents_url = f'https://graph.microsoft.com/v1.0/sites/{site_id}/ drives/{drive_id}/items/{folder_id}/children' contents_headers = {'Autorisation' : f'Bearer {self.access_token}'} contents_response = requêtes.get(folder_contents_url, headers=contents_headers) dossier_contents = contents_response.json() si 'valeur' dans dossier_contents : pour l'élément dans dossier_contents['valeur'] : si 'dossier' dans l'élément : new_path = os.path.join(local_folder_path, item['name']) si not os.path.exists(new_path): os.makedirs(new_path) self.download_folder_contents(site_id, drive_id, item['id'], new_path, level + 1) # Appel récursif pour les sous-dossiers elif 'file' dans l'élément : file_name = article['nom'] file_download_url = f"{resource}/v1.0/sites/{site_id}/drives/{drive_id}/items/{item['id']}/content" self.download_file(file_download_url, local_folder_path, file_name) # Exemple d'utilisation tenant_id = 'your-tenant-id' client_id = 'your-client-id' client_secret = 'your-client-secret' site_url = "xxxxx.sharepoint.com:/sites/xxxxxx" # Remplacez xxxxx par votre site Ressource URL = 'https://graph.microsoft.com/' client = SharePointClient (tenant_id, client_id, client_secret, ressource) site_id = client.get_site_id(site_url) print("ID du site :", site_id) drive_info = client.get_drive_id(site_id) print("Lecteurs disponibles :", drive_info) # Exemple : accéder au premier lecteur et répertorier le contenu racine drive_id = drive_info[0 ][0] dossier_content = client.get_folder_content (site_id, drive_id) print("Contenu racine :", dossier_content)
La classe SharePointClient
offre un moyen simplifié d'interagir avec les ressources SharePoint via Python. Cette solution est idéale pour automatiser les tâches de gestion documentaire et améliorer ainsi la productivité au sein de votre organisation. Consultez le code source complet sur GitHub.
Protégez vos informations d’identification et respectez les meilleures pratiques en matière de gestion des informations sensibles. Profitez de l'automatisation avec Python et SharePoint !