Google API 第30回

投稿者: | 2016年5月27日

前回に引き続き、Google Drive APIについてです。
今回はCommentsとRepliesを用いたリクエストについて紹介します。

■Comments
Commentsを用いたリクエストでは、ファイルにコメントを付加することができます。

○リクエストと結果
Commentsを用いてリクエストをするには下記のメソッドを使用します。
gapi.client.drive.comments.create()・・・ファイルにコメントを付加
gapi.client.drive.comments.update()・・・ファイルのコメントを更新
gapi.client.drive.comments.delete()・・・ファイルのコメントを削除
gapi.client.drive.comments.list()・・・ファイルのコメントを一覧で取得
gapi.client.drive.comments.get()・・・ファイルのコメントを取得

・createの場合
gapi.client.drive.comments.create()を使う場合、コメントを付加したいファイルのfileIdと
ファイルに付加するコメントの内容、リクエスト結果を取得するためのfieidsが必要になります。
gapi.client.drive.comments.create({‘fileId’: ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXX’, ‘content’ : ‘コメントcreate’, ‘fields’: ‘id, content’);

リクエストの結果は下記の通りです。
赤で囲んでいる部分はリクエスト時に設定したコメントです。
google_api30-1

・updateの場合
gapi.client.drive.comments.update()を使う場合、更新したいコメントが付加されているファイルのfileIdと
更新したいコメントのcommentId、更新したいコメントの内容、リクエスト結果を取得するためのfieidsが
必要になります。
gapi.client.drive.comments.update({‘fileId’: ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXX’, ‘commentId’ : ‘YYYYYYYYYYY’, ‘content’ : ‘コメントupdate’, ‘fields’: ‘id, content’});

リクエスト結果は下記の通りです。
赤で囲んでいる部分はリクエスト時に設定したコメントです。
google_api30-2

・deleteの場合
gapi.client.drive.comments.delete()を使う場合、削除したいコメントが付加されているファイルのfileIdと
削除したいコメントのcommentIdが必要になります。
gapi.client.drive.comments.delete({‘fileId’: ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXX’, ‘commentId’ : ‘YYYYYYYYYYY’});

リクエスト結果は下記の通りです。
赤で囲んでいる部分にあったコメントのタブがなくなっています。
コメントが全てなくなるとコメントのタブが消えるようです。
google_api30-3

間違って削除してしまったコメントはupdateメソッドで復元することができます。
更新時にdeletedの値をfalseにするにことでコメントが復元されます。
gapi.client.drive.comments.update({‘fileId’: ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXX’, ‘commentId’: ‘YYYYYYYYYYY’, ‘content’: ‘コメント復元’, ‘deleted’: false, ‘fields’: ‘id, content’});

・listの場合
gapi.client.drive.comments.list()を使う場合、コメントの一覧を取得するファイルのfileIdと
リクエスト結果を取得するためのfieidsが必要になります。
gapi.client.drive.comments.list({‘fileId’: ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXX’, ‘fieids’ : ‘id’}});
必要であればincludeDeleted、pageSizeを設定できます。
includeDeletedは削除されたコメントを含めるかどうかを示します。
デフォルトはfalseです。trueにすることで削除されたコメントがリクエスト結果に含まれるようになります。
pageSizeはコメントを取得する数で100まで設定できます。デフォルトは20です。

全てのフィールドを指定したリクエストの結果は下記の通りです。
コメントの情報はcommentsに格納されています。
comments[].kindは常にdrive#commentという文言です。
comments[].idはコメントのIDです。コメントの更新、削除に使用されます。
comments[].createdTimeはコメントがファイルに付加された日付です。
comments[].modifiedTimeはコメントが更新された日付です。
comments[].author.kindは常にdrive#userという文言です。
comments[].author.displayNameはコメントを作成したユーザーの名前です。
comments[].author.photoLinkはコメントを作成したユーザーの写真へのリンクです。
comments[].author.meはコメントを作成したユーザーが本人であるかどうかを示します。
comments[].htmlContentはHTML形式で表したコメントです。
comments[].contentはファイルに付加したコメントです。
comments[].deletedはコメントが削除されているかどうかを示します。
comments[].resolvedはコメントが返信により解決されたかどうかを示します。
comments[].repliesはコメントに対する返信のコメントのリストです。

