如何从 Python 字典验证 Google 服务用户的 API 权限?

问题描述 投票:0回答:1

我正在使用翻译程序进行翻译,该程序可能存在歧义 我检查了Google的教程,我可以使用服务帐户的文件轻松调用API,但我有一个新的要求。我需要将其存储在OSS中,类似于Amazon S3存储桶,现在我已经实现了从存储桶中读取服务帐户字典的功能,但是我不能直接利用这个字典进行服务验证

我遇到的问题如下。当我阅读上面的字典文件时,它似乎一直被卡住,我不确定这是什么问题。你能给我一些解决方案吗?

@BlogApp.get("/blogs/uvpvget")
async def GoogleUVPVGet():
    async with db_session() as session:
        try:
            # 从阿里云 OSS 获取 Google Analytics 密钥
            jsonkey = AliOssPrivateDocument()
            JSON_KEY_FILE = jsonkey.CrawlerKeyAcquisition()
            JSON_KEY_FILE_str = JSON_KEY_FILE.decode('utf-8')

            # 将 JSON 字符串转换为字典
            JSON_KEY_FILE_dict = json.loads(JSON_KEY_FILE_str.replace("'", '"').replace('\r\n', '\\r\\n'))

            print(JSON_KEY_FILE_dict)

            # 使用适合 Google Analytics 的 OAuth 范围
            SCOPES = ['https://www.googleapis.com/auth/analytics']
            credentials = service_account.Credentials.from_service_account_info(JSON_KEY_FILE_dict, scopes=SCOPES)
            # os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = ""
            property_id = "11111111"
            # 使用传递的凭据创建客户端
            client = BetaAnalyticsDataClient()

            request = RunReportRequest(
                property=f'properties/{property_id}',  # 替换为你的 GA4 属性 ID
                dimensions=[{'name': 'date'}],
                metrics=[{'name': 'activeUsers'}, {'name': 'screenPageViews'}],
                date_ranges=[{'start_date': '2023-01-01', 'end_date': '2024-12-31'}]
            )

            response = client.run_report(request=request)

            # 初始化一个空字典
            uv_pv_data = {}

            # 输出 UV 和 PV,并将结果存储到字典中
            for row in response.rows:
                date = row.dimension_values[0].value
                active_users = row.metric_values[0].value
                page_views = row.metric_values[1].value

                # 将数据存储到字典,日期作为键
                uv_pv_data[date] = {
                    'Active Users (UV)': active_users,
                    'Page Views (PV)': page_views
                }
            return {"data": uv_pv_data, "code": 20000}
        except GoogleAuthError as auth_error:
            return {"error": "Authentication failed", "message": str(auth_error), "code": 40002}
        except Exception as e:
            return {"error": "Internal Server Error", "message": str(e), "code": 50000}
google-cloud-platform google-api google-oauth google-api-python-client
1个回答
0
投票

如果您正在以字典形式读取帐户信息,那么请确保您的字典必须是双引号”,如果您的字典键名是“单引号”,则将无法执行

{
  "keyname":"value"
}
© www.soinside.com 2019 - 2024. All rights reserved.