尝试从谷歌存储桶加载数据导致apiclient.errors.HttpError:<httperror 403 ... =“”return =“”“forbidden”=“”>

时间:2017-01-12 15:32:40

标签: python google-cloud-storage google-api-python-client

所以现在我正在尝试编写一个python脚本,从我们的谷歌存储加载一些文件。我正在使用Windows,已安装Google Cloud SDK并使用gsutil设置所有内容,因此我可以在命令行键入以下内容时成功加载文件:

gsutil cp gs://pubsite_prod_rev_****/financial-stats/subscriptions/***.csv .

这会将正确的csv文件加载到我的文件夹中。凉。

现在我在python中尝试了相同的操作,遵循google的这个文档:https://support.google.com/googleplay/android-developer/answer/6135870?hl=en(你必须点击“使用客户端库和服务帐户下载报告”,然后点击“Python示例”来显示python代码)

我使用完全相同的代码

import json
from httplib2 import Http
from oauth2client.client import SignedJwtAssertionCredentials
from apiclient.discovery import build
from urllib import quote

client_email = 'serviceAccountEmail'
json_file = 'pathToMyServiceAccountPrivateKey'
cloud_storage_bucket = 'pubsite_prod_rev_******'
report_to_download = 'financial-stats/subscriptions/fileName.csv'

print report_to_download

private_key = json.loads(open(json_file).read())['private_key']
credentials = SignedJwtAssertionCredentials(client_email, private_key, 'https://www.googleapis.com/auth/devstorage.read_only')

storage = build('storage', 'v1', http=credentials.authorize(Http()))

print storage.objects().get(bucket=cloud_storage_bucket, object=report_to_download).execute()

加载csv文件.Unfortunetaley结果如下:

Traceback (most recent call last):
  File "C:/Office/Financial Reports/Python Reporter/Test.py", line 66, in <module>
    print storage.objects().get(bucket=cloud_storage_bucket, object=report_to_download).execute()
  File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\bq\third_party\oauth2client\util.py", line 137, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\bq\third_party\apiclient\http.py", line 724, in execute
    raise HttpError(resp, content, uri=self.uri)
apiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/storage/v1/b/pubsite_prod_rev_17179175168453545219/o/financial-stats%2Fsubscriptions%2Fsubscriptions_de.kaasahealth.namagi_cody_monthly_sub_201701_device.csv?alt=json returned "Forbidden">

很明显,它构建的网址存在问题。但我不知道究竟是什么,因为google告诉我们在doc页面上做同样的事情。

希望有人可以帮助我:/

编辑:我更改了回溯,因为它现在从错误404更改为错误403。

2 个答案:

答案 0 :(得分:0)

好吧,所以它不起作用的原因很简单。 您必须启用访问权限并添加管理员权限或更少(但我没有尝试其他可能性)在谷歌开发者控制台内通过设置 - &gt; API Acess和selct您正在使用的服务帐户。

答案 1 :(得分:0)

这意味着您现在有权从

下载报告

Google Play游戏机 - &gt;下载报告 - &gt;财务(或财务报告相关的事情)。

您可以通过gsutil下载您尝试下载的相同文件。 获得从Google Play控制台下载报告的权限后,您就可以使用gsutil或以编程方式下载报告