{
 "kind": "drive#commentList",
 "comments": [
  {
   "kind": "drive#comment",
   "id": "AAAAAxxxxxx",
   "createdTime": "2016-05-16T09:02:09.865Z",
   "modifiedTime": "2016-05-16T09:10:03.085Z",
   "author": {
    "kind": "drive#user",
    "displayName": "○○○○",
    "photoLink": "//lh4.googleusercontent.com/-yQ6I-0rupAw/AAAAAAAAAAI/AAAAAAAAABo/xxxxxxxxxxx/xxxxxxxx/photo.jpg",
    "me": true
   },
   "htmlContent": "コメントupdate",
   "content": "コメントupdate",
   "deleted": false,
   "resolved": false,
   "replies": [
   ]
  },
  {
   "kind": "drive#comment",
   "id": "AAAAAxxxxxx",
   "createdTime": "2016-05-16T09:01:58.862Z",
   "modifiedTime": "2016-05-16T09:01:58.862Z",
   "author": {
    "kind": "drive#user",
    "displayName": "○○○○",
    "photoLink": "//lh4.googleusercontent.com/-yQ6I-0rupAw/AAAAAAAAAAI/AAAAAAAAABo/xxxxxxxxxxx/xxxxxxxx/photo.jpg",
    "me": true
   },
   "htmlContent": "コメントcreate",
   "content": "コメントcreate",
   "deleted": false,
   "resolved": false,
   "replies": [
   ]
  }
 ]
}

・getの場合
gapi.client.drive.comments.get()を使う場合、取得したいコメントが付加されているファイルのfileIdと
取得したいコメントのcommentId、リクエスト結果を取得するためのfieidsが必要になります。
gapi.client.drive.comments.get({‘fileId’: ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXX’, ‘commentId’ : ‘YYYYYYYYYYY’, ‘fields’: ‘id, content’});

全てのフィールドを指定したリクエストの結果は下記の通りです。
取得した情報はlistで取得したcomments[]の内容と同じなので説明を省きます。

{
 "kind": "drive#comment",
 "id": "AAAAAxxxxxx",
 "createdTime": "2016-05-17T01:50:10.692Z",
 "modifiedTime": "2016-05-17T01:50:10.692Z",
 "author": {
  "kind": "drive#user",
  "displayName": "○○○○",
  "photoLink": "//lh4.googleusercontent.com/-yQ6I-0rupAw/AAAAAAAAAAI/AAAAAAAAABo/xxxxxxxxxxx/xxxxxxxx/photo.jpg",
  "me": true
 },
 "htmlContent": "コメントupdate",
 "content": "コメントupdate",
 "deleted": false,
 "replies": [
 ]
}

■Replies
Repliesを用いたリクエストでは、ファイルのコメントに返信内容を付加することができます。

○リクエストと結果
Commentsを用いてリクエストをするには下記のメソッドを使用します。
gapi.client.drive.replies.create()・・・コメントに返信内容を付加
gapi.client.drive.replies.update()・・・コメントの返信内容を更新
gapi.client.drive.replies.delete()・・・コメントの返信内容を削除
gapi.client.drive.replies.list()・・・コメントの返信内容を一覧で取得
gapi.client.drive.replies.get()・・・コメントの返信内容を取得

