Microsoft Graph PHP SDK v2.0を試す
Microsoft Graph APIをPHPからアクセスしようとしいるときにMicrosoft Graph PHP SDKの2.0-RCがリリースされていたので試したときの覚書。
環境: PHP 7.4.30, Microsoft Graph PHP SDK 2.0.0-RC6
公式サイト
- GitHub - microsoftgraph/msgraph-sdk-php: Microsoft Graph Library for PHP.
- Tags · microsoftgraph/msgraph-beta-sdk-php · GitHub
PHP 7.4以上。
v2.0を試すときはMicrosoft Graph PHP SDK Upgrade Guideとサンプルコードを参考にする。
- msgraph-sdk-php/UPGRADING.md at feat/kiota-preview · microsoftgraph/msgraph-sdk-php · GitHub
- msgraph-sdk-php/Examples.md at feat/kiota-preview · microsoftgraph/msgraph-sdk-php · GitHub
Postmanのチュートリアルをやっていないと理解できないと思う。
あとPhpStormとかでソースコードを読みながらでないと使い方が分からない。
※ 公式ドキュメントはEnglish(United States)に変更しないとPHP SDKのサンプルコードが表示されない。
1.ドライブ情報取得
v2.0からはAccessTokenの管理はSDKがやってくれるようになった。
参考: Get Drive - Microsoft Graph beta | Microsoft Docs
$tokenRequestContext = new \Microsoft\Kiota\Authentication\Oauth\ClientCredentialContext('6cc440ec-8a1f-4736-ac1d','eae64fe9-b7eb-4c4b-b87d','vh58QNWYoVHrjVhCbh3LW8');$scopes = ['https://graph.microsoft.com/.default'];$authProvider = new \Microsoft\Kiota\Authentication\PhpLeagueAuthenticationProvider($tokenRequestContext, $scopes);$requestAdapter = new \Microsoft\Graph\Beta\GraphRequestAdapter($authProvider);$graphServiceClient = new \Microsoft\Graph\Beta\GraphServiceClient($requestAdapter);$res = $graphServiceClient->usersById('2a5fb399-a7de-4de4-8e78')->drive()->get();echo '<pre>'; var_dump($res); echo '</pre>';
2.ファイル一覧
ドライブ情報取得するとIDが分かるのでファイル一覧を取得する。
参考: List the contents of a folder - Microsoft Graph beta | Microsoft Docs
$tokenRequestContext = new \Microsoft\Kiota\Authentication\Oauth\ClientCredentialContext('6cc440ec-8a1f-4736-ac1d','eae64fe9-b7eb-4c4b-b87d','vh58Q~NWYoVHrjVhCbh3LW8');$scopes = ['https://graph.microsoft.com/.default'];$authProvider = new \Microsoft\Kiota\Authentication\PhpLeagueAuthenticationProvider($tokenRequestContext, $scopes);$requestAdapter = new \Microsoft\Graph\Beta\GraphRequestAdapter($authProvider);$graphServiceClient = new \Microsoft\Graph\Beta\GraphServiceClient($requestAdapter);$res = $graphServiceClient->usersById('2a5fb399-a7de-4de4-8e78')->drivesById('b!jAZlf7Nck0mLiMIHbj834D4cTK')->itemsById('root')->children()->get();echo '<pre>'; var_dump($res); echo '</pre>';
3.ファイルアップロード
WordPressのアップロードディレクトリにあるファイルをOneDriveへアップロードする。
参考: msgraph-sdk-php/Examples.md at feat/kiota-preview · microsoftgraph/msgraph-sdk-php · GitHub
参考: サイズの小さいファイルをアップロードする - Microsoft Graph v1.0 | Microsoft Docs
$tokenRequestContext = new \Microsoft\Kiota\Authentication\Oauth\ClientCredentialContext('6cc440ec-8a1f-4736-ac1d','eae64fe9-b7eb-4c4b-b87d','vh58Q~NWYoVHrjVhCbh3LW8');$scopes = ['https://graph.microsoft.com/.default'];$authProvider = new \Microsoft\Kiota\Authentication\PhpLeagueAuthenticationProvider($tokenRequestContext, $scopes);$requestAdapter = new \Microsoft\Graph\Beta\GraphRequestAdapter($authProvider);$graphServiceClient = new \Microsoft\Graph\Beta\GraphServiceClient($requestAdapter);$upload_dir = wp_upload_dir();$file_name = 'test.xlsx';$file_path = "{$upload_dir['path']}/{$file_name}";$driveItemId = "root:/{$file_name}:";$inputStream = \GuzzleHttp\Psr7\Utils::streamFor(fopen($file_path, 'r'));$res = $graphServiceClient->drivesById('b!jAZlf7Nck0mLiMIHbj834D4cTKeHHbFGkr')->itemsById($driveItemId)->content()->put($inputStream)->wait();echo '<pre>'; var_dump($res); echo '</pre>';
4.PDF変換
公式ドキュメントにあるContentRequestBuilderGetQueryParametersがSDK内に見当たらない。
参考: Convert to other formats - Microsoft Graph beta | Microsoft Docs
Postmanで実行するとうまくいく。
GET:: https://graph.microsoft.com/beta/drives/{{DriveID}}/items/{{FileID}}/content?format=pdf
試行錯誤してみた。
SDK経由だとformatのqueryParametersに対応していない(と思う)。
ソースコードを追っていって、DriveItemItemRequestBuilderGetQueryParametersとContentRequestBuilderにformat対応するコードを追加してみたけど、うまく動作しない。
しょうがいないのでMicrosoft Graph PHP SDKを使わずにHTTPで実装することにした。