我是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\">
答案 0 :(得分:0)
我将在Javascript中演示这个概念,你将它翻译成Ruby。有两种方法可以做到这一点。
<强> 1。将Files.list用于所有文件
因为我看到你正在使用Files.list,所以我先回答一下。您必须知道Files resource中的JSON元数据层次结构。
访问lastModifyingUser
财产使用权
file.lastModifyingUser.emailAddress
其中file
是var 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。