・createの場合
gapi.client.drive.replies.create()を使う場合、コメントが付加されているファイルのfileIdと
コメントのcommentId、付加したい返信内容、リクエスト結果を取得するためのfieidsが必要になります。
gapi.client.drive.replies.create({‘fileId’: ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXX’, ‘commentId’: ‘YYYYYYYYYYY’, ‘content’: ‘返信コメントcreate’, ‘fields’: ‘id, content’);

リクエストの結果は下記の通りです。
赤で囲んでいる部分はリクエスト時に設定した返信内容です。
google_api30-4

・updateの場合
gapi.client.drive.replies.update()を使う場合、更新したい返信内容が付加されているファイルのfileIdと
更新したい返信内容が付加されているコメントのcommentIdと更新したい返信内容のreplyId、
更新したい返信内容、リクエスト結果を取得するためのfieidsが必要になります。
gapi.client.drive.replies.update({‘fileId’: ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXX’, ‘commentId’ : ‘YYYYYYYYYYY’, ‘replyId’: ‘ZZZZZZZZZZZ’, ‘content’ : ‘返信コメントupdate’, ‘fields’: ‘id, content’});

リクエスト結果は下記の通りです。
赤で囲んでいる部分はリクエスト時に設定した返信内容です。
※createで付加した返信内容をupdateしています。
google_api30-5

・deleteの場合
gapi.client.drive.replies.delete()を使う場合、削除したい返信内容が付加されているファイルのfileIdと
削除したい返信内容が付加されているコメントのcommentIdと削除したい返信内容のreplyIdが必要になります。
gapi.client.drive.replies.delete({‘fileId’: ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXX’, ‘commentId’: ‘YYYYYYYYYYY’, ‘replyId’: ‘ZZZZZZZZZZZ’});

リクエスト結果は下記の通りです。
赤で囲んでいる部分はリクエスト時に削除された内容です。
返信内容が消えているのがわかると思います。
google_api30-6

間違って削除してしまった返信内容はupdateで復元することができます。
更新時にdeletedの値をfalseにするにことで返信内容が復元されます。
gapi.client.drive.replies.update({‘fileId’: ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXX’, ‘commentId’: ‘YYYYYYYYYYY’, ‘replyId’: ‘ZZZZZZZZZZZ’, ‘content’: ‘返信内容復元’, ‘deleted’: false, ‘fields’: ‘id, content’});

・listの場合
gapi.client.drive.replies.list()を使う場合、返信内容の一覧を取得するファイルのfileIdと
返信内容が付加されているコメントのcommentId、リクエスト結果を取得するためのfieidsが必要になります。
gapi.client.drive.replies.list({‘fileId’: ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXX’, ‘commentId’: ‘YYYYYYYYYYY’, ‘fieids’ : ‘id’}});
必要であればincludeDeleted、pageSizeを設定できます。
includeDeleted、pageSizeの説明は上記で行っているので省きます。

全てのフィールドを指定したリクエストの結果は下記の通りです。
コメントの情報はrepliesに格納されています。
replies[].kindは常にdrive#replyという文言です。
replies[].idは返信内容のIDです。返信内容の更新、削除に使用されます。
replies[].createdTimeは返信内容がファイルに付加された日付です。
replies[].modifiedTimeは返信内容が更新された日付です。
replies[].author.kindは常にdrive#userという文言です。
replies[].author.displayNameは返信内容を作成したユーザーの名前です。
replies[].author.photoLinkは返信内容を作成したユーザーの写真へのリンクです。
replies[].author.meは返信内容を作成したユーザーが本人であるかどうかを示します。
replies[].htmlContentはHTML形式で表した返信内容です。
replies[].contentはファイルに付加した返信内容です。
replies[].deletedはが削除されているかどうかを示します。

{
 "kind": "drive#replyList",
 "replies": [
  {
   "kind": "drive#reply",
   "id": "AAAAAxxxxxx",
   "createdTime": "2016-05-17T02:36:52.728Z",
   "modifiedTime": "2016-05-17T02:36:52.728Z",
   "author": {
    "kind": "drive#user",
    "displayName": "○○○○",
    "photoLink": "//lh4.googleusercontent.com/-yQ6I-0rupAw/AAAAAAAAAAI/AAAAAAAAABo/xxxxxxxxxxx/xxxxxxxx/photo.jpg",
    "me": true
   },
   "htmlContent": "返信コメントupdate",
   "content": "返信コメントupdate",
   "deleted": false
  },
  {
   "kind": "drive#reply",
   "id": "AAAAAxxxxxx",
   "createdTime": "2016-05-17T02:36:52.728Z",
   "modifiedTime": "2016-05-17T02:36:52.728Z",
   "author": {
    "kind": "drive#user",
    "displayName": "○○○○",
    "photoLink": "//lh4.googleusercontent.com/-yQ6I-0rupAw/AAAAAAAAAAI/AAAAAAAAABo/xxxxxxxxxxx/xxxxxxxx/photo.jpg",
    "me": true
   },
   "htmlContent": "返信コメントcreate",
   "content": "返信コメントcreate",
   "deleted": false
  }
 ]
}

・getの場合
gapi.client.drive.replies.get()を使う場合、取得したい返信内容が付加されているファイルのfileIdと
取得したい返信内容が付加されているコメントのcommentId、取得したい返信内容のreplyId、
リクエスト結果を取得するためのfieidsが必要になります。
取得するファイルのfileIdとfieldsが1つ以上必要になります。
gapi.client.drive.replies.get({‘fileId’: ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXX’, ‘commentId’: ‘YYYYYYYYYYY’, ‘replyId’: ‘ZZZZZZZZZZZ’, ‘fields’: ‘id, content’});

全てのフィールドを指定したリクエストの結果は下記の通りです。
取得した情報はlistで取得したreplies[]の内容と同じなので説明を省きます。

