You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python从Google Play开发者控制台程序化下载CSV文件?

用Python脚本下载Google Play统计CSV时遭遇权限拒绝,手动下载正常,如何解决?

问题描述

我从Google Play Developer Console的「Download Reports > Statistics」获取应用的下载、安装、卸载统计CSV文件。通过控制台给出的Cloud Storage存储桶URI,用关联的开发者账号手动打开URL能正常下载,但用Python脚本自动下载时遇到权限不足错误。

我的脚本代码:

import webbrowser

def download_file():
    # Download URL for the CSV file
    download_url = "https://storage.googleapis.com/pubsite_prod_7157330435810114607/stats/installs/installs_com.geology_quiz_and_guide.mineralogy_202301_app_version.csv"

    # Opens the browser at Google's login URL
    webbrowser.open('https://accounts.google.com/')

    # Wait to allow time to log in manually
    input("Press Enter after you have logged into Google...")

    # Once logged in, attempt to download the file
    webbrowser.open(download_url)

    print("Downloading file...")

download_file()

执行后收到的错误:

<Error>
    <Code>AccessDenied</Code>
    <Message>Access denied.</Message>
    <Details>Anonymous caller does not have storage.objects.get access to the Google Cloud Storage object. Permission 'storage.objects.get' denied on resource (or it may not exist).</Details>
</Error>

我已经登录了关联的开发者账号,为什么脚本还是无法下载?有没有其他方法可以自动下载这些CSV文件?


原因分析

  • 你用webbrowser.open打开登录页和下载页时,两个请求可能不在同一个浏览器会话里:比如脚本默认调用的是未登录的浏览器实例,或者浏览器的会话隔离机制导致登录状态没共享。
  • Google Cloud Storage的这些统计文件需要携带OAuth2验证凭证(如登录Cookie、身份令牌)才能访问,直接打开URL的方式如果没有有效凭证,会被判定为匿名访问,触发权限拒绝。

解决方法

方法1:使用Google Cloud Storage Python客户端库(推荐)

直接用官方库处理身份验证,无需依赖浏览器,稳定可靠:

  1. 安装依赖:
pip install google-cloud-storage google-auth
  1. 配置服务账号权限:
    • 登录Google Cloud Console,找到与Play开发者控制台关联的项目
    • 进入「IAM与管理员 > 服务账号」,创建服务账号并下载JSON格式的密钥文件
    • 给该服务账号添加Storage Object Viewer权限,确保能访问目标存储桶内的对象
  2. 编写下载脚本:
from google.cloud import storage
import os

# 设置服务账号密钥文件路径
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "/path/to/your/service-account-key.json"

def download_play_stats_csv(bucket_name, blob_path, local_save_path):
    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)
    blob = bucket.blob(blob_path)
    blob.download_to_filename(local_save_path)
    print(f"文件已保存到 {local_save_path}")

# 从你的下载URL中提取桶名和对象路径
bucket_name = "pubsite_prod_7157330435810114607"
blob_path = "stats/installs/installs_com.geology_quiz_and_guide.mineralogy_202301_app_version.csv"
local_save_path = "./install_stats.csv"

download_play_stats_csv(bucket_name, blob_path, local_save_path)

方法2:复用浏览器会话(适合快速测试)

确保脚本调用的是你平时登录Google账号的浏览器实例,共享登录状态:

import webbrowser

# 指定你常用的浏览器路径(示例为Windows下的Chrome)
chrome_path = "C:/Program Files/Google/Chrome/Application/chrome.exe %s"
# Mac路径示例:"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome %s"

def download_file():
    download_url = "https://storage.googleapis.com/pubsite_prod_7157330435810114607/stats/installs/installs_com.geology_quiz_and_guide.mineralogy_202301_app_version.csv"
    
    # 用指定浏览器打开登录页
    webbrowser.get(chrome_path).open('https://accounts.google.com/')
    input("登录后按回车继续...")
    # 用同一个浏览器实例打开下载URL
    webbrowser.get(chrome_path).open(download_url)
    print("开始下载文件...")

download_file()

方法3:使用Play Developer Reporting API(适合批量处理)

如果需要批量获取统计数据或直接对接matplotlib绘图,可以跳过CSV下载,直接调用官方API获取结构化数据:

  • 配置API权限和身份验证(参考官方文档)
  • 直接通过API请求获取安装、下载等统计数据,无需处理CSV文件,更高效。

内容的提问来源于stack exchange,提问作者user22836254

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 05:47:24