如何通过Google Apps Script获取谷歌搜索结果中的地址与电话信息
解决Google自定义搜索API获取商家地址/电话的配置方案
一、修正可编程搜索引擎的站点范围配置
你推测的原因正确,仅指定部分站点会导致API无法抓取谷歌搜索结果中的商家卡片信息,需调整站点设置:
- 登录可编程搜索引擎后台,进入目标引擎的配置页
- 在「Sites to search」区域,选择 「Search the entire web but emphasize included sites」(搜索全网,可优先指定站点),或直接选「Search the entire web」(搜索全网),确保API能覆盖完整的谷歌搜索结果池
二、调整API请求参数,提取本地商家信息
默认的Custom Search API返回普通网页结果,需通过参数和数据解析来获取地址、电话这类本地信息,修改后的代码如下:
function searchResult() { var apiKey = 'your-api-key'; var cx = 'search-engine-id'; var query = 'The Bluegrass Coffee and Bourbon Lounge'; // 构建请求URL,添加必要参数 var requestUrl = 'https://www.googleapis.com/customsearch/v1?key=' + apiKey + '&cx=' + cx + '&q=' + encodeURIComponent(query) + '&num=1'; // 仅返回最相关的结果 var response = UrlFetchApp.fetch(requestUrl); var resultData = JSON.parse(response.getContentText()); // 解析本地商家信息 if (resultData.items?.[0]?.pagemap?.local_result) { var localDetails = resultData.items[0].pagemap.local_result[0]; Logger.log('地址: ' + localDetails.address); Logger.log('电话: ' + localDetails.phone); } else { Logger.log('未抓取到商家本地信息'); } }
三、验证API权限与配额
- 确认你的API密钥已在Google Cloud控制台启用「Custom Search API」
- 检查配额:该API免费配额为每日100次请求,超出后需在控制台申请升级
四、更稳定的替代方案:使用Google Places API
如果自定义搜索API仍无法稳定获取商家信息,推荐使用专门的Places API,该接口专为本地商家信息设计,代码示例如下:
function getPlaceDetails() { var apiKey = 'your-api-key'; var businessName = 'The Bluegrass Coffee and Bourbon Lounge'; // 第一步:搜索商家获取place_id var searchUrl = 'https://maps.googleapis.com/maps/api/place/textsearch/json?query=' + encodeURIComponent(businessName) + '&key=' + apiKey; var searchRes = UrlFetchApp.fetch(searchUrl); var searchData = JSON.parse(searchRes.getContentText()); if (searchData.results.length > 0) { var placeId = searchData.results[0].place_id; // 第二步:通过place_id获取完整商家信息 var detailsUrl = 'https://maps.googleapis.com/maps/api/place/details/json?place_id=' + placeId + '&key=' + apiKey + '&fields=formatted_address,formatted_phone_number'; var detailsRes = UrlFetchApp.fetch(detailsUrl); var detailsData = JSON.parse(detailsRes.getContentText()); Logger.log('地址: ' + detailsData.result.formatted_address); Logger.log('电话: ' + detailsData.result.formatted_phone_number); } else { Logger.log('未找到匹配的商家'); } }
注意:Places API需单独在Google Cloud控制台启用,其配额和计费规则与Custom Search API不同,需提前确认。
内容的提问来源于stack exchange,提问作者user12736831
相关产品推荐
相关产品推荐

