في مكان العمل الحديث، يتيح دمج Microsoft SharePoint مع تطبيقات Python الإدارة الآلية والوصول إلى المستندات والمجلدات والموارد الأخرى برمجيًا. يوضح هذا البرنامج التعليمي كيفية إنشاء فئة SharePointClient
واستخدامها للتفاعل مع SharePoint من خلال واجهة برمجة تطبيقات Microsoft Graph.
سيرشدك البرنامج التعليمي خلال عملية تسجيل التطبيق في Azure، وتنفيذ فئة Python، وتعيين الأذونات اللازمة. وأخيرًا، ستتم مشاركة كود المصدر الكامل على GitHub.
قبل أن نبدأ، تأكد من أن لديك:
تم تثبيت بايثون على جهازك.
الوصول إلى موقع Microsoft SharePoint.
تم تثبيت مكتبة requests
في بايثون، وهي متاحة عبر النقطة ( pip install requests
).
للتفاعل مع SharePoint عبر واجهة برمجة تطبيقات Microsoft Graph، يتعين عليك تسجيل التطبيق الخاص بك في Azure Active Directory (Azure AD). يوفر هذا tenant_id
و client_id
و client_secret
الضروريين.
تسجيل الدخول إلى Azure Portal: انتقل إلى Azure Portal وقم بتسجيل الدخول.
الوصول إلى Azure Active Directory: حدد Azure Active Directory من الشريط الجانبي.
تسجيل طلب جديد: انتقل إلى "تسجيلات التطبيق" وانقر على "تسجيل جديد". أدخل اسمًا، واختر أنواع الحسابات، وقم بتعيين عنوان URI لإعادة التوجيه إذا لزم الأمر.
الحصول على المعرفات والأسرار: بعد التسجيل، لاحظ معرف العميل ومعرف المستأجر المقدمين. قم بإنشاء سر عميل جديد ضمن "الشهادات والأسرار".
قم بتعيين الأذونات الصحيحة في Azure AD للسماح لتطبيقك بقراءة الملفات والمواقع.
أذونات واجهة برمجة التطبيقات: في صفحة تسجيل تطبيقك، انقر على "أذونات واجهة برمجة التطبيقات".
إضافة أذونات: حدد "إضافة إذن"، ثم اختر "Microsoft Graph" ثم "أذونات التطبيق".
إضافة أذونات محددة: ابحث عن Files.Read.All
و Sites.Read.All
وأضفهما لتمكين إمكانيات قراءة الملفات والمواقع.
منح موافقة المسؤول: لتنشيط الأذونات، انقر على "منح موافقة المسؤول لـ [مؤسستك]".
قم بتنفيذ فئة SharePointClient
التي تتضمن المصادقة وطرق التفاعل مع بيانات SharePoint. فيما يلي الفصل المدمج في البرنامج النصي:
طلبات الاستيرادimport 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() # تهيئة رمز الوصول وتخزينه عند إنشاء مثيل def get_access_token(self): # نص نص طلب رمز الوصول = { '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') # استخراج رمز الوصول من الاستجابة def get_site_id(self, site_url): # أنشئ عنوان URL لطلب معرف الموقع 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') # إرجاع معرف الموقع def get_drive_id(self, site_id): # استرداد معرفات وأسماء محرك الأقراص مقترن بموقع drives_url = f'https://graph.microsoft.com/v1.0/sites/{site_id}/drives' Response = request.get(drives_url, headers={'Authorization': f'Bearer {self.access_token}'}) drives = Response.json().get('value', []) return [(drive['id']) ، محرك الأقراص ['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' Response = request.get(folder_url, headers={'Authorization': f'Bearer {self.access_token}'}) items_data = Response.json() rootdir = [] إذا كانت "القيمة" في items_data: للعنصر الموجود في items_data['القيمة']: rootdir.append((item['id'], item['name'])) يُرجع rootdir # وظيفة متكررة لتصفح المجلدات def list_folder_contents(self, site_id, drive_id, Folder_id,level=0): # احصل على محتويات مجلد معين Folder_contents_url = f'https://graph.microsoft.com/v1.0/sites/ {site_id}/drives/{drive_id}/items/{folder_id}/children' content_headers = {'التفويض': f'Bearer {self.access_token}'} content_response = request.get(folder_contents_url, headers=contents_headers) Folder_contents = content_response.json() items_list = [] # قائمة لتخزين المعلومات إذا كانت "القيمة" في مجلد_contents: للعنصر في Folder_contents['القيمة']: إذا كان هناك 'مجلد' في العنصر: # أضف مجلدًا إلى القائمة items_list.append({'name': item['name'], 'type': 'Folder', 'mimeType': None}) # استدعاء متكرر للمجلدات الفرعية items_list.extend(self.list_folder_contents(site_id, Drive_id, item['id'],level + 1)) elif 'file' in item: # أضف ملفًا إلى القائمة باستخدام نوع mimeType الخاص به items_list.append({'name': item['name'], 'type': 'File', 'mimeType': item['file']['mimeType']}) إرجاع items_list def download_file(self, download_url, local_path, file_name): headers = {'Authorization': f'Bearer {self.access_token}'} استجابة = request.get(download_url, headers=headers) if Response.status_code == 200: full_path = os.path.join(local_path, file_name) مع فتح (full_path, 'wb') كملف: file.write(response.content) print(f"تم تنزيل الملف: {full_path}") else: print(f"فشل تنزيل {file_name}: {response.status_code} - {response.reason}") def download_folder_contents(self, site_id, drive_id, Folder_id, local_folder_path,level=0): # تنزيل جميع المحتويات بشكل متكرر من مجلد Folder_contents_url = f'https://graph.microsoft.com/v1.0/sites/{site_id}/ محركات الأقراص/{drive_id}/items/{folder_id}/children' content_headers = {'التفويض': f'Bearer {self.access_token}'} content_response = request.get(folder_contents_url, headers=contents_headers) مجلد_contents = محتويات_response.json() إذا كانت "القيمة" في مجلد_محتوى_المحتوى: للعنصر الموجود في مجلد_محتوى_المحتوى['القيمة'] : إذا كان "المجلد" في العنصر: 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,level + 1) # استدعاء متكرر للمجلدات الفرعية elif 'file' in item: 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) drive_info = client.get_drive_id(site_id) print("محركات الأقراص المتاحة:"، 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!