使用Python调取Google Play Console数据时遇服务账户格式错误如何解决?
解决Google Play Console数据导入Pandas时的MalformedError问题
问题根源
错误MalformedError: Service account info was not in the expected format, missing fields token_uri, client_email.的核心原因是你使用的authentification.json文件不是有效的服务账号密钥文件,或文件内容缺失关键必填字段。
解决步骤
1. 重新获取正确的服务账号JSON密钥
- 登录Google Cloud控制台,进入对应项目
- 导航至「IAM与管理」→「服务账号」
- 找到用于访问Play Console的服务账号,点击「密钥」标签页
- 点击「添加密钥」→「创建新密钥」,选择JSON格式,下载后保存为
authentification.json(确保文件名和代码中的路径一致) - 确认下载的JSON文件包含
token_uri、client_email、private_key这三个必填字段。
2. 配置Play Console权限
- 登录Google Play Console,进入「用户权限」页面
- 点击「邀请新用户」,输入服务账号JSON中的
client_email地址 - 为该账号分配合适的权限(例如「查看应用信息和下载报告」,若需修改数据则分配更高权限)
- 完成邀请,确保权限生效。
3. 验证代码(核心逻辑无需修改)
你的原代码逻辑本身无问题,替换为正确的服务账号密钥文件即可运行。完整代码如下:
import datetime import pandas as pd from google.oauth2 import service_account from googleapiclient.discovery import build # 配置参数 credentials_file = "authentification.json" package_name = '你的应用包名' # 计算日期范围(最近一周) monday = str(datetime.date.today() - datetime.timedelta(days=7)) sunday = str(datetime.date.today() - datetime.timedelta(days=1)) # 构建服务 credentials = service_account.Credentials.from_service_account_file( credentials_file, scopes=['https://www.googleapis.com/auth/androidpublisher'] ) service = build('androidpublisher', 'v3', credentials=credentials) # 获取评论数据 response = service.reviews().list( packageName=package_name, maxResults=1000, startDate=monday, endDate=sunday ).execute() # 转换为DataFrame df = pd.DataFrame(response['reviews']) print(df.head())
内容的提问来源于stack exchange,提问作者François Lenne
相关产品推荐
相关产品推荐

