Google My Business API v1:正确使用readMask获取商家位置信息

Google My Business API v1:正确使用readMask获取商家位置信息

本教程旨在解决在使用Google My Business Business Information API v1获取商家位置列表时,因readMask参数格式不正确导致的INVALID_ARGUMENT错误。核心在于,readMask必须指定Location资源自身的有效字段,而非其他关联资源或无效字段,以确保API请求的成功执行和数据的精准获取。

随着google my business api的迭代更新,尤其是从v4版本向更细粒度的服务(如businessinformation)迁移,开发者需要适应新的api结构和参数要求。在获取商家位置列表时,readmask参数是控制返回数据字段的关键,它允许客户端只请求所需的数据,从而提高性能并减少带宽消耗。

问题解析:readMask参数的误用

在使用Google_Service_MyBusinessBusinessInformation服务的accounts.locations.list方法时,开发者可能会遇到HTTP 400 INVALID_ARGUMENT错误,具体错误信息为Invalid field mask provided。这通常是由于readMask参数中包含了API不识别或不属于Location资源直接属性的字段。

例如,以下代码片段展示了一个常见的错误用法:

setAuthConfig('path/to/your/credentials.json'); // 替换为您的凭据文件路径$client->addScope('https://www.googleapis.com/auth/business.manage'); // 必要的API范围try {    $my_business_account = new MyBusinessAccountManagement($client);    $list_accounts_response = $my_business_account->accounts->listAccounts();    if (empty($list_accounts_response->getAccounts())) {        echo "未找到任何账户。n";        exit;    }    $account = $list_accounts_response->getAccounts()[0]; // 获取第一个账户    $mybusinessService = new MyBusinessBusinessInformation($client);    $locations = $mybusinessService->accounts_locations;    $queryParams = [        "pageSize" => 10,        // 错误示例:readMask 包含了非 Location 资源自身的字段        'readMask' => "user.display_name,photo"     ];    $locationsList = $locations->listAccountsLocations($account->name, $queryParams);    // 处理返回的位置数据    if ($locationsList->getLocations()) {        foreach ($locationsList->getLocations() as $location) {            echo "Location Name: " . $location->getName() . "n";            // 尝试访问 readMask 中指定的字段,但这里会因为 readMask 错误而无法获取正确数据        }    } else {        echo "未找到任何位置。n";    }} catch (Exception $e) {    echo "发生错误: " . $e->getMessage() . "n";    if ($e->getCode() === 400) {        // 尝试解析更详细的错误信息        $errors = json_decode($e->getMessage(), true);        if (isset($errors['error']['details'][0]['fieldViolations'][0]['description'])) {            echo "错误详情: " . $errors['error']['details'][0]['fieldViolations'][0]['description'] . "n";        }    }}

