Python による Microsoft Graph API を利用し、Teams Lists の Site-ID と List-ID を取得してみました


## 概要
Microsoft Graph API を利用して Teams Lists の Site-ID と List-ID を取得するための Python プログラムです。
手順は、以下となります。
    ①.Teams Lists の作成（リスト名）
    ②.その Lists のサイト情報の取得
    ③.リスト名とサイト情報から、作成した Temas Lists の Site-ID と List-ID を取得

なお、Access Token の取得については、[このプログラム](https://qiita.com/turupon/items/038b893712433ed23f0b) を使用しています。

## 実行環境
macOS Big Sur 11.1 
python 3.8.3

## Temas Lists の作成
[このサイトを参照](https://support.microsoft.com/ja-jp/office/teams-%E3%81%A7%E3%81%AE%E4%B8%80%E8%A6%A7%E3%81%AE%E4%BD%BF%E7%94%A8%E3%82%92%E9%96%8B%E5%A7%8B%E3%81%99%E3%82%8B-c971e46b-b36c-491b-9c35-efeddd0297db) にして、リストを一から作成します。
このとき、「空白のリスト」を選択し、リスト名には「UList（任意）」を設定します。このリスト名は後述の実行プログラムの「SPS_LISTNAME」で定義します。


## 作成した Teams Lists 情報からSite-IDを取得するための情報を取得します。
[このサイト](https://qiita.com/teracy55/items/b9c19d1928ba5ba092dc) に記載されている「キーワードで検索」する方法を使用するために、作成した Teams Lists の検索名を取得します。
下記画面にあるように、上部メニューから、「SharePointで開く」を選択し、新たに表示されたブラウザ画面のURLを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544022/6eff6039-3401-e847-d067-95448f2ccc12.png)
下記の表示例でいえば、赤線で囲まれた値「3b3b3b」がキーワード検索で使用する文字列となり、後述の実行プログラムの「SiteGet_URL」の最後の定義する文字列となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544022/0188fabc-662c-d37c-a8f1-2eaf388cecc5.png)
これで事前準備が完了しました。

## 実行するプログラム

```python:GetTeamsSiteIDListID.py

import json
import os
import requests
import argparse
import time
import pprint
from datetime import datetime, timedelta, date
from GetAzureAccessToken import get_azure_access_token  # Azureアクセスのためのアクセストークンの取得オリジナル関数


# Teams Lists Info（リスト名の定義）
SPS_LISTNAME = 'UList'

# TeamsListのサイトURL
SiteGet_URL = 'https://graph.microsoft.com/v1.0/sites?search=3b3b3b'


# SiteIDとListIDの取得
def get_siteID＿listID(access_token):
    # Microsoft Graphを実行するためのヘッダ情報
    headers = {
        'Authorization': 'Bearer %s' % access_token
    }

    # SiteID取得のGetリクエスト
    res1 = requests.get(
        SiteGet_URL,
        headers=headers
    )
    # requrest処理をクローズする
    res1.close

    # res1をjsonファイルに整形
    res1json = res1.json()
    # print(res1json)

    # 必要数分のListIDを取得する
    for i, row in enumerate(res1json['value']):
        # 結果からSiteのIDとNameを取得する。
        SiteID = res1json['value'][i]['id']
        SiteName = res1json['value'][i]['name']

       # ListIDを取得するためのURLを生成する
        ListGet_URL = "https://graph.microsoft.com/v1.0/sites('" + SiteID + \
            "')/lists?$filter=displayName eq '" + SPS_LISTNAME + "'"
        print(ListGet_URL)

        # ListID取得のGetリクエスト
        res2 = requests.get(
            ListGet_URL,
            headers=headers
        )

        # requrest処理をクローズする
        res2.close

        # res2をjsonファイルに整形
        res2json = res2.json()

        # 結果からListIDを取得する
        ListID = res2json['value'][0]['id']

        # 結果からSiteIDとListIDを表示する
        print(SiteName + ' : SiteID  : ' + SiteID)
        print(SiteName + ' : ListID  : ' + ListID)

    return



if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Teams Lists の SiteID と ListID を取得する')
    args = parser.parse_args()

    start = time.time()

    # アクセストークンの取得
    access_token = get_azure_access_token()

    # SiteIDとListIDの取得
    get_siteID＿listID(access_token)

    get_time = time.time() - start

    print("")
    print("取得時間:{0}".format(get_time) + " [sec]")
    print("")
```

## プログラムの実行
 
最初にヘルプを表示してみます。

```
$ python GetTeamsSiteIDListID.py -h
usage: GetTeamsSiteIDListID.py [-h]

Teams Lists の SiteID と ListID を取得する

optional arguments:
  -h, --help  show this help message and exit
```


では、「SiteGet_URL」でキーワード検索される Teams Lists の SiteID と ListID を取得してみます。
プログラム内の print文を参照に以下の結果を確認ください。

```
$ python GetTeamsSiteIDListID.py
https://graph.microsoft.com/v1.0/sites('hogehogecorp.sharepoint.com,4b4b4b4b-b5e3-4c53-a05b-9c9c9c9c9c9c,b7b7b7b7-2ade-4d1e-bba1-f3f3f3f3f3f3')/lists?$filter=displayName eq 'UList'
msteams_3b3b3b : SiteID  : hogehogecorp.sharepoint.com,4b4b4b4b-b5e3-4c53-a05b-9c9c9c9c9c9c,b7b7b7b7-2ade-4d1e-bba1-f3f3f3f3f3f3
msteams_3b3b3b : ListID  : a5a5a5a5-3d71-4f79-ab1d-9b9b9b9b9b9b

取得時間:4.309984922409058 [sec]
```

## 参考情報
以下の情報を参考にさせていただきました。感謝申し上げます。

[Microsoft Graph API でSharePointのサイトIDを調べる方法](https://qiita.com/teracy55/items/b9c19d1928ba5ba092dc)

[Microsoft Graph を使ってみよう : Graph エクスプローラー](https://qiita.com/kenakamu/items/17905fe66345b8e3754b)