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

公式サイト

PHP 7.4以上。
v2.0を試すときはMicrosoft Graph PHP SDK Upgrade Guideとサンプルコードを参考にする。


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で実装することにした。



【関連記事】