Am modernen Arbeitsplatz ermöglicht die Integration von Microsoft SharePoint mit Python-Anwendungen die automatisierte Verwaltung und den programmgesteuerten Zugriff auf Dokumente, Ordner und andere Ressourcen. In diesem Tutorial werden die Erstellung und Verwendung der SharePointClient
-Klasse für die Interaktion mit SharePoint über die Microsoft Graph-API beschrieben.
Das Tutorial führt Sie durch die Anwendungsregistrierung in Azure, die Implementierung der Python-Klasse und das Festlegen der erforderlichen Berechtigungen. Abschließend wird der komplette Quellcode auf GitHub geteilt.
Bevor wir beginnen, stellen Sie sicher, dass Sie Folgendes haben:
Python ist auf Ihrem Computer installiert.
Zugriff auf eine Microsoft SharePoint-Website.
Installierte die requests
-Bibliothek in Python, verfügbar über pip ( pip install requests
).
Um mit SharePoint über die Microsoft Graph-API zu interagieren, müssen Sie Ihre Anwendung in Azure Active Directory (Azure AD) registrieren. Dadurch werden die erforderlichen tenant_id
, client_id
und client_secret
bereitgestellt.
Melden Sie sich beim Azure-Portal an: Navigieren Sie zum Azure-Portal und melden Sie sich an.
Greifen Sie auf Azure Active Directory zu: Wählen Sie in der Seitenleiste Azure Active Directory aus.
Registrieren Sie eine neue Anwendung: Gehen Sie zu „App-Registrierungen“ und klicken Sie auf „Neue Registrierung“. Geben Sie einen Namen ein, wählen Sie die Kontotypen aus und legen Sie bei Bedarf einen Umleitungs-URI fest.
IDs und Geheimnisse erhalten: Notieren Sie sich nach der Registrierung die bereitgestellte Client-ID und Mandanten-ID. Erstellen Sie unter „Zertifikate & Geheimnisse“ ein neues Client-Geheimnis.
Legen Sie in Azure AD die richtigen Berechtigungen fest, damit Ihre Anwendung Dateien und Websites lesen kann.
API-Berechtigungen: Klicken Sie auf der Registrierungsseite Ihrer App auf „API-Berechtigungen“.
Berechtigungen hinzufügen: Wählen Sie „Berechtigung hinzufügen“, dann „Microsoft Graph“ und dann „Anwendungsberechtigungen“.
Fügen Sie spezifische Berechtigungen hinzu: Suchen Sie nach Files.Read.All
und Sites.Read.All
und fügen Sie sie hinzu, um Lesefunktionen für Dateien und Websites zu aktivieren.
Administratoreinwilligung erteilen: Um die Berechtigungen zu aktivieren, klicken Sie auf „Administratoreinwilligung für [Ihre Organisation] erteilen“.
Implementieren Sie die SharePointClient
-Klasse, die Authentifizierung und Methoden für die Interaktion mit SharePoint-Daten umfasst. Unten ist die Klasse in ein Skript integriert:
import requestimport 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 = resources_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() # Initialisieren und speichern Sie das Zugriffstoken bei der Instanziierung def get_access_token(self): # Body für die Zugriffstoken-Anfrage body = { 'grant_type': 'client_credentials', 'client_id': self.client_id, 'client_secret': self.client_secret, 'scope': self.resource_url + '.default' } Response = request.post(self.base_url, headers=self.headers, data=body) return Response.json().get('access_token') # Zugriffstoken aus der Antwort extrahieren def get_site_id(self, site_url): # Erstellen Sie eine URL, um die Site-ID anzufordern. full_url = f'https://graph.microsoft.com/v1.0/sites/{site_url}' Response = request.get(full_url, headers={'Authorization': f'Bearer {self.access_token}'}) return Response.json().get('id') # Gibt die Site-ID zurück def get_drive_id(self, site_id): # Laufwerks-IDs und Namen abrufen mit einer Site verknüpft drivers_url = f'https://graph.microsoft.com/v1.0/sites/{site_id}/drives' Response = request.get(drives_url, headers={'Authorization': f'Bearer {self.access_token}'}) drivers = Response.json().get('value', []) return [(drive['id'], drive['name' ]) für Laufwerke in Laufwerken] def get_folder_content(self, site_id, drive_id, Folder_path='root'): # Den Inhalt eines Ordners abrufen Folder_url = f'https://graph.microsoft.com/v1.0/sites/{site_id}/drives/{drive_id}/root/children' Response = request.get(folder_url, headers={'Authorization': f'Bearer {self.access_token}'}) items_data = Response.json() rootdir = [] if 'value' in items_data: für item in items_data['value']: rootdir.append((item['id'], item['name'])) gibt Rootdir zurück # Rekursive Funktion zum Durchsuchen von Ordnern def list_folder_contents(self, site_id, drive_id, Folder_id, level=0): # Den Inhalt eines bestimmten Ordners abrufen Folder_contents_url = f'https://graph.microsoft.com/v1.0/sites/ {site_id}/drives/{drive_id}/items/{folder_id}/children' content_headers = {'Authorization': f'Bearer {self.access_token}'} content_response = request.get(folder_contents_url, headers=contents_headers) Folder_contents = content_response.json() items_list = [] # Liste zum Speichern von Informationen, wenn 'Wert' in Folder_Contents: für Element in Folder_Contents[ 'Wert']: wenn 'Ordner' im Element: # Ordner zur Liste hinzufügen items_list.append({'name': item['name'], 'type': 'Folder', 'mimeType': None}) # Rekursiver Aufruf für Unterordner items_list.extend(self.list_folder_contents(site_id, drive_id, item[ 'id'], Ebene + 1)) elif 'file' in item: # Datei mit ihrem mimeType zur Liste hinzufügen items_list.append({'name': item['name'], 'type': 'File', 'mimeType': item['file']['mimeType']}) gibt items_list zurück def download_file(self, download_url, local_path, file_name): headers = {'Authorization': f'Bearer {self.access_token}'} Response = request.get(download_url, headers=headers) if Response.status_code == 200: full_path = os.path.join(local_path, file_name) mit open(full_path, 'wb') als Datei: file.write(response.content) print(f"Heruntergeladene Datei: {full_path}") else: print(f"Fehler beim Herunterladen von {file_name}: {response.status_code} - {response.reason}") def download_folder_contents(self, site_id, drive_id, Folder_id, local_folder_path, level=0): # Alle Inhalte rekursiv aus einem Ordner herunterladen Folder_contents_url = f'https://graph.microsoft.com/v1.0/sites/{site_id}/ drivers/{drive_id}/items/{folder_id}/children' content_headers = {'Authorization': f'Bearer {self.access_token}'}contents_response = request.get(folder_contents_url, headers=contents_headers)folder_contents =content_response.json() wenn 'Wert' in Ordnerinhalt: für Element in Ordnerinhalt['Wert']: wenn 'Ordner' im Element: new_path = os.path.join(local_folder_path, item['name']) wenn nicht os.path.exists(new_path): os.makedirs(new_path) self.download_folder_contents(site_id, drive_id, item['id'], new_path, level + 1) # Rekursiver Aufruf für Unterordner elif 'Datei' im Element: Dateiname = Element['Name'] 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) # Verwendungsbeispiel tent_id = 'your-tenant-id' client_id = 'your-client-id' client_secret = 'your-client-secret' site_url = "xxxxx.sharepoint.com:/sites/xxxxxx" # Ersetzen Sie xxxxx durch Ihre Site URL-Ressource = 'https://graph.microsoft.com/' client = SharePointClient(tenant_id, client_id, client_secret, resources) site_id = client.get_site_id(site_url) print("Site ID:", site_id) drive_info = client.get_drive_id(site_id) print("Drives available:", drive_info) # Beispiel: Greifen Sie auf das erste Laufwerk zu und listen Sie den Root-Inhalt auf. drive_id = drive_info[0 ][0]folder_content = client.get_folder_content(site_id,drive_id) print("Stamminhalt:", Ordnerinhalt)
Die SharePointClient
-Klasse bietet eine optimierte Möglichkeit zur Interaktion mit SharePoint-Ressourcen über Python. Diese Lösung ist ideal für die Automatisierung von Dokumentenverwaltungsaufgaben und steigert die Produktivität in Ihrem gesamten Unternehmen. Schauen Sie sich den vollständigen Quellcode auf GitHub an.
Schützen Sie Ihre Anmeldedaten und halten Sie sich an Best Practices für die Verwaltung sensibler Informationen. Viel Spaß beim Automatisieren mit Python und SharePoint!