在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能
Go  /  管理员 发布于 4星期前   137
最近项目需要实现一个根据国际邮政编码获取国家城市地址等信息功能
GeoNames相关信息
https://www.geonames.org/
GeoNames是一个免费的全球地理数据库,旨在集成各种来源的免费数据,提供数据库和Web服务;
GeoNames地理数据库覆盖所有国家,包含1100多万个地名,可免费下载;
首先进行https://www.geonames.org/注册登录获取username
官方接口示例:
https://www.geonames.org/export/ajax-postalcode-autocomplete.html
相关限制:
免费:GeoNames数据是免费的,数据是免费提供的。cc by license
(知识共享归属许可)。
在使用带有链接或其他对GeoNames的引用的数据或网络服务时,
您应该归功于GeoNames。
允许商业使用
每个应用程序的每日限额为10000学分(由参数“username”标识),
每小时限额为1000学分。
信用是大多数服务的web服务请求命中。超过限制时会引发异常。
服务水平协议适用于我们的高级网络服务。
ps: 调一次接口基本扣除0.1或者1
直接贴完整代码
该接口属于工具类接口,所以我放在utils中
package utils
import "encoding/json"
// PostalCodeInfo 代表单个邮政编码信息
type PostalCodeInfo struct {
AdminCode2 string `json:"adminCode2"` // 二级行政区划代码
AdminCode1 string `json:"adminCode1"` // 一级行政区划代码
AdminName2 string `json:"adminName2"` // 二级行政区划名称
Lng float64 `json:"lng"` // 经度
CountryCode string `json:"countryCode"` // 国家代码
PostalCode string `json:"postalcode"` // 邮政编码
AdminName1 string `json:"adminName1"` // 一级行政区划名称
PlaceName string `json:"placeName"` // 地点名称
Lat float64 `json:"lat"` // 纬度
}
// PostalCodeResponse 代表完整的邮政编码响应
type PostalCodeResponse struct {
PostalCodes []PostalCodeInfo `json:"postalcodes"` // 邮政编码信息列表
}
// 根据邮政编码获取地址信息
func GeonamesPostalCode(postalCode, country string) (resp *PostalCodeResponse, err error) {
url := "http://api.geonames.org/postalCodeLookupJSON?postalcode=" + postalCode + "&username=你的username&country=" + country
headers := map[string]string{"Content-Type": "application/json"}
r := NewRequest(GetMethod, url, headers, nil, nil)
by, err := r.Request()
if err != nil {
return
}
resp = &PostalCodeResponse{}
err = json.Unmarshal(by, resp)
return
}
调用:
//根据邮政编码获取地址
responseBody, err := utils.GeonamesPostalCode("9101", "")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(responseBody)
执行一下效果:
&{[{5501 18 Tromsø 18.871355420345633 NO 9101
Troms Kvaløysletta 69.69586227718855}
{1970 02 Noardeast-Fryslân 5.99875501395277 NL 9101
AA Friesland Dokkum 53.33159119837194}
{1970 02 Noardeast-Fryslân 5.9982727208188225 NL 9101
AB Friesland Dokkum 53.3312128446125}
{1970 02 Noardeast-Fryslân 5.994903070940829 NL 9101 AD Friesland Dokkum 53.32861321205104} {1970 02 Noardeast-Fryslân 5.991758415080742 NL 9101 AE Friesland Dokkum 53.327625036550565} {1970 02 Noardeast-Fryslân 5.99418802890933 NL 9101 AK Friesland Dokkum 53.32939271948745} {1970 02 Noardeast-Fryslân 5.993259595577623 NL 9101 AP Friesland Dokkum 53.328688108067695} {1970 02 Noardeast-Fryslân 5.99152744954165 NL 9101 AW Friesland Dokkum 53.326581638295764} {1970 02 Noardeast-Fryslân 5.991713595326914 NL 9101 BA Friesland Dokkum 53.325816399171906} {1970 02 Noardeast-Fryslân 5.986627106930621 NL 9101 BE Friesland Dokkum 53.324846367166955} {1970 02 Noardeast-Fryslân 5.988517391272648 NL 9101 BH Friesland Dokkum 53.32547043444516} {1970 02 Noardeast-Fryslân 5.98912796958594 NL 9101 BM Friesland Dokkum 53.32468304628721} {1970 02 Noardeast-Fryslân 5.990036729548056 NL 9101 BP Friesland Dokkum 53.323940381916124} {1970 02 Noardeast-Fryslân 5.989721061370875 NL 9101 BR Friesland Dokkum 53.32415113386434} {1970 02 Noardeast-Fryslân 5.982810429961879 NL 9101 BV Friesland Dokkum 53.32331622393883} {1970 02 Noardeast-Fryslân 5.995314460381245 NL 9101 BW Friesland Dokkum 53.322687656253386} {1970 02 Noardeast-Fryslân 5.990345536161207 NL 9101 BX Friesland Dokkum 53.323423253859595} {1970 02 Noardeast-Fryslân 5.994022396391739 NL 9101 BZ Friesland Dokkum 53.32306176706998} {1970 02 Noardeast-Fryslân 5.9891234030180796 NL 9101 CA Friesland Dokkum 53.322603369489414} {1970 02 Noardeast-Fryslân 5.989476807529781 NL 9101 CC Friesland Dokkum 53.32185895302836}]}
搜一下广州的510000
&{[{
4401 30 Guangzhou Shi 113.25 CN 510000 Guangdong Guangzhou 23.1166667
}]}
完事, 有需要可以按步骤操作,
里面还有很多其他的数据及接口有兴趣的可以自行了解!
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号