概要
Google Drive API v3の日本語記事があまり存在せず泣いた困ったため
備忘録もかねてつらつらと記載します。
この記事ではC#を用いてGoogle Slidesを取得します。
Google Slidesを取得する
ユーザー認証やDrive API serviceを生成する過程はGoogle Drive APIs .NET Quickstartを参照。
リクエストパラメータの定義
FilesResource.ListRequestのインスタンスを作成し、ファイル一覧を取得する際に使われるリクエストパラメータを定義します。
各プロパティはListRequest Class Referenceを参照。
-
PageSize
1ページに返す最大ファイル数が指定できます。 -
Q
ファイルの検索結果をフィルタリングするためのクエリ構文を記載できます。
Google Drive APIでは、フォルダ含め全てのファイル再帰的に取ってきてしまうため、特定のファイルが欲しい場合はクエリ構文で指定する必要があります。
クエリ構文の記載はGoogle Drive APIs Search for Files and Team Drivesを参考にしました。
今回は、Google Slidesだけを取得したいので、クエリ構文でMINE Typeを指定しました。
Google Drive APIsで用意されているGoogle Drive固有のMINE Type一覧はGoogle Drive APIs Supported MINE Typesを参照。 -
Fields
取得したいファイルのフィールド属性を指定します。
指定していないフィールドを取得しようとすると、C#ではnullが返ってきます。
Google Slidesをエクスポートする
今回はGoogle Slidesを取得するため、Exportメソッドを用います。
Exportメソッドでは、ダウンロードするファイルのIDとファイル形式をMINE Typeを引数で指定します。
Googleドキュメント形式と変換形式に対応するMINE Type一覧はGoogle Drive APIs Download Filesを参照。
一般的な形式の場合はExportメソッドの代わりにGetメソッドを使ってファイルをダウンロードします。
// リクエストパラメータの定義
// service(DriveService)はユーザ認証部分なので割愛
FilesResource.ListRequest listRequest = DriveService.service.Files.List();
listRequest.PageSize = 1;
// Google Slidesのみ取得する
listRequest.Q = "mimeType = 'application/vnd.google-apps.presentation'";
listRequest.Fields = "nextPageToken, files(id, name)";
// ファイル一覧の取得
IList<Google.Apis.Drive.v3.Data.File> files = listRequest.Execute().Files;
// 例えば一番最初にとれたファイルをダウンロードする
var id = files.First().Id;
// 保存するファイル先を指定する
string saveTo = /*ファイル先*/;
// 例えばGoogle SlidesをPDF形式でダウンロードする
var request = DriveService.service.Files.Export(id, "application/pdf");
var filest = new System.IO.FileStream(Path.Combine(saveTo,files.First().Name + ".pdf"), System.IO.FileMode.Create, System.IO.FileAccess.Write);
request.Download(filest);
参考
https://www.daimto.com/download-files-from-google-drive-with-c/
https://developers.google.com/drive/v3/web/manage-downloads
https://www.milk-island.net/translate/ggd/drive/v3/web/manage-downloads.html