Google API 第29回

投稿者: | 2016年5月2日

今回は前回に引き続きGoogle Drive APIについてで、
JavaScriptを用いたリクエストの詳細な使い方を説明します。

JavaScriptを用いたAPIのリクエストには
About、Files、Comments、Replies、Permissions、Revisions、Changes、Channels
という種類があり、それぞれ違う機能を持っています。

今回はAboutとFilesを用いたリクエストの仕方について説明します。

まずはリクエストについてです。
リクエストは前回のコードでいう所の
var req = gapi.client.drive.files.list({});の部分です。
この部分を書き換えることにより、様々なリクエストを行うことができます。

これからAboutとFilesを用いたリクエストとリクエストの結果について説明していきます。

■About
Aboutを用いたリクエストではユーザー、ユーザーのドライブ、システム機能に関する情報を
取得することができます。

1.リクエスト
Aboutを用いてリクエストをするには下記のメソッドを使用します。
gapi.client.drive.about.get()

gapi.client.drive.about.get()を使う場合、取得するfieldsを1つ以上指定する必要があります。
gapi.client.drive.about.get({‘fields’: ‘user’});
フィールドを複数指定する場合、カンマで区切りを入れます。
gapi.client.drive.about.get({‘fields’: ‘user, kind’});

2.リクエストの結果
全てのフィールドを指定したリクエスト結果は下記の通りです。
userにはユーザーの情報、storageQuotaにはユーザーのドライブの情報、
それ以外はシステム機能に関する情報が取得できています。
まずuser内のパラメータについて説明します。
user.kindは常にdrive#userという文言です。
user.displayNameはユーザー名です。
user.meはこのユーザーがリクエストしたかどうかをtrueまたはfalseで表示します。
user.permissionIdはアクセス許可されたユーザーのIDです。
user.emailAddressはユーザーのメールアドレスです。
次にstorageQuota内のパラメータについて説明します。
storageQuota.limitはGoogleドライブの使用上限です。
storageQuota.usageはGoogleドライブの総使用量です。
storageQuota.usageInDriveはGoogleドライブ内のファイルの使用量です。
storageQuota.usageInDriveTrashはGoogleドライブ内のゴミ箱にあるファイルの使用量です。
最後にuserとstorageQuota以外のパラメータは、
主にGoogleドライブでサポートされている拡張子の情報です。

