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/1286642.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月11日 04:07:36
下一篇 2025年12月11日 04:07:47

相关推荐

  • 如何安全高效地通过AJAX更新MySQL数据

    本文旨在提供一套完整的指南,讲解如何通过AJAX技术安全且高效地更新MySQL数据库。内容涵盖前端HTML结构优化、采用现代Fetch API进行异步请求、以及后端PHP中至关重要的预处理语句(Prepared Statements)以防止SQL注入,确保数据操作的安全性与可靠性。 优化前端交互与数…

    2025年12月11日
    000
  • AJAX与MySQL异步更新:常见问题、安全实践与优化技巧

    本文旨在解决AJAX异步请求更新MySQL数据库时遇到的常见问题,特别是当直接访问PHP文件有效而通过AJAX调用却失败的情况。我们将深入探讨前端HTML结构、JavaScript事件处理的优化,并强调后端PHP使用预处理语句进行数据库操作的安全性与重要性,旨在提供一套健壮、高效且安全的解决方案。 …

    2025年12月11日
    000
  • PHP导入CSV数据至MySQL:空值处理策略与实践

    本教程旨在解决PHP从CSV文件导入数据至MySQL数据库时,因CSV中存在空值导致SQL插入失败的问题。我们将详细介绍如何利用PHP的条件判断机制,在数据插入前自动识别并填充空字段,确保不同数据类型(如整数和字符串)的字段都能被正确处理,从而实现数据平滑导入,避免手动修改CSV文件的繁琐。 问题背…

    2025年12月11日
    000
  • 合并数组并保留键名的实用技巧

    本文旨在介绍如何高效地合并一个包含多个子数组的数组,并保留每个子数组的键名,最终得到一个包含所有键值对的单一数组。我们将探讨一种简单易懂的实现方法,并解释其背后的逻辑,帮助你更好地理解和应用数组合并技巧。 在PHP中,有时我们需要将一个包含多个子数组的数组合并成一个单一数组,并且要保留每个子数组中的…

    2025年12月11日
    000
  • 解决 Laravel 与 Vue.js 应用中数据未正确显示的问题

    本文旨在帮助开发者解决在使用 Laravel 作为后端 API,Vue.js 作为前端框架构建应用时,数据无法正确显示的问题。通过分析常见的错误原因,并提供详细的代码示例和解决方案,确保数据能从 Laravel 后端成功传递到 Vue.js 前端,并正确渲染。 在使用 laravel 和 vue.j…

    2025年12月11日
    000
  • 解决 Laravel 迁移中外键重复列错误:foreignId 的正确使用

    本文探讨 Laravel 8 迁移中常见的“重复列”外键错误,该错误通常源于同时使用 unsignedBigInteger 和 foreignId 定义同一列。教程将详细解释 foreignId()->constrained() 的正确用法,指出其已包含列创建逻辑,从而避免重复定义,确保数据库…

    2025年12月11日
    000
  • jQuery Ajax提交复杂表单数据:正确处理数组元素

    本教程详细讲解如何利用jQuery Ajax高效提交包含数组结构命名(如name=”item[0][prop]”)的HTML表单数据。通过使用jQuery.serialize()方法,可将此类复杂数据自动转换为标准的URL编码格式,确保服务器端(如PHP的$_POST超全局变…

    2025年12月11日
    000
  • Laravel迁移中外键重复列错误解决方案:正确使用foreignId

    本文旨在解决Laravel 8迁移中添加外键时遇到的“列已存在”错误。核心问题在于同时定义unsignedBigInteger和foreignId导致列重复。教程将详细解释foreignId的正确用法,并提供规范的代码示例,确保外键创建的顺畅与高效,避免常见的迁移冲突,提升数据库结构定义的准确性。 …

    2025年12月11日
    000
  • 解决Laravel迁移中外键重复列错误:正确使用foreignId

    本文旨在解决Laravel数据库迁移中遇到的外键重复列错误。当使用php artisan migrate:fresh时,若同时显式定义列类型(如unsignedBigInteger)又使用foreignId方法创建外键,会导致Duplicate column name错误。核心解决方案是理解fore…

    2025年12月11日
    000
  • JavaScript日期操作:为HTML日期输入框动态设置最大日期

    本文详细介绍了如何使用JavaScript为HTML日期输入框动态设置最大日期。通过利用Date对象的setDate()方法,而非不存在的addDays()方法,可以精确地增加指定天数,并将计算出的日期格式化为YYYY-MM-DD字符串后赋值给元素的max属性,从而实现日期范围的限制,提升用户体验,…

    2025年12月11日
    000
  • 使用jQuery和Ajax提交包含数组命名元素的HTML表单

    本文详细介绍了如何使用jQuery的Ajax功能,正确提交包含数组命名(如name=”array[index][field]”)的HTML表单数据。通过利用jQuery.serialize()方法,可以确保数据以标准URL编码格式发送,从而在服务器端(如PHP的$_POST)…

    2025年12月11日 好文分享
    000
  • JavaScript日期计算与HTML日期输入框的max属性动态设置指南

    本文旨在详细阐述如何在JavaScript中正确地对日期进行加减操作,特别是增加指定天数,并利用计算结果动态设置HTML 元素的max属性。文章将纠正常见的addDays()方法误区,提供基于setDate()的正确实现,并结合实际应用场景,提供完整的代码示例和最佳实践,帮助开发者提升日期处理的准确…

    2025年12月11日
    000
  • JavaScript日期操作:为HTML日期输入框设置动态最大日期

    本教程详细讲解如何使用JavaScript为HTML日期输入框动态设置最大日期。我们将学习如何从用户选择的日期中增加指定天数(例如21天),并利用Date对象的setDate()方法进行精确计算。文章还将指导如何将计算出的新日期格式化为HTML input type=”date&#822…

    2025年12月11日
    000
  • PHP array_walk 回调函数中引用传参的正确姿势

    本文详细探讨了在 PHP array_walk 函数中使用回调函数时,如何正确地传递变量引用。通过分析常见的错误尝试,如在 array_walk 调用时使用引用符号,或在回调函数定义中忽略引用,文章揭示了正确的实现方法:在回调函数的参数定义中明确使用引用符号 &。内容涵盖 array_wal…

    2025年12月11日
    000
  • Nginx环境下为PHP 7.4安装SOAP扩展的完整教程

    本文旨在解决在Nginx服务器上,为PHP 7.4版本安装SOAP扩展时遇到的常见问题。通过详细的步骤和代码示例,帮助开发者正确安装并启用SOAP扩展,从而确保PHP 7.4应用能够正常使用SOAP协议进行数据交换。文章涵盖了扩展安装、配置以及重启服务的关键步骤,并提供了一些常见问题的排查方法。 安…

    2025年12月11日
    000
  • 博客系统开发怎么做?PHP+MySQL项目实战

    开发博客系统需先理清需求,选择php+mysql技术栈。一、搭建基础结构:采用mvc模式规划目录,手动实现逻辑更利于理解流程。二、数据库设计:合理建立users、categories、posts、comments表并设置外键与加密字段。三、实现功能模块:按顺序完成注册登录、文章管理、分类管理、评论功…

    2025年12月11日 好文分享
    000
  • 解决PHPMyAdmin操作数据库时的日志文件过大问题

    要解决phpmyadmin操作导致数据库日志文件过大的问题,1.应关闭不必要的通用查询日志;2.配置二进制日志的过期时间和最大大小;3.合理设置慢查询日志的阈值和记录条件;4.定期手动或自动清理日志文件;5.使用logrotate等工具进行日志轮转管理;6.避免在phpmyadmin中执行大规模低效…

    2025年12月11日 好文分享
    000
  • 如何优化PHPMyAdmin操作数据库的并发处理能力

    提高phpmyadmin并发处理能力需从服务器资源优化、php配置调整、phpmyadmin配置优化、数据库查询优化等方面入手。1. 优化服务器资源配置,如升级cpu、内存和磁盘i/o,并使用监控工具分析负载情况;2. 调整php参数,包括memory_limit、max_execution_tim…

    2025年12月11日 好文分享
    000
  • API接口调用有哪些方法?cURL请求详细使用说明

    curl 是一种常用的命令行工具,用于通过 url 语法进行数据传输,支持 http、https、ftp 等多种协议。1. 调用 api 时,可使用 get 请求获取数据,如 curl https://api.example.com/data;2. 使用 post 请求提交 json 或表单数据,并…

    2025年12月11日 好文分享
    000
  • 解决Apache权限问题:ZipArchive创建临时文件失败

    本文旨在解决在使用Apache服务器时,PHP的ZipArchive类在创建临时文件时出现“Permission denied”错误的问题。通过分析权限设置、目录结构以及Apache用户权限,提供一种有效的解决方案,帮助开发者正确配置服务器权限,避免此类错误。 在使用PHP的ZipArchive类创…

    2025年12月11日
    000

发表回复

登录后才能评论
关注微信