Utiliser l’API OneDrive sans interaction de l’utilisateur, tel qu’un programme de traitement par lots (version .NET C#) (à l’aide de la bibliothèque Microsoft Graph)

Page mise à jour :
Date de création de la page :

Environnement d’exploitation

Studio visuel
  • Visual Studio 2022
.FILET
  • .NET 8
API d’authentification Microsoft
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
Microsoft.Graph
  • 5.54.0
Types de comptes Microsoft
  • Compte professionnel ou scolaire

Conditions préalables

Studio visuel
  • L’une des versions
.FILET
  • L’une des versions
API d’authentification Microsoft
  • 2.0 OAuth 2
Microsoft OneDrive API
  • 1.0
Microsoft.Graph
  • 5.XX
Types de comptes Microsoft
  • Compte professionnel ou scolaire

À propos de cette astuce

Cette astuce est un programme modifié utilisant la bibliothèque basée sur Microsoft Graph les astuces suivantes. Par conséquent, reportez-vous à la procédure d’astuces suivante pour une vue d’ensemble et une procédure d’opération sur Azure, et reportez-vous à cette astuce lorsque vous générez le programme.

condition préalable

  • Vous disposez d’un compte Microsoft pour un compte professionnel ou scolaire
  • Vous pouvez utiliser le OneDrive associé au compte Microsoft répertorié ci-dessus (par exemple, OneDrive Business)
  • Visual Studio 2022 installé
  • Vous avez inscrit votre application sur Azure en vous référant aux conseils ci-dessus et obtenu les informations nécessaires telles que l’ID.

Création d’une application console

Démarrez Visual Studio et créez un projet pour votre application console. Vous pouvez le créer en dehors de Visual Studio, mais je vais utiliser Visual Studio pour l’instant.

L’emplacement et le nom du projet sont facultatifs. Dans ce cas, le nom du projet est OneDriveApiDotNetClientCredentialsMicrosoftGraph .

Microsoft.Graph Tout d’abord, obtenez les bibliothèques et Azure.Identity à partir de NuGet.

Cette fois, nous n’allons pas diviser le code, mais Program.cs l’écrire en quinconce à partir du haut, donc si vous pouvez vérifier le mouvement, veuillez le réécrire en divisant le code si nécessaire.

using Azure.Identity;
using Microsoft.Graph;

Décrivez l’espace de noms que vous souhaitez utiliser.

// 各種 ID などの定義
var clientId = "XXXXXXXX";      // クライアント ID
var tenantId = "XXXXXXXX";      // テナント ID
var clientSecret = "XXXXXXXX";  // クライアント シークレット
var userId = "XXXXXXXX";        // ユーザー ID

Définissez l’ID obtenu sur Azure pour chacun.

// 使いまわすので最初に定義しておく
HttpClient httpClient = new();

Vous avez généré un pour faire une requête à HttpClient l’URL spécifiée.

// クライアント シークレットによる認証情報を定義
ClientSecretCredential clientSecretCredential = new(tenantId, clientId, clientSecret);

// HttpClient と認証情報で Microsoft Graph サービスのクライアントを生成
using GraphServiceClient graphClient = new(httpClient, clientSecretCredential);

Définissez la clé secrète client à l’aide de l’ID que vous avez obtenu, et ainsi de suite. Vous pouvez utiliser ces données pour HttpClient GraphServiceClient créer une instance de . Ceci est GraphServiceClient souvent utilisé pour accéder à diverses API.

// 対象ユーザーに紐づく OneDrive を取得 (紐づいているドライブが OneDrive 1つという前提)
var drive = await graphClient.Users[userId].Drive.GetAsync();
if (drive == null)
{
  Console.WriteLine("ドライブを取得できませんでした。");
  return;
}

GraphServiceClient pour obtenir d’abord le OneDrive associé à l’utilisateur. Si plusieurs lecteurs sont liés, Drives recherchez et récupérez le OneDrive cible à partir de . Il est possible qu’un lecteur autre que OneDrive soit également lié, mais je n’ai pas beaucoup vérifié. Si vous êtes sûr qu’un seul OneDrive est lié, vous Drive pouvez l’obtenir tel quel dans les propriétés.

// OneDrive のルートを取得
var root = await graphClient.Drives[drive.Id].Root.GetAsync();
if (root == null)
{
  Console.WriteLine("OneDrive のルートを取得できませんでした。");
  return;
}

Une fois que vous avez OneDrive, vous pouvez y accéder librement. Si vous recherchez l’ID d’un dossier ou d’un fichier, vous pouvez le spécifier directement. Tout d’abord, je n’ai rien vérifié, donc j’obtiens le dossier racine.

// ルート直下にあるフォルダ一覧取得
var rootChildren = await graphClient.Drives[drive.Id].Items[root.Id].Children.GetAsync();
if (rootChildren == null || rootChildren.Value == null)
{
  Console.WriteLine("フォルダの一覧を取得できませんでした。");
  return;
}
foreach (var item in rootChildren.Value)
{
  Console.WriteLine($"Type={(item.File != null ? "File" : "Folder")}, Id={item.Id}, Name={item.Name}, Size={item.Size}");
}

Une fois que vous avez le dossier racine, Children vous pouvez obtenir une liste de fichiers et de dossiers directement en dessous. Après cela, j’énumère les valeurs récupérées et j’affiche les noms.

Résumé

J’ai essayé d’écrire du code en utilisant la bibliothèque de « Microsoft Graph ». Je pense que vous pouvez réduire considérablement la quantité de code par rapport à l’accès à l’URL de l’API.

Cependant, je pense que les inconvénients sont que différentes versions de la bibliothèque peuvent entraîner des modifications cassantes du code et qu’il y a peu de documentation. Si vous pouvez les tolérer, je pense qu’il serait plus avantageux de réduire la quantité de code que vous écrivez.

merci

J’avais quelques questions sur l’utilisation de l’API OneDrive cette fois-ci, alors j’ai posé une question.