現代の職場では、Microsoft SharePoint を Python アプリケーションと統合することで、ドキュメント、フォルダー、その他のリソースへのプログラムによる自動管理とアクセスが可能になります。このチュートリアルでは、Microsoft Graph API を通じて SharePoint と対話するためのSharePointClient
クラスの作成と使用方法の概要を説明します。
このチュートリアルでは、Azure でのアプリケーションの登録、Python クラスの実装、必要なアクセス許可の設定について説明します。最後に、完全なソース コードは GitHub で共有されます。
始める前に、次のものが揃っていることを確認してください。
Python がマシンにインストールされています。
Microsoft SharePoint サイトにアクセスします。
pip 経由で利用可能な Python のrequests
ライブラリをインストールしました ( pip install requests
)。
Microsoft Graph API 経由で SharePoint と対話するには、アプリケーションを Azure Active Directory (Azure AD) に登録する必要があります。これにより、必要なtenant_id
、 client_id
、およびclient_secret
が提供されます。
Azure ポータルにサインインする: Azure ポータルに移動してログインします。
Azure Active Directory にアクセスする:サイドバーから [Azure Active Directory] を選択します。
新しいアプリケーションを登録する: 「アプリケーションの登録」に移動し、「新規登録」をクリックします。名前を入力し、アカウントの種類を選択し、必要に応じてリダイレクト URI を設定します。
ID とシークレットの取得:登録後、提供されたクライアント ID とテナント ID をメモします。 「証明書とシークレット」で新しいクライアント シークレットを作成します。
Azure AD で適切なアクセス許可を設定し、アプリケーションがファイルとサイトを読み取ることができるようにします。
API 権限:アプリの登録ページで、[API 権限] をクリックします。
アクセス許可の追加: [アクセス許可の追加] を選択し、[Microsoft Graph]、[アプリケーションのアクセス許可] の順に選択します。
特定の権限を追加する: Files.Read.All
とSites.Read.All
を見つけて追加し、ファイルとサイトの読み取り機能を有効にします。
管理者の同意を与える:権限を有効にするには、[[組織] に管理者の同意を与える] をクリックします。
SharePoint データと対話するための認証とメソッドを含むSharePointClient
クラスを実装します。以下はスクリプトに統合されたクラスです。
import requestsimport 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): # アクセス トークン リクエストの本文 body = { 'grant_type': 'client_credentials'、'client_id': self.client_id、'client_secret': self.client_secret、'scope': self.resource_url + '.default' } response =requests.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 =requests.get(full_url, headers={'Authorization': f'Bearer {self.access_token}'}) return response.json().get('id') # サイト ID を返します def get_drive_id(self, site_id): # ドライブ ID と名前を取得しますサイトに関連付けられている drives_url = f'https://graph.microsoft.com/v1.0/sites/{site_id}/drives' 応答 =requests.get(drives_url, headers={'Authorization': f'Bearer {self.access_token}'}) drive = response.json().get('value', []) return [(ドライブ['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' 応答 =requests.get(folder_url, headers={'Authorization': 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'])) ルートディレクトリを返す # フォルダーを参照する再帰関数 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 =requests.get(folder_contents_url, headers=contents_headers)folder_contents = content_response.json() items_list = [] # 情報を格納するリスト if 'value' infolder_contents: for item infolder_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': item['file']['mimeType']}) return 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)、ファイルとして 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}/ drives/{drive_id}/items/{folder_id}/children' content_headers = {'Authorization': f'Bearer {self.access_token}'}contents_response =requests.get(folder_contents_url, headers=contents_headers)folder_contents = content_response.json() if 'value' infolder_contents: for item infolder_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 = 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, resource) 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 を使って自動化を楽しみましょう。