ในสถานที่ทำงานสมัยใหม่ การรวม Microsoft SharePoint เข้ากับแอปพลิเคชัน Python ช่วยให้สามารถจัดการอัตโนมัติและเข้าถึงเอกสาร โฟลเดอร์ และทรัพยากรอื่นๆ โดยทางโปรแกรม บทช่วยสอนนี้สรุปการสร้างและการใช้คลาส SharePointClient
เพื่อโต้ตอบกับ SharePoint ผ่าน Microsoft Graph API
บทช่วยสอนจะแนะนำคุณเกี่ยวกับการลงทะเบียนแอปพลิเคชันใน Azure การใช้งานคลาส Python และการตั้งค่าสิทธิ์ที่จำเป็น สุดท้ายนี้ ซอร์สโค้ดที่สมบูรณ์จะถูกแชร์บน GitHub
ก่อนที่เราจะเริ่ม ตรวจสอบให้แน่ใจว่าคุณมี:
ติดตั้ง Python บนเครื่องของคุณแล้ว
การเข้าถึงไซต์ Microsoft SharePoint
ติดตั้งไลบรารี requests
ใน Python ซึ่งพร้อมใช้งานผ่าน pip ( pip install requests
)
หากต้องการโต้ตอบกับ SharePoint ผ่าน Microsoft Graph API คุณต้องลงทะเบียนแอปพลิเคชันของคุณใน Azure Active Directory (Azure AD) สิ่งนี้จัดเตรียม tenant_id
, client_id
และ client_secret
ที่จำเป็น
ลงชื่อเข้าใช้ Azure Portal: ไปที่ Azure Portal และเข้าสู่ระบบ
เข้าถึง Azure Active Directory: เลือก Azure Active Directory จากแถบด้านข้าง
ลงทะเบียนแอปพลิเคชันใหม่: ไปที่ "การลงทะเบียนแอป" และคลิก "การลงทะเบียนใหม่" ระบุชื่อ เลือกประเภทบัญชี และตั้งค่า URI การเปลี่ยนเส้นทาง หากจำเป็น
รับ ID และความลับ: หลังการลงทะเบียน จด ID ลูกค้าและ ID ผู้เช่าที่ให้ไว้ สร้างรหัสลับไคลเอ็นต์ใหม่ภายใต้ "ใบรับรองและข้อมูลลับ"
ตั้งค่าสิทธิ์ที่ถูกต้องใน Azure AD เพื่อให้แอปพลิเคชันของคุณสามารถอ่านไฟล์และไซต์ได้
สิทธิ์ API: ในหน้าการลงทะเบียนแอปของคุณ คลิก "สิทธิ์ API"
เพิ่มสิทธิ์: เลือก "เพิ่มสิทธิ์" เลือก "Microsoft Graph" จากนั้นเลือก "สิทธิ์ของแอปพลิเคชัน"
เพิ่มสิทธิ์เฉพาะ: ค้นหาและเพิ่ม Files.Read.All
และ Sites.Read.All
เพื่อเปิดใช้งานความสามารถในการอ่านไฟล์และไซต์
ให้ความยินยอมของผู้ดูแลระบบ: หากต้องการเปิดใช้งานการอนุญาต ให้คลิก "ให้ความยินยอมของผู้ดูแลระบบสำหรับ [องค์กรของคุณ]"
ใช้คลาส SharePointClient
ซึ่งรวมถึงการรับรองความถูกต้องและวิธีการโต้ตอบกับข้อมูล SharePoint ด้านล่างนี้เป็นคลาสที่รวมอยู่ในสคริปต์:
คำขอนำเข้านำเข้า osclass SharePointClient: def __init__ (self, tenant_id, client_id, client_secret, resources_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 = {'ประเภทเนื้อหา': 'application/x-www-form-urlencoded'} self.access_token = self.get_access_token() # เริ่มต้นและจัดเก็บโทเค็นการเข้าถึงตามการสร้างอินสแตนซ์ def get_access_token(self): # เนื้อความสำหรับเนื้อหาคำขอโทเค็นการเข้าถึง = { 'grant_type': 'client_credentials', 'client_id': self.client_id, 'client_secret': self.client_secret, 'ขอบเขต': self.resource_url + '.default' } response = request.post(self.base_url, headers=self.headers, data=body) return response.json().get('access_token') # แยกโทเค็นการเข้าถึงออกจากการตอบสนอง def get_site_id(self, site_url): # สร้าง URL เพื่อขอรหัสไซต์ full_url = f'https://graph.microsoft.com/v1.0/sites/{site_url}' response =ร้องขอ.get(full_url, headers={'Authorization': f'Bearer {self.access_token}'}) return response.json().get('id') # คืนรหัสไซต์ def get_drive_id(self, site_id): # ดึงข้อมูล ID และชื่อไดรฟ์ เชื่อมโยงกับไซต์ drives_url = f'https://graph.microsoft.com/v1.0/sites/{site_id}/drives' response =ร้องขอ.get(drives_url, headers={'การอนุญาต': f'Bearer {self.access_token}'}) drives = response.json().get('value', []) return [(drive['id'], drive['name' ]) สำหรับไดรฟ์ในไดรฟ์] def get_folder_content(self, site_id, drive_id, folder_path='root'): # รับเนื้อหาของโฟลเดอร์ folder_url = f'https://graph.microsoft.com/v1.0/sites/{site_id}/drives/{drive_id}/root/children' การตอบสนอง =ร้องขอ.get(folder_url, headers={'การอนุญาต': f'Bearer {self.access_token}'}) items_data = response.json() rootdir = [] ถ้า 'value' ใน items_data: สำหรับรายการใน items_data['value']: rootdir.append((item['id'], item['name'])) ส่งคืน rootdir # ฟังก์ชั่นเรียกซ้ำเพื่อเรียกดูโฟลเดอร์ def list_folder_contents (self, site_id, drive_id, folder_id, ระดับ = 0): # รับเนื้อหาของโฟลเดอร์เฉพาะ folder_contents_url = f'https://graph.microsoft.com/v1.0/sites/ {site_id}/drives/{drive_id}/items/{folder_id}/children' contents_headers = {'การอนุญาต': f'Bearer {self.access_token}'} contents_response = request.get(folder_contents_url, headers=contents_headers) folder_contents = contents_response.json() items_list = [] # รายการที่จะจัดเก็บข้อมูลถ้า 'value' ใน folder_contents: สำหรับรายการใน folder_contents[ 'value']: ถ้า 'โฟลเดอร์' ในรายการ: # เพิ่มโฟลเดอร์ในรายการ items_list.append({'name': item['name'], 'type': 'Folder', 'mimeType': none}) # การเรียกซ้ำสำหรับโฟลเดอร์ย่อย items_list.extend(self.list_folder_contents(site_id, drive_id, item[ 'id'], ระดับ + 1)) elif 'file' ในรายการ: # เพิ่มไฟล์ลงในรายการด้วย mimeType items_list.append({'name': item['name'], 'type': 'File', 'mimeType': item['file']['mimeType']}) ส่งคืน items_list def download_file (ตนเอง, download_url, local_path, file_name): headers = {'การอนุญาต': f'Bearer {self.access_token}'} การตอบสนอง =ร้องขอ.get(download_url, headers=headers) ถ้า response.status_code == 200: full_path = os.path.join(local_path, file_name) โดยมี open(full_path, 'wb') เป็นไฟล์: file.write (response.content) print (f "ไฟล์ที่ดาวน์โหลด: {full_path}") else: พิมพ์ (f "ไม่สามารถดาวน์โหลด {file_name}: {response.status_code} - {response.reason}") def download_folder_contents (ตนเอง, site_id, drive_id, folder_id, local_folder_path, ระดับ = 0): # ดาวน์โหลดเนื้อหาทั้งหมดซ้ำจากโฟลเดอร์ folder_contents_url = f'https://graph.microsoft.com/v1.0/sites/{site_id}/ drives/{drive_id}/items/{folder_id}/children' contents_headers = {'การอนุญาต': f'Bearer {self.access_token}'} contents_response = request.get(folder_contents_url, headers=contents_headers) folder_contents = contents_response.json() ถ้า 'value' ใน folder_contents: สำหรับรายการใน folder_contents ['value']: ถ้า 'folder' ในรายการ: new_path = os.path.join(local_folder_path, item['name']) ถ้าไม่ใช่ os.path.exists(new_path): os.makedirs(new_path) self.download_folder_contents(site_id, drive_id, item['id'], new_path, ระดับ + 1) # การเรียกซ้ำสำหรับโฟลเดอร์ย่อย elif 'ไฟล์' ในรายการ: file_name = item['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) # ตัวอย่างการใช้งาน tenant_id = 'your-tenant-id' client_id = 'your-client-id' client_secret = 'your-client-secret' site_url = "xxxxx.sharepoint.com:/sites/xxxxxx" # แทนที่ xxxxx ด้วยเว็บไซต์ของคุณ ทรัพยากร URL = ลูกค้า 'https://graph.microsoft.com/' = SharePointClient(tenant_id, client_id, client_secret, ทรัพยากร) 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) # ตัวอย่าง: เข้าถึงไดรฟ์แรกและแสดงรายการเนื้อหารูท drive_id = drive_info[0 ][0] folder_content = client.get_folder_content (site_id, drive_id) พิมพ์ ("เนื้อหารูท:", folder_content)
คลาส SharePointClient
มอบวิธีที่มีประสิทธิภาพในการโต้ตอบกับทรัพยากร SharePoint ผ่าน Python โซลูชันนี้เหมาะอย่างยิ่งสำหรับงานการจัดการเอกสารอัตโนมัติ เพิ่มประสิทธิภาพการทำงานทั่วทั้งองค์กรของคุณ ตรวจสอบซอร์สโค้ดแบบเต็มบน GitHub
รักษาข้อมูลรับรองของคุณให้ปลอดภัยและปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดในการจัดการข้อมูลที่ละเอียดอ่อน เพลิดเพลินกับการทำงานอัตโนมัติด้วย Python และ SharePoint!