{
 "kind": "drive#about",
 "user": {
  "kind": "drive#user",
  "displayName": "○○○○",
  "me": true,
  "permissionId": "000000000000000xxxxx",
  "emailAddress": "xxxxxxxxxxxxxxx@gmail.com"
 },
 "storageQuota": {
  "limit": "16106127360",
  "usage": "210967840",
  "usageInDrive": "126638",
  "usageInDriveTrash": "74734"
 },
 "importFormats": {
  "application/x-vnd.oasis.opendocument.presentation": [
   "application/vnd.google-apps.presentation"
  ],
  "text/tab-separated-values": [
   "application/vnd.google-apps.spreadsheet"
  ],
  "image/jpeg": [
   "application/vnd.google-apps.document"
  ],
  "image/bmp": [
   "application/vnd.google-apps.document"
  ],
  "image/gif": [
   "application/vnd.google-apps.document"
  ],
  "application/vnd.ms-excel.sheet.macroenabled.12": [
   "application/vnd.google-apps.spreadsheet"
  ],
  "application/vnd.openxmlformats-officedocument.wordprocessingml.template": [
   "application/vnd.google-apps.document"
  ],
  "application/vnd.ms-powerpoint.presentation.macroenabled.12": [
   "application/vnd.google-apps.presentation"
  ],
  "application/vnd.ms-word.template.macroenabled.12": [
   "application/vnd.google-apps.document"
  ],
  "application/vnd.openxmlformats-officedocument.wordprocessingml.document": [
   "application/vnd.google-apps.document"
  ],
  "image/pjpeg": [
   "application/vnd.google-apps.document"
  ],
  "application/vnd.google-apps.script+text/plain": [
   "application/vnd.google-apps.script"
  ],
  "application/vnd.ms-excel": [
   "application/vnd.google-apps.spreadsheet"
  ],
  "application/vnd.sun.xml.writer": [
   "application/vnd.google-apps.document"
  ],
  "application/vnd.ms-word.document.macroenabled.12": [
   "application/vnd.google-apps.document"
  ],
  "application/vnd.ms-powerpoint.slideshow.macroenabled.12": [
   "application/vnd.google-apps.presentation"
  ],
  "text/rtf": [
   "application/vnd.google-apps.document"
  ],
  "text/plain": [
   "application/vnd.google-apps.document"
  ],
  "application/vnd.oasis.opendocument.spreadsheet": [
   "application/vnd.google-apps.spreadsheet"
  ],
  "application/x-vnd.oasis.opendocument.spreadsheet": [
   "application/vnd.google-apps.spreadsheet"
  ],
  "image/png": [
   "application/vnd.google-apps.document"
  ],
  "application/x-vnd.oasis.opendocument.text": [
   "application/vnd.google-apps.document"
  ],
  "application/msword": [
   "application/vnd.google-apps.document"
  ],
  "application/pdf": [
   "application/vnd.google-apps.document"
  ],
  "application/json": [
   "application/vnd.google-apps.script"
  ],
  "application/x-msmetafile": [
   "application/vnd.google-apps.drawing"
  ],
  "application/vnd.openxmlformats-officedocument.spreadsheetml.template": [
   "application/vnd.google-apps.spreadsheet"
  ],
  "application/vnd.ms-powerpoint": [
   "application/vnd.google-apps.presentation"
  ],
  "application/vnd.ms-excel.template.macroenabled.12": [
   "application/vnd.google-apps.spreadsheet"
  ],
  "image/x-bmp": [
   "application/vnd.google-apps.document"
  ],
  "application/rtf": [
   "application/vnd.google-apps.document"
  ],
  "application/vnd.openxmlformats-officedocument.presentationml.template": [
   "application/vnd.google-apps.presentation"
  ],
  "image/x-png": [
   "application/vnd.google-apps.document"
  ],
  "text/html": [
   "application/vnd.google-apps.document"
  ],
  "application/vnd.oasis.opendocument.text": [
   "application/vnd.google-apps.document"
  ],
  "application/vnd.openxmlformats-officedocument.presentationml.presentation": [
   "application/vnd.google-apps.presentation"
  ],
  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": [
   "application/vnd.google-apps.spreadsheet"
  ],
  "application/vnd.google-apps.script+json": [
   "application/vnd.google-apps.script"
  ],
  "application/vnd.openxmlformats-officedocument.presentationml.slideshow": [
   "application/vnd.google-apps.presentation"
  ],
  "application/vnd.ms-powerpoint.template.macroenabled.12": [
   "application/vnd.google-apps.presentation"
  ],
  "text/csv": [
   "application/vnd.google-apps.spreadsheet"
  ],
  "application/vnd.oasis.opendocument.presentation": [
   "application/vnd.google-apps.presentation"
  ],
  "image/jpg": [
   "application/vnd.google-apps.document"
  ],
  "text/richtext": [
   "application/vnd.google-apps.document"
  ]
 },
 "exportFormats": {
  "application/vnd.google-apps.form": [
   "application/zip"
  ],
  "application/vnd.google-apps.document": [
   "application/rtf",
   "application/vnd.oasis.opendocument.text",
   "text/html",
   "application/pdf",
   "application/zip",
   "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
   "text/plain"
  ],
  "application/vnd.google-apps.drawing": [
   "image/svg+xml",
   "image/png",
   "application/pdf",
   "image/jpeg"
  ],
  "application/vnd.google-apps.spreadsheet": [
   "text/csv",
   "application/x-vnd.oasis.opendocument.spreadsheet",
   "application/zip",
   "application/pdf",
   "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
  ],
  "application/vnd.google-apps.script": [
   "application/vnd.google-apps.script+json"
  ],
  "application/vnd.google-apps.presentation": [
   "application/vnd.openxmlformats-officedocument.presentationml.presentation",
   "application/pdf",
   "text/plain"
  ]
 },
 "maxImportSizes": {
  "application/vnd.google-apps.document": "10485760",
  "application/vnd.google-apps.spreadsheet": "104857600",
  "application/vnd.google-apps.presentation": "104857600",
  "application/vnd.google-apps.drawing": "2097152"
 },
 "maxUploadSize": "5242880000000",
 "appInstalled": false,
 "folderColorPalette": [
  "#ac725e",
  "#d06b64",
  "#f83a22",
  "#fa573c",
  "#ff7537",
  "#ffad46",
  "#fad165",
  "#fbe983",
  "#b3dc6c",
  "#7bd148",
  "#16a765",
  "#42d692",
  "#92e1c0",
  "#9fe1e7",
  "#9fc6e7",
  "#4986e7",
  "#9a9cff",
  "#b99aff",
  "#a47ae2",
  "#cd74e6",
  "#f691b2",
  "#cca6ac",
  "#cabdbf",
  "#8f8f8f"
 ]
}