上述代码中,readMask被设置为”user.display_name,photo”。然而,user.display_name和photo并非Location资源(https://developers.google.com/my-business/reference/businessinformation/rest/v1/locations)的直接顶级字段。readMask参数仅支持指定Location对象本身的属性,例如name、title、storeCode、websiteUri等。试图访问非直接属性会导致API服务器拒绝请求,并返回INVALID_ARGUMENT错误。

解决方案:正确构建readMask

解决此问题的关键在于,严格按照Google My Business Business Information API的Location资源定义来构建readMask。这意味着readMask中列出的字段必须是Location对象中直接可用的属性。

以下是一些Location资源常用的有效字段示例:

name:资源的完整名称,包括账户和位置ID。title:商家在Google Maps上显示的名称。storeCode:商家内部用于识别位置的唯一代码。websiteUri:商家的官方网站URL。phoneNumbers:商家的联系电话信息。address:商家的物理地址。latlng:商家的经纬度。openInfo:商家的营业状态信息。regularHours:商家的常规营业时间。categories:商家的业务类别。

修正后的代码示例:

setAuthConfig('path/to/your/credentials.json'); // 替换为您的凭据文件路径$client->addScope('https://www.googleapis.com/auth/business.manage'); // 必要的API范围try {    $my_business_account = new MyBusinessAccountManagement($client);    $list_accounts_response = $my_business_account->accounts->listAccounts();    if (empty($list_accounts_response->getAccounts())) {        echo "未找到任何账户。n";        exit;    }    $account = $list_accounts_response->getAccounts()[0]; // 获取第一个账户    $mybusinessService = new MyBusinessBusinessInformation($client);    $locations = $mybusinessService->accounts_locations;    $queryParams = [        "pageSize" => 10,        // 正确示例:readMask 包含了 Location 资源自身的有效字段        'readMask' => "name,title,storeCode,websiteUri,address"    ];    $locationsList = $locations->listAccountsLocations($account->name, $queryParams);    if ($locationsList->getLocations()) {        echo "成功获取商家位置列表:n";        foreach ($locationsList->getLocations() as $location) {            echo "----------------------------------------n";            echo "位置名称 (API Name): " . $location->getName() . "n";            echo "商家标题 (Title): " . $location->getTitle() . "n";            echo "门店代码 (Store Code): " . $location->getStoreCode() . "n";            echo "网站URI (Website URI): " . $location->getWebsiteUri() . "n";            // 获取地址信息,地址是一个对象,需要进一步解析            $address = $location->getAddress();            if ($address) {                echo "地址: " . $address->getPostalCode() . " " . $address->getLocality() . ", " . $address->getAdministrativeArea() . ", " . $address->getRegionCode() . "n";            }        }    } else {        echo "未找到任何位置。n";    }} catch (Exception $e) {    echo "发生错误: " . $e->getMessage() . "n";    if ($e->getCode() === 400) {        $errors = json_decode($e->getMessage(), true);        if (isset($errors['error']['details'][0]['fieldViolations'][0]['description'])) {            echo "错误详情: " . $errors['error']['details'][0]['fieldViolations'][0]['description'] . "n";        }    }}

注意事项与最佳实践

查阅官方文档: 始终以Google My Business Business Information API的官方Location资源文档(https://developers.google.com/my-business/reference/businessinformation/rest/v1/locations)为准,了解所有可用的字段及其数据类型。这是避免readMask错误的根本方法。精确指定: readMask参数的目的是为了请求精确的数据。只请求你确实需要的字段,这不仅能避免INVALID_ARGUMENT错误,还能优化API调用的性能和响应时间,减少不必要的数据传输。嵌套字段: 对于嵌套字段(例如address对象下的locality),readMask通常只需要指定顶级字段(例如address)。API客户端库会自动解析并返回该对象下的所有子字段,或者文档会明确指出如何指定嵌套路径。在Location资源中,像address、openInfo等都是复杂对象,指定它们会返回整个对象结构。错误处理: 在生产环境中,务必实现健壮的错误处理机制。捕获并解析API返回的错误信息(特别是HTTP 400响应体中的fieldViolations),以便快速定位和解决问题。

总结

readMask参数在Google API中扮演着至关重要的角色,它控制着API响应中包含的数据字段。对于Google My Business Business Information API的accounts.locations.list方法,解决INVALID_ARGUMENT错误的关键在于确保readMask中指定的字段是Location资源本身定义的有效顶级属性。通过仔细查阅API文档并遵循正确的字段命名规范,开发者可以避免此类常见错误,并高效、准确地获取所需的商家位置数据。

以上就是Google My Business API v1:正确使用readMask获取商家位置信息的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1261981.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月10日 07:09:13
下一篇 2025年12月10日 07:09:28

相关推荐

  • PHP调用AI智能语音助手 PHP语音交互系统搭建

    用户语音输入通过前端javascript的mediarecorder api捕获并发送至php后端;2. php将音频保存为临时文件后调用stt api(如google或百度语音识别)转换为文本;3. php将文本发送至ai服务(如openai gpt)获取智能回复;4. php再调用tts api…

    2025年12月10日 好文分享
    000
  • Twilio通话保持与恢复:会议模式与独立呼叫腿处理

    本文详细阐述了在Twilio中实现通话保持(hold)与恢复(unhold)的两种主要方法。首选方案是利用Twilio的会议(Conference)功能,通过更新会议参与者资源轻松实现通话保持和恢复,并可自定义保持音乐。另一种方法是处理独立的呼叫腿(call legs),这需要更复杂的TwiML逻辑…

    2025年12月10日
    000
  • 如何用PHP结合AI实现自动摘要 PHP长文快速生成摘要

    使用php结合ai实现自动摘要的核心是调用ai服务api,如openai或云平台nlp服务;2. 具体步骤包括获取api密钥、准备纯文本、用curl发送post请求、解析json响应并展示摘要;3. 摘要能高效筛选信息、提升可读性、辅助内容管理并适应碎片化阅读;4. 选模型需考虑摘要类型(抽取式或生…

    2025年12月10日 好文分享
    000
  • 如何用PHP搭建数字名片平台 PHP名片设计与分享功能

    用户与权限管理:实现注册、登录、找回密码及多级权限控制,利用php框架自带认证系统确保安全;2. 名牌创建与编辑模块:提供多模板选择、字段自定义(json存储)、富文本排版与实时预览,提升交互体验;3. 名片数据存储与管理:数据库结构化存储内容与样式,api保障数据增删改查一致性;4. 分享与传播机…

    2025年12月10日 好文分享
    000
  • 将哈希值转换为十进制数值:PHP 教程

    本教程旨在指导开发者如何将哈希函数(例如 HMAC_SHA256)的输出结果中的前四个字节转换为十进制数值(0-255)。通过示例代码和详细解释,我们将展示如何使用 PHP 实现这一转换过程,并提供一些优化技巧。重点在于理解 unpack 函数的用法以及其在字节处理中的作用。 在许多安全相关的应用中…

    2025年12月10日
    000
  • 如何用Docker限制PHP容器资源 PHP服务内存与CPU控制策略

    要限制php容器的资源,需使用docker的cgroup功能,通过命令行参数或docker-compose.yml配置。1.内存限制:使用–memory指定最大内存,–memory-swap控制内存+swap总量,–memory-reservation设软限制。2…

    2025年12月10日 好文分享
    000
  • PHP中将哈希值的字节转换为十进制值

    本文档旨在指导开发者如何将哈希函数(如HMAC_SHA256)的输出结果中的前四个字节转换为十进制数值(0-255)。我们将通过PHP代码示例,详细解释如何提取、解包哈希值,并展示如何简化提取前四个字节的过程。理解这些步骤对于实现某些密码学算法,如Provably Fair算法,至关重要。 哈希值与…

    2025年12月10日
    000
  • 如何启用MacOS PHP环境的OPcache功能 PHP性能加速配置步骤

    启用opcache核心步骤是:1. 定位php.ini文件路径;2. 编辑php.ini启用opcache配置项;3. 重启web服务器或php-fpm服务。修改后通过phpinfo()验证是否启用成功。opcache通过缓存已编译的php操作码,显著提升应用执行速度,降低服务器cpu和内存占用,提…

    2025年12月10日 好文分享
    000
  • 如何用PHP开发短链接生成器 PHP短链接存储与跳转

    开发php短链接生成器需建立长短url映射关系,核心是数据库存储(如mysql表含id、long_url、short_code、created_at);2. 短码生成推荐base62编码自增id以避免冲突且高效,或随机字符串+数据库唯一性校验重试机制;3. 高性能重定向依赖short_code字段数…

    2025年12月10日 好文分享
    000
  • 如何用Docker保持PHP环境一致 PHP容器化本地与生产部署

    使用docker保持php环境一致的核心方法是构建包含所有依赖的镜像并在任何地方运行。具体步骤包括:1. 编写dockerfile,选择合适的php基础镜像(如php:8.1-fpm-alpine),安装系统依赖和php扩展,设置工作目录并复制项目文件,安装composer依赖,自定义php配置,暴…

    2025年12月10日 好文分享
    000
  • PHP实现内容审核系统变现 PHP自动化审核技术应用

    php内容审核系统变现的核心是将风险管理能力产品化,通过api服务按调用量收费、saas订阅模式提供平台、定制化解决方案提升利润率;2. 技术突破点在于集成第三方ai服务实现分级过滤与按需调用,构建可配置规则引擎提升灵活性,并通过人工复审反馈优化模型准确率;3. 系统架构需采用异步消息队列处理任务、…

    2025年12月10日 好文分享
    000
  • 如何配置PHP环境支持Composer PHP依赖管理器安装与使用方法

    composer要求php版本至少为7.2,推荐使用7.4或更高,1. 确保php cli可用且版本合适,windows用户需将php路径添加到系统path,macos用户可用homebrew安装并配置,linux用户通过包管理器安装php-cli;2. 安装必要扩展如json、mbstring、z…

    2025年12月10日 好文分享
    000
  • 解决 Laravel 自定义 Artisan 命令无法执行的问题

    本文旨在帮助开发者解决 Laravel 项目中自定义 Artisan 命令无法执行的问题。通过分析命令注册方式、调度配置以及可能的命名空间问题,提供清晰的解决方案,确保自定义命令能够正确运行,从而实现定时任务或其他自定义功能。 在 Laravel 项目中,自定义 Artisan 命令是扩展框架功能的…

    2025年12月10日
    000
  • 如何使用Docker设置PHP环境变量 PHP容器动态配置参数方法

    设置php环境变量在docker中有三种主要方式:使用dockerfile、docker-compose.yml文件或运行时参数。1. dockerfile方式是在构建镜像时通过env指令设置,适用于静态配置,但无法动态修改;2. docker-compose.yml的environment指令提供…

    2025年12月10日 好文分享
    000
  • PHP调用AI语音合成服务 PHP文字转语音功能实现

    php实现文字转语音需集成ai服务商api,如百度ai、腾讯云、阿里云或aws polly等;2. 具体步骤为注册服务商获取密钥、获取access token、研读api文档、用curl或guzzle发送请求并处理音频流或json响应;3. 选择服务应基于语音质量、语言支持、价格、稳定性、文档完善度…

    2025年12月10日 好文分享
    000
  • PHP教程:解析包含中文的文本文件并生成JSON数据

    本文将介绍如何使用PHP解析包含中文的文本文件,并将其转换为JSON格式的数据。重点在于解决中文在JSON编码时出现的Unicode转义问题,通过JSON_UNESCAPED_UNICODE选项,确保生成的JSON数据能够正确显示中文内容,同时提供美化输出的JSON_PRETTY_PRINT选项,使…

    2025年12月10日
    000
  • 如何用PHP开发AI推荐系统 PHP智能推荐算法集成方法

    php推荐系统通过调用python实现的ai模型api来解决冷启动问题,对新用户采用基于人口统计、注册信息或探索式推荐,对新物品采用基于内容推荐或人工标注;2. 进行a/b测试时,将用户流量分组,定义点击率等指标,收集行为数据并进行统计分析,最终选择最优策略;3. 通过数据匿名化、差分隐私、数据安全…

    2025年12月10日 好文分享
    000
  • 将哈希值转换为十进制:PHP中提取并转换字节的实用指南

    文章摘要:本文详细介绍了如何在PHP中将哈希值(通常表示为十六进制字符串)转换为一系列十进制值(0-255)。重点讲解了如何从哈希字符串中提取前四个字节,并将这些字节转换为相应的十进制表示,为后续的算法实现(如ProvablyFair算法)提供必要的数值基础。通过示例代码和优化建议,帮助开发者高效地…

    2025年12月10日
    000
  • PHP/Laravel中基于循环数据动态配置多值策略

    本文探讨在PHP/Laravel应用中,如何高效且灵活地处理需要根据循环数组中不同元素动态配置多组值的问题。针对传统硬编码配置的局限性,文章提出并演示了一种利用数组元素自身属性作为动态键的策略,从而实现多应用凭证或其他配置项的自动化赋值,显著提升代码的可维护性和扩展性。 背景:动态配置的挑战 在开发…

    2025年12月10日
    000
  • 动态配置Laravel多应用凭证:基于循环数据的灵活策略

    本文探讨了在PHP/Laravel应用中,如何高效且动态地为多个应用或服务配置凭证。针对从数据库获取的不同应用信息(如Okta应用),传统硬编码方式难以维护和扩展。文章提供了一种基于循环数据中动态键的解决方案,实现了配置的自动化加载,极大地提升了系统的灵活性、可扩展性和可维护性,特别适用于多租户或多…

    2025年12月10日
    000

发表回复

登录后才能评论
关注微信