我正在尝试将数据从 Google Business Reviews 导入到 Python 中,但不断遇到此错误“错误 400:redirect_uri_mismatch”,即使我遵循了文档 Google 帖子,其中我被告知要遵循以下步骤:
accounts.locations.reviews.list()
方法获取您企业的评论列表。accounts.locations.reviews.list()
方法:account_id
:您的“Google 我的商家”帐户的 ID。location_id
:您的“Google 我的商家”位置的 ID。filter
:可用于缩小结果范围的过滤器。例如,您可以使用评级过滤器仅获取具有特定评级的评论。Error 400: redirect_uri_mismatch
You can't sign in to this app because it doesn't comply with Google's OAuth 2.0 policy.
If you're the app developer, register the redirect URI in the Google Cloud Console.
Request details: redirect_uri=http://localhost:52271/ flowName=GeneralOAuthFlow
数字
52271
似乎在不断变化,即使我试图将其固定在我的代码中,如8080
:
import requests
from google_auth_oauthlib.flow import InstalledAppFlow
from loguru import logger as log
# Your Google My Business account ID and location ID
my_business_account_id = "..." # Replace with actual
location_id = "..." # Replace with actual
# OAuth 2.0 access token obtained
access_token = "..." # Replace with your actual access token
# Path to your OAuth 2.0 Client Secret JSON file
GCP_CREDENTIALS_PATH = "google_review_client.json" # Replace with actual
# Ensure the redirect URI matches the one in Google Cloud Console
redirect_uri = "http://localhost:8080/"
# Setup the OAuth 2.0 flow with required scopes
flow = InstalledAppFlow.from_client_secrets_file(
GCP_CREDENTIALS_PATH,
scopes=["https://www.googleapis.com/auth/business.manage"],
redirect_uri=redirect_uri,
)
# Run the OAuth flow to obtain credentials
credentials = flow.run_local_server(port=0)
# Log the credentials to confirm successful OAuth
log.debug(f"Credentials: {credentials}")
# Setup session to use the credentials for accessing Google My Business API
session = requests.Session()
session.headers.update(
{"Authorization": f"Bearer {credentials.token}", "Content-Type": "application/json"}
)
# Construct the API endpoint URL
url = f"https://mybusiness.googleapis.com/v4/accounts/{my_business_account_id}/locations/{location_id}/reviews"
# Perform the API request and handle potential errors
try:
log.info(f"Making API request to URL: {url}")
response = session.get(url)
response.raise_for_status() # This will raise an error for bad HTTP status codes
reviews = response.json()
log.success("Reviews fetched successfully.")
print(reviews)
except requests.exceptions.HTTPError as http_err:
log.error(
f"HTTP error occurred: {http_err}"
) # Specific details about the HTTP error
except Exception as err:
log.error(f"An unexpected error occurred: {err}") # Other errors
我期待一张包含该业务的 Google 评论的表格,但当我运行此表时,我收到错误
Error 400: redirect_uri_mismatch
。
您可以考虑使用 Google Cloud SDK 的 [gcloud auth application-default login](https://cloud.google.com/sdk/gcloud/reference/auth/application-default/login https://github. com/dresenhista/google_my_business) 命令来验证您的应用程序。此方法自动处理授权并简化流程。
即使您尝试将其修复为8080,数字52271仍不断变化的原因可能是由于端口冲突。这通常发生在以下情况:
您系统上的另一个应用程序或进程已在使用端口 8080,您的应用程序将被分配不同的端口号以避免冲突。这就是您看到数字变化的原因。
您的开发环境或框架可能会动态地将端口号分配给应用程序,特别是在同时运行多个实例时。这也可能导致端口号发生变化。
有了这个,您可以考虑以下可能有帮助的解决方法:
检查冲突的进程:在终端中使用 netstat 命令查看哪些进程正在侦听端口 8080。如果另一个进程正在使用它,您需要停止它或更改其端口。
在代码中指定不同的端口:您可以指定不太可能使用的不同端口,而不是硬编码端口 8080。例如,尝试使用端口 8081 或 8082。
配置您的开发环境:如果您使用的是 Node.js 或 Django 等开发环境,请查看其文档以获取有关如何为应用程序指定固定端口的说明。
使用端口转发工具:如果您在本地计算机上运行应用程序并需要从远程设备访问它,则可以使用 ngrok 等端口转发工具来公开应用程序的公共 URL。
如果上述信息都不能帮助您解决问题,您还可以查看 dresenhista 的此存储库,了解 使用 Python 从 Google 我的商家中提取评论,其中她创建了自己的代码来从 Google 我的商家中提取所有评论,然后分析人们更多谈论她的业务的哪些主题。