{
 "kind": "drive#reply",
 "id": "AAAAAxxxxxx",
 "createdTime": "2016-05-17T02:36:52.728Z",
 "modifiedTime": "2016-05-17T02:36:52.728Z",
 "author": {
  "kind": "drive#user",
  "displayName": "○○○○"",
  "photoLink": "//lh4.googleusercontent.com/-yQ6I-0rupAw/AAAAAAAAAAI/AAAAAAAAABo/xxxxxxxxxxx/xxxxxxxx/photo.jpg",
  "me": true
 },
 "htmlContent": "返信コメントcreate",
 "content": "返信コメントcreate",
 "deleted": false
}

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

今回紹介したCommentsとRepliesはファイルにつけるコメントとそれに対する返信です。

通常、コメントをつける際はGoogleのドキュメントやスプレッドシートを使う必要がありますが、
CommentsとRepliesを用いるとGoogleのドキュメントやスプレッドシート以外のファイルにも
コメントをつけることができます。
コメントをつける機能はあまり使用されない機能かもしれませんが、
コメントをつける際に重宝するので覚えておくことをお勧めします。

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

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

<付録>
・コメントおよび返信の付加・更新・削除などが行えるサンプル
※使用する際はCLIENT_IDを自身で作成したクライアントIDに置き換えてください。
またFILE_ID、COMMENT_ID、REPLY_IDも置き換えて使用してください。

<html>
  <head>
    <script type="text/javascript">
    var CLIENT_ID = 'CLIENT_ID';

    var SCOPES = ['https://www.googleapis.com/auth/drive'];

    function checkAuth() {
        gapi.auth.authorize(
        {
            client_id: CLIENT_ID,
            scope: SCOPES,
            immediate: true,
        },  authResult);
    }
    
    function authResult(authResult) {
        var authorizeDiv = document.getElementById('authorize-div');
        if (authResult && !authResult.error) {
            authorizeDiv.style.display = 'none';
            loadAPI();
        }   
        else {
            authorizeDiv.style.display = 'inline';
        }
    }
    function loadAPI() {
        gapi.client.load('drive', 'v3', request);
    }

    function authClick(event) {
        gapi.auth.authorize(
        {
            client_id: CLIENT_ID,
            scope: SCOPES,
            immediate: false,
        },  result);
        return false;
    }

    function request() {

        var fileId = 'FILE_ID';
        var commentId = 'COMMENT_ID';
        var replyId = 'REPLY_ID';
        var req = '';

        // comments
        req = gapi.client.drive.comments.create({'fileId': fileId, 'content' : 'コメントcreate', 'fields': 'id, content'});
        //req = gapi.client.drive.comments.update({'fileId': fileId, 'commentId' : commentId, 'content' : 'コメントupdate', 'fields': 'id, content'});
        //req = gapi.client.drive.comments.delete({'fileId': fileId, 'commentId' : commentId});
        //req = gapi.client.drive.comments.list({'fileId': fileId, 'fields' : 'comments'});
        //req = gapi.client.drive.comments.get({'fileId': fileId, 'commentId' : commentId, 'fields' : 'id'});

        // replys
        //req = gapi.client.drive.replies.create({'fileId': fileId, 'commentId' : commentId, 'content' : '返信コメントcreate', 'fields': 'id, content'});
        //req = gapi.client.drive.replies.update({'fileId': fileId, 'commentId' : commentId, 'replyId': replyId,'content' : '返信コメントupdate', 'fields': 'id, content'});
        //req = gapi.client.drive.replies.delete({'fileId': fileId, 'commentId' : commentId, 'replyId': replyId});
        //req = gapi.client.drive.replies.list({'fileId': fileId, 'commentId' : commentId, 'fields' : 'replies'});
        //req = gapi.client.drive.replies.get({'fileId': fileId, 'commentId' : commentId, 'replyId': replyId, 'fields' : 'id, content'});   
        
        // create, update, get
        req.execute(function(res) {
                console.log(res);
                document.write(res.id + '
'); document.write(res.content + '
'); }); // list /*req.execute(function(res) { console.log(res) var comments = '' if(res.comments != null) comments = res.comments; else comments = res.replies; for(i=0; i'); document.write(comments[i].content + '
'); } });*/ } </script> <script src="https://apis.google.com/js/client.js?onload=checkAuth"> </script> </head> <body> <div id="authorize-div" style="display: none"> <span>Authorize access to Drive API</span> <button id="authorize-button" onclick="authClick(event)"> Authorize </button> </div> <div id="output"></div> </body> </html>