【发布时间】:2015-03-13 16:57:03
【问题描述】:
我正在开发一个 Ruby 程序来访问我的谷歌驱动器以获取我的文件。 我想使用服务器到服务器的连接来避免人们接受权限,所以我使用为 Service Account Client ID 生成的 p12 密钥。 连接正常,但我成功插入了一个文件。
我的问题是当我尝试列出所有文件时:调用效果很好,但我只得到 2 个文件:之前插入的文档和一个名为 “如何开始使用云端硬盘”的 pdf 文件 (我还有很多其他文件,例如文档、电子表格、演示文稿、图片等...)。
我使用我的 google 帐户创建了我的密钥,但我无法访问我的文件。另外,我用我的程序插入的文档没有出现在我的谷歌驱动器中的文件中。
我对 API 有什么遗漏吗?我得到什么文件而不是我的? 真的就像我不在同一个 Google Drive 帐户上一样。 这是我用来列出文件的代码:
# Prepare the OAuth client / Service Account
client = Google::APIClient.new(application_name: 'Google Drive Ruby test', application_version: '0.0.1')
key = Google::APIClient::KeyUtils.load_from_pkcs12('key.p12', 'notasecret')
client.authorization = Signet::OAuth2::Client.new(
:token_credential_uri => 'https://accounts.google.com/o/oauth2/token',
:audience => 'https://accounts.google.com/o/oauth2/token',
:scope => 'https://www.googleapis.com/auth/drive',
:issuer => '***@developer.gserviceaccount.com',
:signing_key => key)
client.authorization.fetch_access_token!
# Get the Drive API
drive = client.discovered_api('drive', 'v2')
# Upload a file
api_result = client.execute(
:api_method => drive.files.list,
:parameters => [])
非常感谢!
朱利安
【问题讨论】:
-
粘贴执行 files.list 的代码,最好是 http 跟踪。您是否正确关注 nextPageToken?当您说“我的文件”时,您确实意识到服务帐户不是您的文件,而是一个单独的帐户?
-
这是我正在测试的完整代码。我只是打印 api_result.data 对象。当我说我的文件时,我想访问通过浏览器创建的电子表格或文档。
-
啊,这就是问题所在。服务帐户不是您可以通过浏览器更新的云端硬盘帐户。请参阅 stackoverflow.com/questions/28784575/… 和 stackoverflow.com/questions/19766912/…。顺便说一句,在您的代码中,files.list 上方的注释说“上传文件”,这就是我第一次错过它的原因。
-
抱歉,您发表了评论。只是因为我先尝试了上传,然后是列表,但我没有更改评论:) 感谢您提供链接,我将尝试 OAuth Playground!
-
@pinoyyid 谢谢你的链接。它像那样工作得很好!如果你想把它作为答案,我会接受它;)
标签: ruby google-api google-drive-api