为Google Fact Check Tools API集成OAuth2.0时遭遇400无效参数错误求助
问题排查与解决方案
核心原因
Google Fact Check Tools API的claims:search查询接口仅支持API Key认证,不接受OAuth2服务账号的Bearer Token认证。你添加的OAuth请求头会被接口判定为无效参数,这就是返回400错误的根本原因。另外你代码里的API Key参数名写错了,应该是key而非GFC_API_KEY。
修正步骤
- 移除所有OAuth2相关的认证逻辑(包括服务账号凭证、Token刷新、Authorization请求头)
- 将API Key参数名从
GFC_API_KEY改为key - (可选)在Cloud Functions环境中,建议通过环境变量存储API Key,避免硬编码
修正后的完整代码
import requests import os GOOGLE_FC_API = "https://factchecktools.googleapis.com/v1alpha1/claims:search" PAGE_SIZE = 3000 N_BACK_DAYS = 100 QUERY = "conspiracy" # 从环境变量读取API Key(Cloud Functions中可通过控制台配置) API_KEY = os.getenv("GOOGLE_FC_API_KEY", "your_fallback_key") class FetchFactChecks(): def get_google_fcs(self): params = { 'languageCode': 'en-US', 'pageSize': str(PAGE_SIZE), 'maxAgeDays': str(N_BACK_DAYS), 'query': QUERY, 'key': API_KEY # 修正参数名 } # 无需Authorization头,直接用API Key请求 response = requests.get(GOOGLE_FC_API, params=params) if response.status_code == 200: print("Success:", response.json()) else: print(f"Error: {response.status_code}, {response.text}") if __name__ == "__main__": fc_factcheck = FetchFactChecks() fc_factcheck.get_google_fcs()
使用googleapiclient的正确写法
如果想用discovery模式,同样不需要OAuth,直接传入API Key即可:
from googleapiclient import discovery import os API_KEY = os.getenv("GOOGLE_FC_API_KEY", "your_fallback_key") # 构建服务时传入API Key,而非OAuth凭证 service = discovery.build('factchecktools', 'v1alpha1', developerKey=API_KEY) rqst = service.claims().search( maxAgeDays=N_BACK_DAYS, pageSize=PAGE_SIZE, query=QUERY, languageCode='en-US' ) resp = rqst.execute() print(resp)
补充说明
只有当你需要使用Fact Check Tools的写入类接口(比如提交自有事实核查声明)时,才需要用到OAuth2服务账号认证,且对应的scope应为https://www.googleapis.com/auth/factchecktools。而claims:search作为公开查询接口,仅需API Key即可调用。
内容的提问来源于stack exchange,提问作者Basith
相关产品推荐
相关产品推荐

