Google Maps API返回旧数据:商家营业时间更新未同步
Google Maps Places API 营业时间不同步问题解决
问题背景
为客户开发的网站小部件,通过Place ID调用Google Maps Places API拉取并展示场所营业时间,客户在Google商家资料中修改了周三、周四的歇业设置后,API仍返回旧数据,当前使用opening_hours.weekday_text字段获取信息。
核心原因
- API缓存策略:Places API对场所数据有默认30天的缓存周期,修改商家资料后不会实时同步,需等待缓存过期或触发主动刷新。
- weekday_text字段特性:该字段是预生成的静态格式化文本,更新优先级低于结构化的
opening_hours.periods,缓存更新更滞后。 - 商家资料审核延迟:Google会审核商家资料的修改内容,只有审核通过后,变更才会同步到API数据源。
解决步骤
- 确认商家资料状态:让客户登录Google商家资料后台,检查修改的营业时间是否已完成审核并标记为「已发布」,避免变更处于待审核状态。
- 替换为periods字段动态生成营业时间:放弃使用静态的
weekday_text,改用结构化的opening_hours.periods来渲染,该字段数据更新更及时,且能准确体现歇业状态。修改代码如下:
// 替换原有的info.innerHTML赋值逻辑 const info = document.getElementById("hours-info"); let hoursHtml = ''; // 映射周几名称:0=周日,1=周一,2=周二,3=周三,4=周四,5=周五,6=周六 const weekdayLabels = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']; place.opening_hours.periods.forEach((period, dayIndex) => { const dayName = weekdayLabels[dayIndex]; let displayText = ''; // 无close字段表示当日歇业 if (!period.close) { displayText = '歇业'; } else { // 格式化时间(API返回的是HHMM格式,如"0900"转成"09:00") const openTime = `${period.open.time.slice(0,2)}:${period.open.time.slice(2)}`; const closeTime = `${period.close.time.slice(0,2)}:${period.close.time.slice(2)}`; displayText = `${openTime}-${closeTime}`; } hoursHtml += `${dayName}: ${displayText}<br>`; }); info.innerHTML = hoursHtml;
- 触发缓存刷新:可以通过间隔1-2小时重复调用
getDetails接口,或让客户在商家资料中做一次微小的编辑(比如微调营业时间再改回),强制触发数据同步。 - 验证API数据源:直接在Google官方的Place ID查询页面手动验证该Place ID的最新营业时间,确认数据是否已经同步到API端。
内容的提问来源于stack exchange,提问作者buggy
相关产品推荐
相关产品推荐

