.NET 版 Google Drive ライブラリ

Version 1.0

もくじ

  1. はじめに
  2. ライブラリの構成
  3. 使用方法
  4. クラスの詳細
  5. サンプル
  6. ダウンロード

 

はじめに


Google Drive について

Google Drive は Google アカウント(= GMail ユーザ) を持つユーザが自由に使用できるクラウド上のストレージで最大 15GB まで無料で使用できる。通常は、ブラウザなどからアクセスするが、.NET ドライバをインストールすれば、Windows アプリケーションからも利用できる。


登録

 Google Drive を使うためには、Google Developer Console にアクセスしてプロジェクトを作成する必要がある。ページの中間あたりに "Google Apps API" グループがあるので、その中の Drive API をクリックする。



API Manager が開くので、「概要」の下にある「有効にする」ボタンをクリックする。クリックするとボタンの表示が「無効にする」に変化する(下記の画像)。



左側のメニューにある「認証情報」をクリックして認証情報画面を開く。「認証情報を作成」ボタンをクリックして "OAuth 2.0 クライアント ID" を作成する。作成したら「JSON をダウンロード」ボタンをクリックして認証情報をローカルファイルに保存しておく。



JSON ファイルは一例として、下記のような内容である。この中には認証に必要な情報がすべて含まれている。

{"installed":{
	"client_id":"316612327247-gf1d5u37jgb38cva8xevcnscj6d18u42.apps.googleusercontent.com",
	"project_id":"mykundotjp",
	"auth_uri":"https://accounts.google.com/o/oauth2/auth",
	"token_uri":"https://accounts.google.com/o/oauth2/token",
	"auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs",
	"client_secret":"bkGJ8N7rQYuJXEpaodoUl1pm",
	"redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"]
}}

ドライバのインストール

.NET から Google Drive にアクセスするためには、Visual Studio で Nuget からドライバをインストールする必要がある。詳しくは下記のページ参照。

NET Quickstart

Step.1 は上の「登録」で実施済みのはずなので、Step.2 を行う。これは Visual Studio で「ツール / Nuget パッケージマネージャ」メニュー (VS2015 の例) を実行して Nuget パッケージマネージャを表示させ、次のコマンドを実行すると必要なドライバがインストールされる。

Install-Package Google.Apis.Drive.v3

 

ライブラリの構成

ライブラリのソースファイルは次の3つのファイルから構成されている。


これらのルート名前空間は GoogleDriveClassLibrary であり、アセンブリ名も同様に GoogleDriveClassLibrary である。これらのファイルはビルドされると GoogleDriveClassLibrary.dll になる。

 

使用方法

参照設定

GoogleDriveClassLibrary.dll は Google Drive API を利用している。アプリケーションを作成するときは、以下のアセンブリ参照が必要になる。GoogleDriveClassLibrary.dll 以外は、前に述べた「ドライバのインストール」の操作が完了していれば、Visual Studio で作成したソリューションの packages にフォルダに入っているはずである。(そして参照設定も終わっているはずである)

Google Drive API 関連アセンブリが参照設定されているか確認したら、参照設定に GoogleDriveClassLibrary.dll を追加する。Google Drive API 関連アセンブリの参照設定がされていなければ、後から参照設定に追加することもできる。

必要な参照設定は次のとおりである。

