Di tempat kerja modern, mengintegrasikan Microsoft SharePoint dengan aplikasi Python memungkinkan manajemen otomatis dan akses ke dokumen, folder, dan sumber daya lainnya secara terprogram. Tutorial ini menguraikan pembuatan dan penggunaan kelas SharePointClient
untuk berinteraksi dengan SharePoint melalui Microsoft Graph API.
Tutorial ini akan memandu Anda melalui pendaftaran aplikasi di Azure, mengimplementasikan kelas Python, dan mengatur izin yang diperlukan. Terakhir, kode sumber lengkap akan dibagikan di GitHub.
Sebelum kita mulai, pastikan Anda memiliki:
Python diinstal pada mesin Anda.
Akses ke situs Microsoft SharePoint.
Menginstal perpustakaan requests
dengan Python, tersedia melalui pip ( pip install requests
).
Untuk berinteraksi dengan SharePoint melalui Microsoft Graph API, Anda perlu mendaftarkan aplikasi Anda di Azure Active Directory (Azure AD). Ini menyediakan tenant_id
, client_id
, dan client_secret
yang diperlukan.
Masuk ke Portal Azure: Navigasikan ke Portal Azure dan masuk.
Akses Azure Active Directory: Pilih Azure Active Directory dari bar samping.
Mendaftarkan aplikasi baru: Buka "Pendaftaran aplikasi" dan klik "Pendaftaran baru". Berikan nama, pilih jenis akun, dan atur URI pengalihan jika diperlukan.
Dapatkan ID dan Rahasia: Pasca registrasi, catat ID Klien dan ID Penyewa yang diberikan. Buat rahasia klien baru di bawah "Sertifikat & rahasia".
Tetapkan izin yang benar di Azure Active Directory untuk mengizinkan aplikasi Anda membaca file dan situs.
Izin API: Di halaman pendaftaran aplikasi Anda, klik "Izin API".
Tambahkan izin: Pilih "Tambahkan izin", pilih "Microsoft Graph" lalu "Izin aplikasi".
Tambahkan izin khusus: Temukan dan tambahkan Files.Read.All
dan Sites.Read.All
untuk mengaktifkan kemampuan membaca file dan situs.
Berikan persetujuan admin: Untuk mengaktifkan izin, klik "Berikan persetujuan admin untuk [Organisasi Anda]".
Menerapkan kelas SharePointClient
yang mencakup autentikasi dan metode untuk berinteraksi dengan data SharePoint. Di bawah ini adalah kelas yang diintegrasikan ke dalam skrip:
impor permintaanimport 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() # Inisialisasi dan simpan token akses saat instantiasi def get_access_token(self): # Isi untuk permintaan token akses body = { 'grant_type': 'client_credentials', 'client_id': self.client_id, 'client_secret': self.client_secret, 'scope': self.resource_url + '.default' } respon = permintaan.post(self.base_url, headers=self.headers, data=body) return respon.json().get('access_token') # Ekstrak token akses dari respon def get_site_id(self, site_url): # Buat URL untuk meminta ID situs full_url = f'https://graph.microsoft.com/v1.0/sites/{site_url}' respon = request.get(full_url, headers={'Authorization': f'Bearer {self.access_token}'}) return respon.json().get('id') # Kembalikan ID situs def get_drive_id(self, site_id): # Ambil ID dan nama drive terkait dengan situs drives_url = f'https://graph.microsoft.com/v1.0/sites/{site_id}/drives' respon = request.get(drives_url, headers={'Otorisasi': f'Bearer {self.access_token}'}) drive = respon.json().get('value', []) return [(drive['id'], drive['name' ]) untuk drive di drive] def get_folder_content(self, site_id, drive_id, folder_path='root'): # Mendapatkan isi folder folder_url = f'https://graph.microsoft.com/v1.0/sites/{site_id}/drives/{drive_id}/root/children' respon = permintaan.get(folder_url, headers={'Otorisasi': f'Bearer {self.access_token}'}) items_data = respon.json() rootdir = [] if 'value' in items_data: untuk item di items_data['value']: rootdir.append((item['id'], item['name'])) mengembalikan rootdir # Fungsi rekursif untuk menelusuri folder def list_folder_contents(self, site_id, drive_id, folder_id, level=0): # Mendapatkan konten folder tertentu folder_contents_url = f'https://graph.microsoft.com/v1.0/sites/ {site_id}/drives/{drive_id}/items/{folder_id}/children'contents_headers = {'Otorisasi': f'Bearer {self.access_token}'} content_response = request.get(folder_contents_url, headers=contents_headers) folder_contents = content_response.json() items_list = [] # Daftar untuk menyimpan informasi jika 'nilai' di folder_contents: untuk item di folder_contents['value' ]: jika 'folder' dalam item: # Tambahkan folder ke daftar item_list.append({'nama': item['nama'], 'type': 'Folder', 'mimeType': None}) # Panggilan rekursif untuk subfolder items_list.extend(self.list_folder_contents(site_id, drive_id, item['id'], level + 1)) elif 'file' in item : # Tambahkan file ke daftar dengan mimeType items_list.append({'name': item['name'], 'type': 'File', 'mimeType': item['file']['mimeType']}) mengembalikan item_list def download_file(self, download_url, local_path, file_name): headers = {'Authorization': f'Bearer {self.access_token}'} respon = permintaan.get(download_url, headers=headers) if respon.status_code == 200: full_path = os.path.join(local_path, file_name) dengan open(full_path, 'wb') sebagai file: file.write(response.content) print(f"File diunduh: {full_path}") else: print(f"Gagal mengunduh {file_name}: {response.status_code} - {response.reason}") def download_folder_contents(self, site_id, drive_id, folder_id, local_folder_path, level=0): # Mengunduh semua konten secara rekursif dari folder folder_contents_url = f'https://graph.microsoft.com/v1.0/sites/{site_id}/ drives/{drive_id}/items/{folder_id}/children'contents_headers = {'Otorisasi': f'Bearer {self.access_token}'} isi_response = permintaan.get(folder_contents_url, headers=contents_headers) folder_contents = isi_response.json() jika 'nilai' dalam folder_isi: untuk item dalam folder_isi['nilai']: jika 'folder' dalam item: new_path = os.path.join(local_folder_path, item['name']) jika tidak os.path.exists(new_path): os.makedirs(new_path) self.download_folder_contents(site_id, drive_id, item['id'], new_path, level + 1) # Panggilan rekursif untuk subfolder elif 'file' di item: file_name = barang['nama'] 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) # Contoh penggunaan tenant_id = 'id-penyewa-Anda' client_id = 'id-klien-Anda' client_secret = 'rahasia-klien-Anda' site_url = "xxxxx.sharepoint.com:/sites/xxxxxx" # Ganti xxxxx dengan situs Anda Sumber daya URL = 'https://graph.microsoft.com/' client = SharePointClient(tenant_id, client_id, client_secret, resource) site_id = client.get_site_id(site_url) print("Site ID:", site_id) drive_info = client.get_drive_id(site_id) print("Drives tersedia:", drive_info) # Contoh: Akses drive pertama dan daftar konten root drive_id = drive_info[0 ][0] folder_content = klien.get_folder_content(site_id, drive_id) print("Konten Akar:", folder_konten)
Kelas SharePointClient
menyediakan cara yang efisien untuk berinteraksi dengan sumber daya SharePoint melalui Python. Solusi ini ideal untuk mengotomatisasi tugas pengelolaan dokumen, meningkatkan produktivitas di seluruh organisasi Anda. Lihat kode sumber lengkapnya di GitHub.
Jaga keamanan kredensial Anda dan patuhi praktik terbaik untuk mengelola informasi sensitif. Nikmati otomatisasi dengan Python dan SharePoint!