■Files
Filesを用いたリクエストではファイルの追加、削除などファイルに関する操作ができます。

1.リクエストとリクエストの結果
Filesを用いてリクエストをするには下記のメソッドを使用します。
gapi.client.drive.files.create()・・・作成
gapi.client.drive.files.copy()・・・複製
gapi.client.drive.files.update()・・・更新
gapi.client.drive.files.delete()・・・ごみ箱へ移動せず完全削除
gapi.client.drive.files.emptyTrash()・・・ごみ箱から完全削除
gapi.client.drive.files.export()・・・ダウンロード
gapi.client.drive.files.generatelds()・・・過去に作成されたIDの一覧を取得
gapi.client.drive.files.get()・・・取得
gapi.client.drive.files.list()・・・一覧を取得
gapi.client.drive.files.watch()・・・ファイルの変更を通知

・createの場合
gapi.client.drive.files.create()を使う場合、作成したいファイルをパラメータで指定します。
gapi.client.drive.files.create({‘name’: ‘ファイル名create’, ‘description’ : ‘説明create’});
必要であればkeepRevisionForever、ocrLanguageを設定できます。
keepRevisionForeverは最新のリビジョンに、前のリビジョンの内容を保持するよう設定するかどうか。
この設定はバイナリコンテンツのみに適用されます。デフォルトはfalseです。
ocrLanguageはイメージのインポート時に使用されるOCR処理用の言語です。日本語はjaです。
※参考サイトのISO 639-1コード一覧を参照してください。

リクエスト結果は下記の通りです。
赤で囲んでいる部分はリクエスト時に設定したファイル名と説明です。
青で囲んでいる部分はアプリ名です。クライアントID作成時の名前が反映されます。
google_api29-1

・copyの場合
gapi.client.drive.files.copy()を使う場合、コピーするファイルのfileIdが必要になります。
gapi.client.drive.files.copy({‘fileId’: ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXX’});
コピー時にファイル名や説明などを変更することができます。
gapi.client.drive.files.copy({‘fileId’: ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXX’, ‘name’: ‘ファイル名copy’, ‘description’ : ‘説明copy’});
必要であればkeepRevisionForever、ocrLanguageを設定できます。

リクエスト結果は下記の通りです。
赤で囲んでいる部分はリクエスト時に設定したファイル名と説明です。
※createで作成したファイルをcopyしています。
google_api29-2

・updateの場合
gapi.client.drive.files.update()を使う場合、取得するファイルのfileIdと更新したいパラメータが必要になります。
gapi.client.drive.files.update({‘fileId’: ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXX’, ‘name’: ‘ファイル名update’, ‘description’ : ‘説明update’});

リクエスト結果は下記の通りです。
赤で囲んでいる部分はリクエスト時に設定したファイル名と説明です。
※copyで作成したファイルをupdateしています。
google_api29-3

・deleteの場合
gapi.client.drive.files.delete()を使う場合、削除したいファイルのfileIdが必要になります。
gapi.client.drive.files.delete({‘fileId’: ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXX’});

リクエスト結果は下記の通りです。
赤で囲んでいる部分はリクエスト時に削除されたファイルです。
ゴミ箱に移動せず完全に削除されます。
google_api29-4

・emptyTrashの場合
gapi.client.drive.files.emptyTrash()を使う場合、必要なパラメータはありません。
gapi.client.drive.files.emptyTrash();を実行するだけです。

リクエスト結果は下記の通りです。
赤で囲んでいる部分はリクエスト時に削除されたファイルです。
ゴミ箱から完全に削除されます。
google_api29-5

