如何从Google My Business获取评论?无法列出关联位置求助
问题:Google My Business API无法获取账号关联位置
你提到能够成功获取GMB账号ID,但调用listAccountsLocations时无法返回关联的位置,进而无法获取评论。结合你的代码和常见的GMB API问题,我整理了几个可能的原因和对应的解决办法:
1. 服务账号缺少GMB账号的权限
服务账号是独立的身份,必须被手动添加到你的Google My Business账号中并赋予管理权限,否则即使能拿到账号ID,也无法访问关联的位置数据:
- 登录Google My Business后台,进入你的账号管理页面
- 找到「用户管理」选项,添加服务账号的邮箱(格式类似
xxx@your-project.iam.gserviceaccount.com) - 给该账号分配「所有者」或「管理者」权限,等待5-10分钟让权限生效
2. 使用了过时的API权限范围
你当前使用的plus.business.manage是旧版的权限范围,现在GMB API推荐使用更完整的business.manage权限:
$client->setScopes( [ 'https://www.googleapis.com/auth/business.manage' ] );
替换后重新授权,确保权限覆盖了位置读取的需求。
3. 调用listAccountsLocations时未指定readMask参数
GMB API的很多列表接口需要明确指定readMask来定义要返回的字段,否则可能返回空数据。修改你的调用代码,添加该参数:
$locationsList = $locations->listAccountsLocations( $account->name, ['readMask' => 'name,title,address'] // 指定你需要的字段,比如名称、标题、地址等 )->getLocations();
你可以根据需求调整readMask的字段,可在Google开发者文档中搜索Accounts.locations.list查看完整字段列表。
4. 添加错误捕获排查具体问题
建议在API调用处添加异常捕获,这样可以看到具体的错误信息,帮助定位问题:
try { $locationsList = $locations->listAccountsLocations( $account->name, ['readMask' => 'name,title'] )->getLocations(); // 打印返回结果,确认是否有数据 print_r($locationsList); } catch (Google_Service_Exception $e) { echo "API调用错误: " . $e->getMessage(); print_r($e->getErrors()); } catch (Exception $e) { echo "其他错误: " . $e->getMessage(); }
比如如果是权限不足,错误信息会明确提示PERMISSION_DENIED,如果是参数错误会提示INVALID_ARGUMENT。
5. 确认Google Cloud Console的配置
- 确保你的Google Cloud项目已经启用了Google My Business API(在Cloud Console的API库中搜索并启用)
- 确认服务账号的密钥文件没有过期,并且正确加载到了代码中
按照以上步骤逐一排查,应该能解决无法获取位置的问题。当你成功获取到位置后,后续的评论获取逻辑就可以正常运行了。
内容的提问来源于stack exchange,提问作者Keith Petrillo
相关产品推荐
相关产品推荐