ソースでは Imports (VB.NET) または using (C#) で必要なアセンブリの名前空間をインポートしておく。


認証と接続

Google Drive 接続のためには OAuth2 を使って認証を受ける必要がある。これは、Authentication モジュールの OAuth2 または OAth2Json メソッドを使って行う。OAuth2 はユーザが個別にパラメータを指定して認証を受ける場合に使用する。OAth2Json は API Manager で Google Drive アプリケーション登録したとき、JSON ファイルをダウンロードしておいた場合、その JSON ファイルを利用して認証を受ける。

認証が成功すると DriveService オブジェクトが返されるので、これをパラメータとして GoogleDriveClass の構築を行う。

Dim drive = New GoogleDriveClass(service)

メソッドの使用例はサンプルページの「認証」参照。


オブジェクト一覧の取得

Google Drive 上のオブジェクト (Google.Apis.Drive.v3.Data.File クラスのインスタンス) 一覧は GoogleDriveClass の GetFiles メソッドを使って取得できる。パラメータ search は検索条件で詳細は、https://developers.google.com/drive/v3/web/search-parameters による。spaces は検索対象空間で "drive", "appDataFolder", "photos" のどれか、またはその組み合わせ(カンマ区切り)である。

search を省略した場合、すべてのコンテンツが対象になる。また、spaces を省略した場合、すべての空間が対象になる。

Public Function GetFiles(Optional ByVal search As String = "", Optional spaces As String = "") As Data.File()

例えば、全空間でテキストファイルを検索したい場合は、次のようになる。

Dim files As Data.File()= drive.GetFiles("mimeType='text/plain'")

メソッドが返す値の型は,Google.Apis.Drive.v3.Data.File の配列である。このクラスの詳細は Google.Apis.Drive.v3.Data.File Class Reference 参照する。具体的にファイル名は Name プロパティ、MIME タイプ(ファイルの種別) は MimeType プロパティ、サイズは Size プロパティ ・・・ がよく使われる。

この他、フォルダ一覧を取得する GetFolders メソッド、指定されたフォルダに含まれるファイル一覧を取得する GetFilesInFolder メソッド、トップレベルのファイル一覧を取得する GetTopLevelFiles も利用できる。

オブジェクト一覧の取得のサンプルはサンプルページのファイル一覧を参照する。


属性の取得や判別

ファイルの属性は File オブジェクトのプロパティを調べれば取得できるが、よく使われるものは便利なようにメソッドとして用意してある。以下にその一覧を示す。(パラメータの意味などは、クラスの詳細を参照)

メソッド機能
GetId(fileName, folderId)ファイル名と所属フォルダからファイルの Id を得る。
GetId(fileObj)ファイルの Id を得る。
GetFile(Id)ファイルの Id から File オブジェクトを得る。
GetParentId(Id)ファイルの Id から親の File オブジェクトを得る。
GetMimeType(filePath)ローカルファイルの MIME タイプを得る。
IsFolder(fileObj)Google Drive ファイルがフォルダか判別する。
IsFolder(Id)Id で指定した Google Drive ファイルがフォルダか判別する。
IsGoogleDocument(Id)Id で指定したファイルが Google Docs のオブジェクトか判別する。

ダウンロード

Drive 上の通常ファイルをダウンロードするには、Download メソッドを使用する。

Public Sub Download(ByVal fileId As String, ByVal saveFolder As String)

パラメータ fileId はダウンロードするファイルの Id、saveFolder はローカルのダウンロード先フォルダである。

Google Docs のファイル (Google スプレッドシートなど) をダウンロードする場合、内部形式から外部形式に変換する必要があるため、DownloadDoc メソッドを使用する必要がある。このメソッドでは、第2パラメータとして mimeType が追加されている。ここで保存先ファイルの形式を指定する。

Public Sub DownloadDoc(ByVal fileId As String, ByVal mimeType As String, ByVal saveFolder As String)

ダウンロードのサンプル


アップロード

ファイルのアップロードは Upload メソッドを使用する。localFile はローカルファイルのパス名、uploadId はアップロード先フォルダの Id、descr はファイルの説明(省略可能)である。

Public Sub Upload(ByVal localFile As String, ByVal uploadId As String, Optional ByVal descr As String = "")

アップロードのサンプル


オブジェクトの削除

オブジェクトを削除するには Delete メソッドを使用する。fileId は削除するオブジェクトの Id である。

Public Sub Delete(ByVal fileId As String)

削除のサンプル


オブジェクトのコピー

オブジェクトをコピーするには CopyFile メソッドを使用する。srcId はコピー元のファイル Id、destFolderId はコピー先のフォルダ Id である。

Public Sub CopyFile(ByVal srcId As String, ByVal destFolderId As String)

コピーのサンプル


オブジェクトのリネーム

オブジェクトの名前を変更するには、UpdateTitle メソッドを使用する。fileId はそのファイル Id、title は新しい名前である。

Public Sub UpdateTitle(ByVal fileId As String, ByVal title As String)

リネームのサンプル

 

クラスの詳細

Authentication

機能

Authentication はGoogle Drive に接続するための認証を OAuth2 を使って行う。Authentication はモジュールであり、メソッドはインスタンスなしに使用できる。Authentication はモジュール名と同時に名前空間でもある。メソッドを使う場合は、Authentication を付加して呼び出す。


メソッド

OAuth2

OAuth2 は認証に必要なパラメータを個別に指定して Google Drive に接続する。

宣言

Public Function OAuth2(
  ByVal clientId As String,
  ByVal clientSecret As String,
  ByVal userId As String,
  ByVal dataStorePath As String,
  ByVal appName As String)
As DriveService

パラメータ

名前機能
clientIdStringクライアントID。「登録」のとき API Manager に表示される。
clientSecretStringクライアントシークレット。「登録」のとき API Manager に表示される。
userIdStringユーザID。API Manager 画面の右上に表示されている。
dataStorePathStringセッション情報を保存するパス。書き込み可能な任意のディレクトリでよい。
appNameString「登録」のとき指定したもの。

※ これらの情報は、JSON ファイルにも含まれている。


戻り値

Google Drive のサービスオブジェクトが返る。このオブジェクトを使って Google Drive に対して種々の操作を行う。


OAuth2Json

OAuth2Json は登録時にファイル保存した JSON ファイルを用いて Google Drive に接続する。

宣言

Public Function OAuth2Json(
  ByVal jsonFile As String,
  ByVal dataStorePath As String,
  ByVal appName As String
) As DriveService

パラメータ

名前機能
jsonFileStringJSON ファイルのパス名。「登録」のとき保存しておいたもの。
dataStorePathStringセッション情報を保存するパス。書き込み可能な任意のディレクトリでよい。
appNameString「登録」のとき指定したもの。

戻り値

Google Drive のサービスオブジェクトが返る。このオブジェクトを使って Google Drive に対して種々の操作を行う。


 

GoogleDriveClass

機能

GoogleDriveClass は接続後のドライブに対して各種操作を行うメソッドを有する。


フィールド

宣言機能
Public Const PROGRESS = 0非同期転送での進捗状況 (動作中)
Public Const SUCCESS = 1非同期転送での進捗状況 (成功)
Public Const FAIL = 2非同期転送での進捗状況 (失敗)
Public MyDriveId As String最上位フォルダの Id

イベント

宣言機能
Public Event NotifyDownloadStatus As Action(Of Int32)ダウンロード(またはアップロード)状況を通知する。パラメータは「フィールド」で定義されている定数のどれかを使用する。

プロパティ

なし。


コンストラクタ

宣言機能
Public Sub New(ByVal service As DriveService)Google Drive サービスオブジェクト (service) を元にオブジェクトを構築する。service は認証時に得られるオブジェクトである。

メソッド

<
宣言機能
Public Function GetFiles(Optional ByVal search As String = "", Optional spaces As String = "") As Data.File()

Google Drive から条件に基づいてファイル一覧を取得する。

パラメータ

  • search: 検索条件。 (詳しくは https://developers.google.com/drive/v3/web/search-parameters#fields)
  • spaces: 'drive', 'appDataFolder', 'photos' のどれか、またはその組み合わせ(カンマで区切る)

戻り値

Google.Apis.Drive.v3.Data.File の配列。

Public Function GetFolders(Optional ByVal parentId As String = "") As Data.File()

フォルダ一覧を取得する。

パラメータ

  • parentId: 親のID (Data.File クラスのの Id プロパティ)。省略したときは、ドライブ全体。

戻り値

Google.Apis.Drive.v3.Data.File の配列。

Public Function GetTopLevelFiles() As Data.File()

トップレベルのファイル一覧を得る。

パラメータ なし。

戻り値

Google.Apis.Drive.v3.Data.File の配列。

Public Shared Function IsFolder(ByVal fileObj As Data.File) As Boolean

Google Drive ファイルがフォルダか判別する。

パラメータ

  • fileObj: Google Drive ファイルオブジェクト

戻り値

フォルダなら True、そうでないなら False

Public Function GetId(ByVal title As String, ByVal folderId As String) As Data.File

タイトルとフォルダからGoogle Drive ファイルを得る。

パラメータ

  • title: ファイル名
  • folderId: フォルダの Id

戻り値

Google Drive ファイルオブジェクト

Public Function GetId(ByVal file As Data.File) As String

Google Drive ファイルオブジェクトの Id を得る。

パラメータ

  • file: Google Drive のファイルオブジェクト

戻り値

Google Drive ファイルオブジェクトの Id

Public Function GetFile(ByVal id As String) As Data.File

ファイル Id からファイルオブジェクトを得る。

パラメータ

  • id: Google Drive のファイルオブジェクトの Id

戻り値

Google Drive ファイルオブジェクト

Public Function GetParentId(ByVal id As String) As String

ファイル Id から親の Id を得る。

パラメータ

  • id: Google Drive のファイルオブジェクトの Id

戻り値

Google Drive ファイルオブジェクト Id

Public Function GetMimeType(ByVal filePath As String) As String

ファイルのMIMEタイプを得る。

パラメータ

  • filePath: ローカルファイルのパス名

戻り値

ファイルのMIMEタイプ

Public Function IsFolder(ByVal fileId As String) As Boolean

ファイルIdで指定したファイルがフォルダならTrueを返す。

パラメータ

  • fileId: Google Drive ファイルの Id

戻り値

フォルダなら True、そうでないなら False。

Public Function IsGoogleDocument(ByVal fileId As String) As Boolean

Google Docsなら True を返す。ここで、Google Docs とは 「Google ドキュメント」、「Google スプレッドシート」、「Google スライド」等を意味し、Google ドライブページで作成したオブジェクトのことである。

パラメータ

  • fileId: Google Drive ファイルの Id

戻り値

Google Docs なら True、そうでないなら False。

Public Sub Download(ByVal fileId As String, ByVal saveFolder As String)

ファイルをダウンロードする。

パラメータ

  • fileId: Google Drive ファイルの Id
  • saveFolder: ローカルの保存先フォルダ
Public Sub DownloadDoc(ByVal fileId As String, ByVal mimeType As String, ByVal saveFolder As String)

Google Docs で作成したドキュメントをダウンロードする。

パラメータ

  • fileId: Google Drive ファイルの Id
  • mimeType: そのファイルの MIME タイプ
  • saveFolder: ローカルの保存先フォルダ
Public Sub Upload(ByVal localFile As String, ByVal uploadId As String, Optional ByVal descr As String = "")

ファイルをアップロードする。

パラメータ

  • localFile: アップロードするローカルファイルのパス名
  • uploadId: アップロード先のGoogle DriveフォルダのId
  • descr: このファイルの説明 (Option)
Public Sub Delete(ByVal fileId As String)

ファイルを削除する。

パラメータ

  • fileId: Google Drive ファイルの Id
Public Sub Update(ByVal fileId As String, ByVal localFile As String, ByVal parentId As String, Optional descr As String = "")

ファイル内容を更新する。

パラメータ

  • fileId: 更新する Google Drive ファイルの Id
  • localFile: 更新元のローカルファイルのパス名
  • parentId: フォルダのId
  • descr: このファイルの説明 (Option)
Public Sub UpdateTitle(ByVal fileId As String, ByVal title As String)

ファイル名を変更する。

パラメータ

  • fileId: 変更する Google Drive ファイルの Id
  • title: 新しいファイル名。
Public Sub MoveFolder(ByVal fileId As String, ByVal folderId As String)

ファイルのフォルダを変更する。

パラメータ

  • fileId: 変更する Google Drive ファイルの Id
  • folderId: 新しいフォルダの Id。
Public Sub CopyFile(ByVal srcId As String, ByVal destFolderId As String)

ファイルをコピーする。同じ名前のファイルがある場合は上書きされる。

パラメータ

  • srcId: コピー元ファイルの Id
  • destFolderId: コピー先フォルダの Id。
Public Function Exists(ByVal title As String, ByVal folderId As String) As String

指定フォルダにパラメータで指定した名前のファイルがあるか確認する。存在する場合はその Id を返す。

パラメータ

  • title: ファイルの名前
  • folderId: 確認先フォルダの Id。

戻り値

存在する場合はそのファイルの Id。存在しない場合は、String.Empty を返す。

Public Function CreateFolder(ByVal title As String, ByVal parentId As String, Optional ByVal descr As String = "") As Data.File

フォルダを作成する。

パラメータ

  • title: フォルダの名前
  • parentId: 親のId
  • descr: このフォルダの説明 (Option)

戻り値

作成できた場合はその Google Drive ファイルオブジェクト。

Public Function IsRoot(ByVal fileId As String) As Boolean

ファイルが最上位フォルダに存在する場合 True を返す。

パラメータ

  • fileId: Google Drive ファイルの Id

戻り値

最上位フォルダに存在する場合 True、そうでなければ False。


 

ModuleCommon

機能

ModuleCommon は GoogleDriveClassLibrary 名前空間の共通オブジェクトを保持するモジュールである。


列挙体

宣言
Public Enum MimeKind
    Documents
    Spreadsheets
    Drawings
    Presentations
    AppsScripts
End Enum

フィールドの意味
フィールド意味
DocumentsGoogle Docs ドキュメント
SpreadsheetsGoogle Docs スプレッドシート
DrawingsGoogle Docs 図形描画
PresentationsGoogle Docs スライド
AppsScriptsGoogle Apps スクリプト

プロパティ

宣言機能
Public Property Service As DriveService認証されたとき返される Google Drive サービスオブジェクト
Public Property DriveObj As GoogleDriveClassGoogle Drive サービスオブジェクトの操作を行うヘルパーオブジェクト
Public Property JsonFile As String認証 JSON ファイル
Public Property AppName As Stringこのアプリケーションの名前
Public Property DataStore As Stringセッションデータを保存するフォルダのパス
Public Property CopyStack As Stack(Of String)コピースタック(ワーク用)

メソッド

宣言機能
Public Function GetAppDir() As Stringアプリケーションの実行フォルダを返す。 (Windows Forms アプリケーションの場合)
Public Function GetDownloadDir() As Stringダウンロードフォルダを返す。
Public Function ListMimeTypes(ByVal kind As MimeKind) As Dictionary(Of String, String)

MimeKind 列挙体で指定した MIME 種別の MIME タイプを列挙する。

パラメータ

  • kind: MimeKind 列挙体 の MIME 種別

戻り値

キーが通称、値が MIME タイプであるような連想配列。

Public Function GetExtensionByMimeType(ByVal mime As String) As String

MIME タイプ別のファイルの拡張子を得る。

パラメータ

  • mime: MIME タイプ

戻り値

MIME タイプに対応するドットを含む拡張子。

Public Function GetDriveMimeType(ByVal name As String) As String

Google Drive の MIME タイプを得る。

パラメータ

  • name: MIME タイプの名前。例: audio

戻り値

MIME タイプ。例: application/vnd.google-apps.audio


 

 

[TOP]

まいあおそふと