我目前正在尝试使用 python 中的自动化脚本在播放控制台中导出我的报告。我已经关注了一些文档 https://support.google.com/googleplay/android-developer/answer/6135870?hl=en。
我的代码最终是这样的:
cloud_storage_bucket = 'pubsite_prod_rev_XXXXXXXXXXXXXXXX'
report_to_download = 'reviews/reviews_id.co.sample.sample_202012.csv'
credentials = Credentials.from_service_account_file(json_file)
storage = build('storage', 'v1', credentials=credentials)
print(storage.objects().get(bucket=cloud_storage_bucket,object=report_to_download).execute())
我得到了这个输出:
{'kind': 'storage#object',
'id':'pubsite_prod_rev_16380265360184632708/reviews/reviews_id.co.acehardware.acerewards_202012.csv/1638300444416618',
'selfLink':'https://www.googleapis.com/storage/v1/b/pubsite_prod_rev_XXXXXXXXXX/o/reviews%2Freviews_id.co.acehardware.acerewards_202012.csv',
'mediaLink':'https://storage.googleapis.com/download/storage/v1/b/pubsite_prod_rev_16380265360184632708/o/reviews%2Freviews_id.co.sample.sample.csv?generation=1638300444416618&alt=media',
'name': 'reviews/reviews_id.co.sample.sample_202012.csv',
'bucket': 'pubsite_prod_rev_XXXXXXXXXXXXXXXX',
'generation': '1638300444416618',
'metageneration': '1',
'contentType': 'text/csv; charset=utf-16le',
'storageClass': 'STANDARD',
'size': '18842',
'md5Hash': 'ywjrTfTj/TjFuVkeawlNj/fQ==',
'contentEncoding': 'gzip',
'crc32c': 'wpasdROSg==',
'etag': 'COq0sadoeDowPQCEAE=',
'timeCreated': '2021-11-30T19:27:24.488Z',
'updated': '2021-11-30T19:27:24.488Z',
'timeStorageClassUpdated': '2021-11-30T19:27:24.488Z'}
如何创建一些 csv 输出对象到本地存储或使用此输出保存到 StringIO 缓冲区?
根据我的经验,特别是下载 Google Play Console 报告时最好使用
gsutil
(尽管更多的 Python 方式不是调用某些外部进程,而是使用 API)。这更适合您的需求,因为它会立即将报告下载到您的本地存储。
此外,更重要的是,人们报告 很多使用 403 访问此类报告的问题案例
pubsite_prod_rev_X_***
- 它们未在您的 GCS 存储桶中列出,并且您无法正确更改访问它们所需的权限对于 API。但我发现 gsutil
在这种情况下起作用。这是一个代码示例:
import os
import pathlib
import subprocess
import shutil
gsutil_path = shutil.which('gsutil')
if not gsutil_path:
# if gsutil isn't in PATH
gsutil_path = shutil.which('gsutil',path=os.getenv('GSUTIL_PATH'))
print(str(subprocess.check_output([
gsutil_path,
'cp',
'-r',
os.getenv('GOOGLE_STORAGE_REPORTS_URI'),
pathlib.Path(__file__).parent.resolve()])))