・exportの場合
gapi.client.drive.files.export()を使う場合、ダウンロードするファイルのfileIdとmimeTypeが必要になります。
現在、不具合により使えません。

・generateldsの場合
gapi.client.drive.files.generatelds()を使う場合、必要なパラメータはありません。
gapi.client.drive.files.generatelds();を実行するだけです。
必要であればcountのパラメータを設定できます。
countはIDを取得する数で1000まで設定できます。デフォルトは10です。

リクエスト結果は下記の通りです。
過去に作成されたIDがリストとして取得されます。

{
 "kind": "drive#generatedIds",
 "space": "drive",
 "ids": [
  "0B3lU0NaZPwRZWVFEWENfQmxxxxx",
  "0B3lU0NaZPwRZUlZGdkd5SWxxxxx",
  "0B3lU0NaZPwRZeVlaUEhYWExxxxx",
  "0B3lU0NaZPwRZLUFSSkdXYXxxxxx",
  "0B3lU0NaZPwRZN20xcGlIUExxxxx",
  "0B3lU0NaZPwRZMFBiLTE0Tmxxxxx",
  "0B3lU0NaZPwRZUjlMZW55NVxxxxx",
  "0B3lU0NaZPwRZQ1lxMzdsWTxxxxx",
  "0B3lU0NaZPwRZRXVaOF92Zmxxxxx",
  "0B3lU0NaZPwRZcmFaZGRlbXxxxxx"
 ]
}

・listの場合
gapi.client.drive.files.list()を使う場合、必要なパラメータはありません。
gapi.client.drive.files.list();を実行するだけです。
必要であればcorpus、orderBy、qを設定できます。
corpusはファイルがドメインまたはユーザーに共有されているかの設定で、domainまたはuserが設定できます。
orderByはフィールドをカンマ区切りで設定することで昇順に並ばせることができます。
またフィールドの後にDESCをつけることで降順に並ばせることもできます。
qはリクエストの結果をフィルタリングするためのクエリです。文字列を設定できます。

フィールドを指定しないリクエスト結果は下記の通りです。
最小限の情報のみが取得されます。
files[].kindは常にdrive#fileListという文言です。
files[].idはファイルのIDです。
files[].nameはファイル名です。
files[].mimTypeはファイルのMIMEタイプです。

