使用 HERE Maps REST api 的 V7 版本,我试图匹配从
/browse
和 /discover
端点获取的数据,并将它们与从游客的 Wikimedia Action API 获取的数据明确匹配指南应用程序。
例如,通过调用以下端点:
curl "https://discover.search.hereapi.com/v1/browse?in=circle%3A45.4627338,9.1777323%3Br%3D300&limit=30&apiKey={API KEY REDACTED}&categories=300-3000-0025&at=45.4627338,9.1777323&lang=en-US" \
-H 'Accept: application/json' \
-H 'Accept-Encoding: gzip'
我们得到米兰中心周围兴趣点的 JSON 格式数组,这是其中的一个元素:
{
"title":"Basilica di Sant'Ambrogio",
"id":"here:pds:place:380u0nd8-2d259709e0aa42908182e1a03a8d9aca",
"language":"en",
"resultType":"place",
"address":{
"label":"Basilica di Sant'Ambrogio, Piazza Sant'Ambrogio, 15, 20123 Milan MI, Italy",
"countryCode":"ITA",
"countryName":"Italy",
"state":"Lombardy",
"countyCode":"MI",
"county":"Milan",
"city":"Milan",
"district":"Duomo",
"street":"Piazza Sant'Ambrogio",
"postalCode":"20123",
"houseNumber":"15"
},
"position":{
"lat":45.4624,
"lng":9.1757
},
"access":[
{
"lat":45.46219,
"lng":9.17481
}
],
"distance":163,
"categories":[
{
"id":"300-3200-0030",
"name":"Church",
"primary":true
},
{
"id":"300-3000-0023",
"name":"Tourist Attraction"
},
{
"id":"300-3000-0025",
"name":"Historical Monument"
},
{
"id":"300-3100-0028",
"name":"History Museum"
},
{
"id":"300-3100-0029",
"name":"Art Museum"
},
{
"id":"900-9300-0221",
"name":"Residential Area\/Building"
}
],
"references":[
{
"supplier":{
"id":"core"
},
"id":"1175957532"
},
{
"supplier":{
"id":"core"
},
"id":"1175957749"
},
{
"supplier":{
"id":"core"
},
"id":"50930489"
},
{
"supplier":{
"id":"core"
},
"id":"800801056"
},
{
"supplier":{
"id":"tripadvisor"
},
"id":"591187"
},
{
"supplier":{
"id":"yelp"
},
"id":"QIqHOCwwIy1kFTPiPIeGnQ"
}
],
"contacts":[
{
"phone":[
{
"value":"+39028057310"
},
{
"value":"+390286450895",
"categories":[
{
"id":"300-3100-0028"
},
{
"id":"300-3200-0030"
}
]
}
],
"www":[
{
"value":"http:\/\/www.basilicasantambrogio.it",
"categories":[
{
"id":"300-3100-0028"
},
{
"id":"300-3200-0030"
}
]
}
]
}
]
}
我可以看到 HERE 地图返回一系列与 Tripadvisor 和 Yelp 匹配的实体 ID,但没有任何内容明确指向维基百科。
似乎可以使用 show_content
参数在 API 的
已弃用版本上获取此信息,但我找不到与当前可用版本等效的内容。
有人能够在两个系统之间进行翻译吗?我想我可以采用不太精确的方法,并在纬度、经度和地名之间进行粗略匹配,但这感觉太“hacky”,我宁愿避免对每个位置向维基百科发出多个查询请求。
有人遇到过类似的事情吗?我觉得我错过了一些明显的东西,但我不知道我实际上应该使用哪些参数。
首先,您需要使用正常的措辞(例如城市名称等)查询维基百科。并对其进行优化,直到您知道结果页面很可能是您每次需要的页面。 然后维基百科 API 会返回给你一大堆难以使用的数组,但有一个键值,即每个维基百科页面的 ID。它隐藏在一个巨大的数组中,这决定了您是否获得正确的页面。
很抱歉代码非常粗糙,但这是非常古老的并且维基百科 API 非常复杂。我希望它可以作为一个例子。 您可以想象缺失的值是什么,它应该为您提供一个起点。 这里我提取一篇文章的标题和页面 ID,然后通过名称、简短描述使用正常查询来提取文章的内容。因此,我有效地使用了 2 个不同的维基百科 API,并向它们提供我从 HERE API 获得的数据。因此,您可以将这两个函数视为单独的示例。
//wikipedia title
wikiQueryBaseUrl="https://en.wikipedia.org/w/api.php?format=json&origin=*&action=query&titles=";
if(typeof city !== 'undefined'){
wikiQueryUrl=wikiQueryBaseUrl+city;}
else{wikiQueryUrl=wikiQueryBaseUrl+inputValue};
fetch(wikiQueryUrl)
.then((response) => response.json())
.then((data) => {
preWikiData = data;
pageId = Object.keys(preWikiData.query.pages)[0];
if(preWikiData.query.pages[pageId] !== 'undefined'){
wikiLink="http://en.wikipedia.org/?curid="+pageId}
if(pageId == '-1'){
wikiLink="https://en.wikipedia.org/";
};
//wikipedia data
wikiQueryBaseUrl="https://en.wikipedia.org/w/api.php?format=json&origin=*&action=query&prop=extracts&exintro&explaintext=true&titles=";
wikiQueryUrl=wikiQueryBaseUrl+country.replace(' ', '')+"&redirects=1";
fetch(wikiQueryUrl)
.then((response) => response.json())
.then((data) => {
preWikiData = data;
pageId = Object.keys(preWikiData.query.pages)[0];
if(typeof preWikiData.query.pages[pageId].title !== 'undefined'){
wikiData=preWikiData.query.pages[pageId].extract;}
});