以前、C#やJavaScriptからM365のGraphAPIを呼び出すことは何度かあったのですが、今回はPythonから呼んでみます
今回はアプリケーション権限のクライアントシークレットキー認証で実施しています
-
SharePointを操作する(GraphAPI版) - ナストンのまとめ
以前、トークン等を使用することなくSharePointの情報を取得する方法を記載しましたが、今回はGraphAPI経由で ...
続きを読む
バージョン | |
---|---|
OS | WIndows 11 Pro |
Python | 3.12 |
msgraph-sdk(pipからインストール) | 1.4.0 |
azure-identity(pipからインストール) | 1.16.0 |
今回はAzureアプリの作成は紹介しません。上記の関連記事を参考に作成していただき、付与する権限だけはアプリケーション権限で作成してください
GraphAPIを呼び出すためのオブジェクトを生成する
基本的な部分はC#とあまり変わらない感じで実装することができました
import msgraph
import azure.identity as AzureIdentity
tenantId = "Azure上で取得したテナントID"
clientId = "Azure上で取得したクライアントID"
client_secret = "Azure上で取得したクライアントシークレットキー"
# クライアントシークレットキー認証の場合は以下の値で固定
scopes = ["https://graph.microsoft.com/.default"]
credential = AzureIdentity.ClientSecretCredential(tenant_id=tenantId, client_id=clientId,
client_secret=client_secret,
authority=AzureIdentity.AzureAuthorityHosts.AZURE_PUBLIC_CLOUD)
graph_client = msgraph.GraphServiceClient(credential, scopes)
サイト情報を取得する
こちらもC#とあまり変わらずに実装することができました
import asyncio
async def get_siteid(site_id):
siteinfo = await graph_client.sites.by_site_id(site_id).get()
return siteinfo
siteId = "ドメイン.sharepoint.com:/sites/HogeHugaPiyo"
asyncio.run(get_siteid(siteId))
リスト情報を取得する
サイト情報同様こちらもC#とあまり変わらずに実装することができます
async def get_list(site_id, list_displayname):
# list以降の情報を取得する際にはきちんとしたIdでないとエラーとなるため
# 一旦サイト情報を取得する
siteInfo = await get_siteid(site_id)
listinfo = await graph_client.sites.by_site_id(siteInfo.id).lists.by_list_id(list_displayname).get()
return listinfo
siteId = "ドメイン.sharepoint.com:/sites/HogeHugaPiyo"
listDisplayName = "Testリスト"
asyncio.run(get_list(siteId, listDisplayName))
リストアイテムを取得する
ここだけC#と違いFilterクエリがなぜか使えないので、それっぽい動きをするように実装しています
async def get_listitems(site_id, list_displayname, fieldnaeme, fieldvalue):
# 列情報を取得するためのクエリパラメータを設定
query_params = ListItemItemRequestBuilder.ListItemItemRequestBuilderGetQueryParameters(
expand=["fields"],
)
request_configuration = RequestConfiguration(
query_parameters=query_params,
)
site_info = await get_siteid(site_id)
list_items = await graph_client.sites.by_site_id(site_info).lists.by_list_id(list_displayname).items.get(request_configuration = request_configuration)
filtered_items = [item for item in list_items.value if item.fields.additional_data.get(fieldnaeme) == fieldvalue]
return filtered_items
siteId = "ドメイン.sharepoint.com:/sites/HogeHugaPiyo"
listDisplayName = "Testリスト"
items = asyncio.run(get_listitems(siteId, listDisplayName, "Title", "Testだよ"))
if len(items) > 0:
print(items[0])
最後に
PythonでのGraphAPI呼び出しを調べると基本的にrequest経由での実装がほとんどだったのでなかなか思った実装ができずに四苦八苦しました
この記事が誰かの役に立てばと思います
会社紹介
私が所属しているアドバンスド・ソリューション株式会社(以下、ADS)は一緒に働く仲間を募集しています
会社概要
「技術」×「知恵」=顧客課題の解決・新しい価値の創造
この方程式の実現はADSが大切にしている考えで、技術を磨き続けるgeekさと、顧客を思うloveがあってこそ実現できる世界観だと思っています
この『love & geek』の精神さえあれば、得意不得意はno problem!
技術はピカイチだけど顧客折衝はちょっと苦手。OKです。技術はまだ未熟だけど顧客と知恵を出し合って要件定義するのは大好き。OKです
凸凹な社員の集まり、色んなカラーや柄の個性が集まっているからこそ、常に新しいソリューションが生まれています
ミッション
私たちは、テクノロジーを活用し、業務や事業の生産性向上と企業進化を支援します
-
アドバンスド・ソリューション株式会社
アドバンスド・ソリューションは主にMicrosoft製品を使用して、企業の生産性向上に取り組んでいます。要件定義から導入 ...
サイトへ移動