{
 "kind": "drive#fileList",
 "files": [
  {
   "kind": "drive#file",
   "id": "0B3gdltLSXnCsc0lGRVpnUmxxxxx",
   "name": "テスト1",
   "mimeType": "text/plain"
  },
  {
   "kind": "drive#file",
   "id": "0B3gdltLSXnCsMFdraVJad1xxxxx",
   "name": "テスト2",
   "mimeType": "application/x-zip-compressed"
  },
...
  {
 ]
}

・getの場合
gapi.client.drive.files.get()を使う場合、取得するファイルのfileIdとfieldsが1つ以上必要になります。
gapi.client.drive.files.get({‘fileId’: ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXX’, ‘fields’: ‘id’});

全てのフィールドを指定したリクエストの結果は下記の通りです。
ファイルの情報はfilesに格納されています。
ファイルの全ての情報を説明していると長くなってしまうため
リンクについての説明に留めておきます。
files[].webContentLinkはファイルをダウンロードするためのリンクです。
所有者しかファイルをダウンロードできません。
files[].webViewLinkはファイルの中身を閲覧するためのリンクです。
基本は所有者しか閲覧できませんが、
他者でも所有者から閲覧権限を貰うことにより閲覧できるようになります。
files[].iconLinkはアイコンのリンクです。
files[].thumbnailLinkはサムネイルを閲覧するためのリンクです。
所有者しか閲覧できません。

{
 "kind": "drive#fileList",
 "files": [
  {
   "kind": "drive#file",
   "id": "0B3lU0NaZPwRZQWFuTWlmNExxxxx",
   "name": "getDesert.jpg",
   "mimeType": "image/jpeg",
   "starred": false,
   "trashed": false,
   "explicitlyTrashed": false,
   "parents": [
    "0AHlU0NaZPwRZUxxxxx"
   ],
   "spaces": [
    "drive"
   ],
   "version": "4704",
   "webContentLink": "https://docs.google.com/uc?id=0B3lU0NaZPwRZQWFuTWlmNExxxxx&export=download",
   "webViewLink": "https://drive.google.com/file/d/0B3lU0NaZPwRZQWFuTWlmNExxxxx/view?usp=drivesdk",
   "iconLink": "https://ssl.gstatic.com/docs/doclist/images/icon_11_imagexxxxx.png",
   "thumbnailLink": "https://lh6.googleusercontent.com/6q564rmDbO99IvGzpmSvDRuKjgSKAIXo64EFiknl8GTUB-m8_QiIDS4aJu26I0AjCxxxxx=s220",
   "viewedByMe": true,
   "viewedByMeTime": "2016-04-26T08:16:12.983Z",
   "createdTime": "2016-04-26T08:16:12.983Z",
   "modifiedTime": "2016-04-26T08:16:36.445Z",
   "modifiedByMeTime": "2016-04-26T08:16:36.445Z",
   "owners": [
    {
     "kind": "drive#user",
     "displayName": "○○○○",
     "photoLink": "https://lh4.googleusercontent.com/-yQ6I-0rupAw/AAAAAAAAAAI/AAAAAAAAABo/sRI_c7zUQJc/s64/photo.jpg",
     "me": true,
     "permissionId": "074162983433361xxxxx",
     "emailAddress": "xxxxxxxxxx@gmail.com"
    }
   ],
   "lastModifyingUser": {
    "kind": "drive#user",
    "displayName": "○○○○",
    "photoLink": "https://lh4.googleusercontent.com/-yQ6I-0rupAw/AAAAAAAAAAI/AAAAAAAAABo/sRI_c7zUQJc/s64/photo.jpg",
    "me": true,
    "permissionId": "074162983433361xxxxx",
    "emailAddress": "xxxxxxxxxx@gmail.com"
   },
   "shared": false,
   "ownedByMe": true,
   "capabilities": {
    "canEdit": true,
    "canComment": true,
    "canShare": true,
    "canCopy": true,
    "canReadRevisions": true
   },
   "viewersCanCopyContent": true,
   "writersCanShare": true,
   "permissions": [
    {
     "kind": "drive#permission",
     "id": "074162983433361xxxxx",
     "type": "user",
     "emailAddress": "xxxxxxxxxx@gmail.com",
     "role": "owner",
     "displayName": "○○○○",
     "photoLink": "https://lh4.googleusercontent.com/-yQ6I-0rupAw/AAAAAAAAAAI/AAAAAAAAABo/sRI_c7zUQJc/s64/xxxxx.jpg"
    }
   ],
   "originalFilename": "Desert.jpg",
   "fullFileExtension": "jpg",
   "fileExtension": "jpg",
   "md5Checksum": "ba45c8f60456a672e003a875e469d0eb",
   "size": "845941",
   "quotaBytesUsed": "845941",
   "headRevisionId": "0B3lU0NaZPwRZZzdPYnE0R0tnbHp4Nzh1eDUrVENZR2U0bxxxxx",
   "imageMediaMetadata": {
    "width": 1024,
    "height": 768,
    "rotation": 0,
    "time": "2009:03:12 13:47:43"
   },
   "isAppAuthorized": false
  }
 ]
}

・watchの場合
watchに関しては用途が特殊な為省略します。

以上がAboutとFilesを用いたリクエストの仕方です。

ユーザーに関する情報の取得とファイルの操作は
Google Drive APIでは基本となる操作になるのでおさえておきましょう。
基本をおさえておけば、特定のファイルをリストで取得しファイル名に連番をつけたり、
取得したファイルをまとめて共有にしたりと応用が利くようになります。

Google Drive APIの操作性が知りたい場合は
参考サイトのAPIs Explorer Drive API v3にアクセスしてみてください。
実際のリクエストとリクエストの結果がどのようになるのかがよくわかると思います。

次回は、Google Drive APIのCommentsとRepliesを用いたリクエストについて紹介します。

<参考サイト>
Google Drive APIのリファレンス
APIs Explorer Drive API v3

<付録>
・ファイルを作成する簡単なサンプル
※使用する際はCLIENT_IDを自身で作成したクライアントIDに置き換えてください。