如何从Google Drive Ruby API获取上次修改用户电子邮件地址

时间:2017-08-29 19:58:39

标签: google-drive-api

我是Google Drive API的新手,我很难在文档和其他帖子中找到答案。我正在编写一个Ruby脚本来将文件移入/移出Google Team Drive,并希望能够看到每个文件的最后修改用户的电子邮件地址。我可以在API Explorer中运行我的查询并获得我正在寻找的结果,但是当我从我的脚本运行相同的查询时,我只能看到最后修改用户的显示名称和其他几个数据点,但没有电子邮件地址。我正在使用我创建的服务帐户来对API进行身份验证,并且已授予该服务帐户对Team Drive和Domain-wide Delegation权限的完全访问权限。以下是我的代码。任何人都可以提出任何建议吗?

require 'google/apis/drive_v3'
require 'googleauth'

SCOPES = [
  Google::Apis::DriveV3::AUTH_DRIVE,
  Google::Apis::DriveV3::AUTH_DRIVE_APPDATA,
  Google::Apis::DriveV3::AUTH_DRIVE_FILE,
  Google::Apis::DriveV3::AUTH_DRIVE_METADATA,
  Google::Apis::DriveV3::AUTH_DRIVE_METADATA_READONLY,
  Google::Apis::DriveV3::AUTH_DRIVE_PHOTOS_READONLY,
  Google::Apis::DriveV3::AUTH_DRIVE_READONLY
]

ENV['GOOGLE_APPLICATION_CREDENTIALS'] = "/path/to/my/service/account/creds.json"

service = Google::Apis::DriveV3::DriveService.new
service.authorization = Google::Auth.get_application_default(SCOPES)

response = service.list_files(
  q: "'team drive id' in parents",
  include_team_drive_items: true,
  supports_team_drives: true
)

编辑:

响应对象如下:

#<Google::Apis::DriveV3::FileList:<memory location> @files=[#<Google::Apis::DriveV3::File:<memory location> @capabilities=#<Google::Apis::DriveV3::File::Capabilities:<memory location> @can_add_children=false, @can_change_viewers_can_copy_content=true, @can_comment=true, @can_copy=true, @can_delete=true, @can_download=true, @can_edit=true, @can_list_children=false, @can_move_item_into_team_drive=true, @can_move_team_drive_item=true, @can_read_revisions=true, @can_read_team_drive=true, @can_remove_children=false, @can_rename=true, @can_share=true, @can_trash=true, @can_untrash=true>, @created_time=<created time>, @explicitly_trashed=false, @has_augmented_permissions=true, @has_thumbnail=true, @icon_link=<icon link>, @id=<id>, @is_app_authorized=false, @kind=\"drive#file\", @last_modifying_user=#<Google::Apis::DriveV3::User:<memory location> @display_name=<display name>, @kind=\"drive#user\", @me=false, @permission_id=<permission id>, @photo_link=<photo link>>, @mime_type=<mime type>, @modified_by_me=false, @modified_time=<modified time>, @name=<name>, @parents=[<parent id>], @quota_bytes_used=0, @spaces=[\"drive\"], @starred=false, @team_drive_id=<team drive id>, @thumbnail_link=<thumbnail link>, @thumbnail_version=<thumbnail version>, @trashed=false, @version=<version>, @viewed_by_me=false, @viewers_can_copy_content=true, @web_view_link=<web view link>], @incomplete_search=false, @kind=\"drive#fileList\">

1 个答案:

答案 0 :(得分:0)

我将在Javascript中演示这个概念,你将它翻译成Ruby。有两种方法可以做到这一点。

<强> 1。将Files.list用于所有文件

因为我看到你正在使用Files.list,所以我先回答一下。您必须知道Files resource中的JSON元数据层次结构。

访问lastModifyingUser财产使用权 file.lastModifyingUser.emailAddress其中filevar file = response.result.files;,其中包含您的驱动器文件的数组列表。

<强> 2。将Revisions.get用于特定文件

要获得lastModifyingUser,您可以使用Revisions.get。使用此方法时,您必须知道revisionId(它是您使用revisions.list获得的修订号)。您可以尝试使用1作为revisionId进行测试。

这是我的JS代码:

 function revisionGet() {
        gapi.client.drive.revisions.get({
          'fileId': '123456789ABCDEFG',
          'revisionId': 1,
          'fields': '*'
        }).then(function(response) {

          var getResponse = response;
          console.log(getResponse.result);

          appendPre('displayName: ' + getResponse.result.lastModifyingUser.displayName );
          appendPre('email: ' + getResponse.result.lastModifyingUser.emailAddress );
        });
      }

在'fields'属性中传递的wildcard *只是意味着,返回所有元数据。 appendPre只是一个以HTML格式显示的自定义函数。 重要的是要知道如何使用

访问emailAddress属性
response.result.lastModifyingUser.emailAddress

我的HTML输出:

displayName: noogui
email: mypersonalemail@gmail.com

要查看修订元数据的JSON层次结构,请转到revision file resource