会議の調整に時間がかかる要因の一つが、参加者の予定確認です。Microsoft 365(Outlook)とPythonを連携すれば、複数人の予定をAPI経由で取得し、共通の空き時間を自動で抽出できます。
この記事では、Microsoft Graph APIを活用してOutlook予定表から空き時間を取得するPythonスクリプトの構築方法を解説します。
前提:Microsoft Graph APIの準備
- Microsoft Entra ID(旧 Azure AD)でアプリ登録
- 以下のAPIアクセス権限を付与し、管理者承認
Calendars.Read
Calendars.Read.Shared
- クライアントID・テナントID・シークレットを取得
必要ライブラリのインストール
pip install msal requests pytz
Pythonでトークンを取得
from msal import ConfidentialClientApplication
client_id = "YOUR_CLIENT_ID"
tenant_id = "YOUR_TENANT_ID"
client_secret = "YOUR_CLIENT_SECRET"
app = ConfidentialClientApplication(
client_id,
authority=f"https://login.microsoftonline.com/{tenant_id}",
client_credential=client_secret
)
token = app.acquire_token_for_client(scopes=["https://graph.microsoft.com/.default"])
access_token = token["access_token"]
空き時間(Free/Busy)を取得する
import requests
from datetime import datetime, timedelta
import pytz
# 対象ユーザーのメールアドレス
user_email = "user@example.com"
# 対象日時の範囲(UTC)
start_time = datetime.utcnow().replace(hour=0, minute=0, second=0)
end_time = start_time + timedelta(days=1)
# Graph APIエンドポイント
url = "https://graph.microsoft.com/v1.0/me/calendar/getSchedule"
headers = {
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json"
}
body = {
"schedules": [user_email],
"startTime": {
"dateTime": start_time.isoformat(),
"timeZone": "UTC"
},
"endTime": {
"dateTime": end_time.isoformat(),
"timeZone": "UTC"
},
"availabilityViewInterval": 30
}
response = requests.post(url, headers=headers, json=body)
data = response.json()
if "value" in data:
availability = data["value"][0]["availabilityView"]
print("30分ごとの予定(0=空き, 1=予定あり):")
print(availability)
共通の空き時間を取得する(複数人)
複数のメールアドレスを"schedules"
に指定することで、共通の空き時間をチェック可能です。すべてのユーザーで0
が並んだ時間帯が「空き」と判断できます。
応用:最初の空き時間を抽出して通知
def find_first_available_slot(availability, interval_minutes=30):
for i, val in enumerate(availability):
if val == "0":
start = start_time + timedelta(minutes=i * interval_minutes)
return start.astimezone(pytz.timezone("Asia/Tokyo")).strftime("%H:%M")
return "空きなし"
print("最初の空き時間:", find_first_available_slot(availability))
まとめ
Microsoft Graph APIとPythonを連携させることで、Outlook予定表から空き時間を自動取得できます。これにより、会議調整や面談スケジュール作成を効率化でき、業務の無駄を削減できます。
Slackやメールと連携させて自動通知する仕組みに拡張すれば、さらに便利なスケジュール管理ボットも実現できます。ぜひ実務に活用してみてください。