현대 직장에서는 Microsoft SharePoint를 Python 애플리케이션과 통합하면 프로그래밍 방식으로 문서, 폴더 및 기타 리소스에 대한 자동 관리 및 액세스가 가능해집니다. 이 자습서에서는 Microsoft Graph API를 통해 SharePoint와 상호 작용하기 위해 SharePointClient
클래스를 만들고 사용하는 방법을 간략하게 설명합니다.
이 자습서에서는 Azure에서 애플리케이션을 등록하고, Python 클래스를 구현하고, 필요한 권한을 설정하는 과정을 안내합니다. 마지막으로 전체 소스 코드는 GitHub에서 공유됩니다.
시작하기 전에 다음 사항을 확인하세요.
컴퓨터에 Python이 설치되어 있습니다.
Microsoft SharePoint 사이트에 액세스합니다.
pip를 통해 사용할 수 있는 requests
라이브러리를 Python에 설치했습니다( pip install requests
).
Microsoft Graph API를 통해 SharePoint와 상호 작용하려면 Azure AD(Azure Active Directory)에 애플리케이션을 등록해야 합니다. 이는 필요한 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
을 찾아 추가하여 파일 및 사이트 읽기 기능을 활성화합니다.
관리자 동의 부여: 권한을 활성화하려면 "[귀하의 조직]에 대한 관리자 동의 부여"를 클릭하세요.
SharePoint 데이터와 상호 작용하기 위한 인증 및 메서드가 포함된 SharePointClient
클래스를 구현합니다. 다음은 스크립트에 통합된 클래스입니다.
가져오기 요청 가져오기 osclass SharePointClient: def __init__(self, 테넌트_id, client_id, client_secret, 리소스_url): self.tenant_id = 테넌트_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() # 인스턴스화 시 액세스 토큰을 초기화하고 저장합니다. def get_access_token(self): # 액세스 토큰 요청 본문 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') # 응답에서 액세스 토큰 추출 def get_site_id(self, site_url): # 사이트 ID를 요청하기 위한 빌드 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') # 사이트 ID 반환 def get_drive_id(self, site_id): # 드라이브 ID 및 이름 검색 사이트와 연결됨drive_url = f'https://graph.microsoft.com/v1.0/sites/{site_id}/drives' response = 요청.get(drives_url, headers={'Authorization': f'Bearer {self.access_token}'}) 드라이브 = 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' 응답 = 요청.get(folder_url, headers={'권한 부여': f'Bearer {self.access_token}'}) items_data = response.json() rootdir = [] if 'value' in items_data: for item in items_data['value']: rootdir.append((item['id'], item['name'])) return 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 =contents_response.json() items_list = [] # 'value' in 폴더_contents: for item in 폴더_contents['value'인 경우 정보를 저장할 목록 ]: if 'folder' in item: # 목록에 폴더를 추가합니다. 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': 항목['file']['mimeType']}) 항목_목록 반환 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), open(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 = 요청.get(folder_contents_url, headers=contents_headers)folder_contents =content_response.json() if 'value' in 폴더_contents: for item in 폴더_contents['value']: if 'folder' in item: 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 = 항목['이름'] 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) # 사용 예 rent_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("사이트 ID:", site_id)drive_info = client.get_drive_id(site_id) print("사용 가능한 드라이브:",drive_info) # 예: 첫 번째 드라이브에 액세스하고 루트 콘텐츠 목록을 나열합니다.drive_id =drive_info[0 ][0] 폴더_콘텐츠 = client.get_folder_content(사이트_ID, 드라이브_ID) print("루트 콘텐츠:",folder_content)
SharePointClient
클래스는 Python을 통해 SharePoint 리소스와 상호 작용하는 간소화된 방법을 제공합니다. 이 솔루션은 문서 관리 작업을 자동화하여 조직 전체의 생산성을 향상시키는 데 이상적입니다. GitHub에서 전체 소스 코드를 확인하세요.
자격 증명을 안전하게 유지하고 민감한 정보 관리에 대한 모범 사례를 준수하십시오. Python과 SharePoint로 자동화를 즐겨보세요!