如何通过经纬度利用Google Knowledge Graph/Wikidata API获取商家描述
嘿,我之前也碰到过这个问题——Google Places API确实主打本地服务数据(评论、营业时间这些),那种百科式的商家描述得靠Google Knowledge Graph API或者Wikidata API来拿,给你详细说下怎么操作:
一、用Google Knowledge Graph API 抓取商家描述
首先你得先去Google Cloud控制台申请Knowledge Graph的API密钥(和Places API用同一个项目就行),然后通过它的entities:search端点来查询:
- 构造请求参数:
query:精确到商家名称+地点(比如"星巴克 北京国贸店"),提高匹配准确率types:指定类型为LocalBusiness或者Organization,过滤无关结果key:你的API密钥- 可选参数:
limit=1可以直接返回最匹配的结果
示例请求(替换成你的密钥):
GET https://kgsearch.googleapis.com/v1/entities:search?query=星巴克 北京国贸店&key=YOUR_API_KEY&types=LocalBusiness&limit=1
- 解析响应结果:
响应里的items[0].result.description就是你要的那种红圈标注的描述内容。比如星巴克的结果里会返回类似“星巴克是美国一家跨国连锁咖啡店...”的文本。
注意:如果同一个商家有多个条目,记得看score字段(分数越高匹配度越高),挑最高分的那个结果就行。
二、用Wikidata API 获取商家描述
Wikidata是免费的结构化知识库,很多商家都有对应的实体条目,步骤分两步:
第一步:搜索商家对应的Wikidata实体ID
用Wikidata的搜索API找到目标商家的ID:
GET https://www.wikidata.org/w/api.php?action=wbsearchentities&search=星巴克 北京国贸店&language=zh&format=json
响应里的search[0].id就是该商家的Wikidata ID(比如星巴克总部是Q37158)。
第二步:获取实体的描述信息
拿到ID后,调用wbgetentities接口获取描述:
GET https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q37158&props=descriptions&languages=zh&format=json
解析响应里的entities[Q37158].descriptions.zh.value就是中文描述内容。
小技巧:如果你已经有商家的Google Places ID,可以通过Wikidata的属性P1997(Google Places ID)来直接关联查询,这样匹配更精准,避免重名问题。
一些补充提醒
- Google Knowledge Graph有调用配额限制,记得在控制台查看配额情况;Wikidata是免费的,但要遵守它的速率限制(不要频繁请求)
- 如果商家比较小众,可能没有对应的知识库条目,这时候就拿不到描述,这种情况可以考虑用Places API的
editorial_summary字段(如果有的话)作为补充 - 存储到数据库的时候,记得加上来源标识(比如标注是来自Knowledge Graph还是Wikidata),方便后续更新
内容的提问来源于stack exchange,提问作者prog1011
相关产品推荐
相关产品推荐

