Microsoft Graph を使ってみよう : ドライブとファイルリソース (OneDrive/SharePoint)

Microsoft Graph を使うと、個人の OneDrive、OneDrive for Business および SharePoint のドキュメントライブラリにあるファイルを操作できます。

# ドライブリソース

OneDrive 自体や SharePoint のドキュメントライブラリなど最上位のオブジェクトで、ファイルを指定する際にまずドライブを指定する必要があります。また自分のドライブやグループのドライブなど様々なリソースに紐づいています。

## 主なシナリオ

- 各種ドライブの一覧表示、特殊フォルダーを含む個別ドライブへのアクセス
- ドライブ内のアイテムの取得、検索
- フォルダーの作成

## ドライブリソースの操作
いくつか代表的な操作を以下に紹介します。

**OneDrive または OneDrive for Business ドライブ, およびグループドライブの取得**

GET: https://graph.microsoft.com/v1.0/me/drives
GET: https://graph.microsoft.com/v1.0/groups/{id}/drives

```csharp:C#
await graphClient.Me.Drives.Request().GetAsync();
await graphClient.Groups["id"].Drives.Request().GetAsync();
```

**OneDrive や既定の SharePoint サイトドライブの取得**

GET: https://graph.microsoft.com/v1.0/me/drive/root
GET: https://graph.microsoft.com/v1.0/sites/root/drive/root

```csharp:C#
await graphClient.Me.Drive.Root.Request().GetAsync();
await graphClient.Sites["root"].Drive.Request().GetAsync();
```

**ドライブ内のアイテム一覧、検索、最近使ったファイル**
アイテムにはフォルダーとファイルが含まれます。最近使ったファイルは OneDrive、SharePoint に関係なくすべてのロケーションから情報が取得されます。

GET: https://graph.microsoft.com/v1.0/me/drive/root/children
GET: https://graph.microsoft.com/v1.0/me/drive/root/search(q='de:code')?select=name,id,webUrl
GET: https://graph.microsoft.com/v1.0/me/drive/recent

```csharp:C#
await graphClient.Me.Drive.Root.Children.Request().GetAsync();
await graphClient.Me.Drive.Root.Search("de:code").Request().Select("name,id,webUrl").GetAsync();
await graphClient.Me.Drive.Recent().Request().GetAsync();
```

**特殊なドライブへのアクセス**
写真やドキュメントなど特殊フォルダーにアクセスできます。詳細は [名前で特殊フォルダーを取得する](https://developer.microsoft.com/ja-jp/graph/docs/api-reference/v1.0/api/drive_get_specialfolder) を参照。

GET: https://graph.microsoft.com/v1.0/me/drive/special/photos
GET: https://graph.microsoft.com/v1.0/me/drive/special/documents

```csharp:C#
await graphClient.Me.Drive.Special["photos"].Request().GetAsync();
await graphClient.Me.Drive.Special["documents"].Request().GetAsync();
```

# ドライブアイテム
ドライブ内にある各オブジェクトはドライブアイテムリソースとなります。

## 主なシナリオ

- アイテムの作成、読み取り、更新、削除 (CRUD)
- アイテムのコピー、移動、検索、共有
- サムネイルの取得
- アクセス権の管理
- フォルダに対してコンテンツのアップロード、ダウンロード

## ドライブアイテムリソースの操作
いくつか代表的な操作を以下に紹介します。

**フォルダーを作成する**

POST: https://graph.microsoft.com/v1.0/me/drive/root/children

```json:Body
{
  "name": "サンプルフォルダ",
  "folder": { },
  "@microsoft.graph.conflictBehavior": "rename"
}
```

```csharp:C#
var folder = await graphClient.Me.Drive.Root.Children.Request().AddAsync(new DriveItem()
{
    Name = "サンプルフォルダ",
    Folder = new Folder(),
    AdditionalData = new Dictionary<string, object>()
    {
            { "@microsoft.graph.conflictBehavior", "rename" }
    }
});
```

**サムネイルを取得する**
サムネイルを取得すると、各サイズのサムネイルの URL が返ります。

GET: https://graph.microsoft.com/v1.0/me/drive/items/{id}/thumbnails

```csharp:C#
await graphClient.Me.Drive.Items["id"].Thumbnails.Request().GetAsync();
```

**ファイルをダウンロードする**
format を指定した場合、指定したフォーマットでダウンロードできます。ここでは PDF 形式でダウンロードを指定。

GET: https://graph.microsoft.com:443/v1.0/me/drive/items/{id}/content
GET: https://graph.microsoft.com:443/v1.0/me/drive/items/{id}/content?format=pdf

```csharp:C#
await graphClient.Me.Drive.Items["id"].Content.Request().GetAsync();
await graphClient.Me.Drive.Items["id"].Content.Request
(
    new List<Option>() { new QueryOption("format", "pdf") }
).GetAsync();
```
# まとめ
個人のファイルを活用するために OneDrive から SharePoint にファイルを集約したり、アプリケーションでサムネイルを活用したりしてみてください。

[目次へ戻る](https://qiita.com/kenakamu/items/6a1ca508dc093779eefa)

# 参照
[Microsoft Graph でのファイル操作](https://developer.microsoft.com/ja-jp/graph/docs/api-reference/v1.0/resources/onedrive)
[Microsoft Graph でのドライブ操作](https://developer.microsoft.com/ja-jp/graph/docs/api-reference/v1.0/resources/drive)
[Microsoft Graph でのドライブアイテム操作](https://developer.microsoft.com/ja-jp/graph/docs/api-reference/v1.0/resources/driveitem)