我找到了几个node.js modules,用于通过ip地址查找有关客户端位置和网络的信息。
要求:
位置 - 国家,城市,州,纬度,经度等。
网络 - 互联网服务提供商,互联网连接类型和互联网速度等。
数据准确性 - 最大可能性。
注意:寻找服务器端解决方案。
上述模块使用maxmind data。我也读过关于maxmind data accuracy的内容。
我很难选择上面的node.js模块,我想知道是否有更好的node.js框架可用于查找符合我要求的信息或任何其他可以移植到node.js的语言插件。
任何想法都会很棒。
答案 0 :(得分:46)
使用基于IP的地理定位是可能的,但不是很准确。因此,我建议您考虑使用混合方法,例如尝试通过浏览器内的HTML5地理位置API获取用户位置,并在必要时回退到服务器端。
我查看了node.js可用的两个最常用的geoip / -location模块,它们都使用MaxMind提供的数据集。 AFAIK你必须手动保持这些数据库2日期,这是一个明显的下降。因此,您可以考虑编写一个小同步服务/脚本,每月更新一次数据库。 (可以找到有关MaxMinds免费解决方案的更多信息here)。
kuno/GeoIP
是一个GeoIP绑定,因此它的核心是使用libGeoIP C库,这是可以的,但可能不像纯JavaScript实现bluesmoon/node-geoip
提供的那样可移植。两者都没关系,这取决于你更喜欢哪个库。在性能方面你必须做一些替补(如果这个主题对你很重要)......这个问题没有一般的答案,哪种类型的模块(C-binding / native)会更快。
如果您愿意花几块钱,还可以查看MaxMinds Web Service,这是一个简单的REST API,将是最精确的方法。文档非常好 - 所以开始使用它不会有问题。
答案 1 :(得分:28)
如果您获得了IP,您可以随时拨打外部服务以获取位置信息,例如freegeoip.net并使用请求模块。
(ip, location) ->
url = 'http://freegeoip.net/json/' + ip
request.get url, (error, response, body) ->
if !error && response.statusCode == 200
data = JSON.parse body
location data
对于网络信息,我没有解决方案,但我也在寻找解决方案。
答案 2 :(得分:11)
您可以通过我的API http://ipinfo.io API获取您的所有信息:
$ curl ipinfo.io
{
"ip": "67.188.232.131",
"hostname": "c-67-188-232-131.hsd1.ca.comcast.net",
"city": "Mountain View",
"region": "California",
"country": "US",
"loc": "37.4192,-122.0574",
"org": "AS7922 Comcast Cable Communications, Inc.",
"postal": "94043"
}
它支持JSONP和CORS,因此您可以在服务器端或客户端使用它。有关详细信息,请访问http://ipinfo.io/developers