0
0

SharePoint のファイルを Microsoft Graph API を使用してダウンロードする(C#) ~実装編~

Posted at

1. はじめに

本記事では、SharePointに格納してあるドキュメントを Microsoft Graph API を使用してダウンロードする方法をご紹介します。
最近では、ネットワーク共有フォルダを廃止し、SharePointに移行するといった傾向がみられます。
今回はそんな SharePoint のドキュメントのダウンロードの実装をします。
なお、 Microsoft Graph API の利用はAzureの登録が必須になるため、実装をする場合は、併せてこちらもご確認ください。

また、この記事は以下の続きになります。
よろしければ先にこちらもご確認ください。
SharePoint のファイルを Microsoft Graph API を使用してダウンロードする ~API理解編~

※なお、本記事の開発言語はC#でデスクトップアプリケーションの開発を目的としております。

2. Graph Client Service を使ってAPIを実行

SharePoint のファイルを Microsoft Graph API を使用してダウンロードする ~API理解編~
SharePointのファイルをダウンロードする際に使用する以下のAPIを紹介しました。
今回はこちらのAPIを実行して情報を取得しようと思います。

必要になるのは、 Graph Client Service というライブラリです。
インストールについては、公式ページにありますので、こちらからインストールして下さい。

インストールが完了したら、さっそくGraphClientのインスタンスを生成して、APIを実行しようと思います。

2.1. GraphClientインスタンスの生成

実は、インスタンスの生成方法はいくつか種類があります。
もう少し具体的に説明すると、どの認証プロバイダーを選択するかで、インスタンスの生成方法が変わります。
本題ではないのでここは、デスクトップアプリケーションの開発で今回使用する対話型のフローを選択した場合の実装を紹介しておきます。

var scopes = new[] { "User.Read" };

// Multi-tenant apps can use "common",
// single-tenant apps must use the tenant ID from the Azure portal
var tenantId = "common";

// Value from app registration
var clientId = "YOUR_CLIENT_ID";

// using Azure.Identity;
var options = new InteractiveBrowserCredentialOptions
{
    TenantId = tenantId,
    ClientId = clientId,
    AuthorityHost = AzureAuthorityHosts.AzurePublicCloud,
    // MUST be http://localhost or http://localhost:PORT
    // See https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/wiki/System-Browser-on-.Net-Core
    RedirectUri = new Uri("http://localhost"),
};

// https://learn.microsoft.com/dotnet/api/azure.identity.interactivebrowsercredential
var interactiveCredential = new InteractiveBrowserCredential(options);

var graphClient = new GraphServiceClient(interactiveCredential, scopes);

上記以外の認証方法については公式ドキュメントを参照してください。

2.2. Graph APIの実行

今回実行するのは、以下のAPI

GET /sites/{siteId}/drive/items/{item-id}/content

2.1章で生成したインスタンスを使用して、以下のように実行します。

await graphClient.Sites["{siteid}"].Items["{itemid}"].GetAsync();

これで完了です。

後はレスポンスからダウンロードUrlの値を取得するだけです。
ちなみにこんな感じでダウンロードUrlは取得可能です。

   var drive = await AuthenticationInfo.Instance.GraphClient.Sites["{siteId}"].Items["{itemId}"]. GetAsync();
   var downloadUrl = drive.AdditionalData["@microsoft.graph.downloadUrl"].ToString();

2.3. ファイルのダウンロード

ダウンロードUrlさえ取得してしまえばあとはダウンロードするだけです。
Microsoft Graph APIはもう関係ないので、実装だけ紹介します。

   var webClient = new WebClient();
   webClient.DownloadFile(downloadUrl, {"ダウンロード先のファイルパス"});
   webClient.Dispose();

上記はわかりやすいために、WebClientを使用していますが、HttpClientを使用する方法もあります。

3. おわり

今回は、siteIDやitemidを使用して、ファイルのダウンロードを実施しましたが、他のアプローチでもファイルのダウンロードを実施できます。
他の方法については、随時更新していきますので、よろしければご覧ください。
また、Graph Client Serviceを利用せずに、実施するケースも紹介する予定です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0