侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

beego+GeoLite2免费数据库获取ip地址经纬度等定位归属信息

Go  /  管理员 发布于 1个月前   82

GeoLite2数据库是免费的IP地理定位数据库

支持离线数据库下载,还免费,当然也有付费的比免费的更准确详情等等,

直接从用户的IP地址中获取用户的经度和纬度等等更详细的信息


官方网站文档:

https://dev.maxmind.com/geoip/geolite2-free-geolocation-data?lang=en

GeoLite2离线数据库文件(GeoLite2-City.mmdb.gz)下载地址:

https://www.zongscan.com/file/49.html

依赖包

"github.com/oschwald/geoip2-golang"


路由:(\routers\router.go)

//IP地址定位
beego.Router("/iptolocation", &controllers.IndexController{}, "get:IpToLocation;post:IpToLocation")


ip地址定位测试

控制器

package controllers

import (
"fmt"
"gblog/models"
"net"

"github.com/oschwald/geoip2-golang"

"github.com/astaxie/beego/orm"
)

type IndexController struct {
BaseController
}

//ip定位
func (c *IndexController) IpToLocation() {
c.Data["title"] = " GeoLite2 IP地址定位"
c.Data["keywords"] = "GeoLite2,IP地址定位"
c.Data["description"] = "GeoLite2 IP地址定位"

db, err := geoip2.Open("static/GeoLite2-City.mmdb")

if err != nil {
fmt.Println(err)
}

defer db.Close()

if c.Ctx.Request.Method == "POST" {
ipAddress := c.GetString("ipaddress")

if ipAddress != "" {
ip := net.ParseIP(ipAddress)
record, err := db.City(ip)
if err != nil {
fmt.Println(err)
}

c.SuccessJson(record)
}
}

c.TplName = "iptolocation.html"
}


视图:

{{template "public/header.html" .}}
<div class="row clearfix">
    <div class="col-md-12 column">
        <div class="row clearfix">
            <div class="col-md-4 column"></div>
            <div class="col-md-4 column">
                <h3 style="padding: 5rem;">IP地址定位信息查询</h3>
                <form id="myForm" action="/iptolocation" method="post" role="form">
                    <div>
                        <label for="inputEmail3" class="col-sm-2 control-label">IP</label>
                        <div>
                        <input type="name" name="ipaddress" id="ipaddress" placeholder="请输入ip地址" />
                        </div>
                    </div>
                    <div id="ipinfo" class="alert alert-success alert-dismissable">
               <button type="button" data-dismiss="alert" aria-hidden="true">×</button>
               <pre></pre> 
               </div>
                    <div>
                        <div class="col-sm-offset-2 col-sm-10"><button type="submit" class="btn btn-default">查询ip地址信息</button></div>
                    </div>
                </form>
            
            </div>
            <div class="col-md-4 column"></div>
        </div>
    </div>
</div>
<script>
    $(document).ready(function() {
        // bind form using ajaxForm
        $('#myForm').ajaxForm({
            dataType:  'json',
            // success:   processJson
            success: function(data){ console.log(data);
                if (data.Code == 200) {
                    $("#ipinfo pre").html(syntaxHighlight(data)); 
                }
            }
        });
    });
    //html json格式化显示
    function syntaxHighlight(json) {
      if (typeof json != 'string') {
          //JSON化的对象,2是spacing
          json = JSON.stringify(json, undefined, 2);
      }
  
      json = json.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
      return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function(match) {
  
          var cls = 'number';
          if (/^"/.test(match)) {
              if (/:$/.test(match)) {
                  cls = 'key';
              } else {
                  cls = 'string';
              }
          } else if (/true|false/.test(match)) {
              cls = 'boolean';
          } else if (/null/.test(match)) {
              cls = 'null';
          }
          return '<span class="' + cls + '">' + match + '</span>';
      });
    }
    
</script>
{{template "public/footer.html" .}}

返回全部json数据:

{
 "Code": 200,
 "Msg": "success",
 "Data": {
   "City": {
     "GeoNameID": 1809858,
     "Names": {
       "de": "Guangzhou",
       "en": "Guangzhou",
       "es": "Cantón",
       "fr": "Canton",
       "ja": "広州",
       "pt-BR": "Cantão",
       "ru": "Гуанчжоу",
       "zh-CN": "广州市"
     }
   },
   "Continent": {
     "Code": "AS",
     "GeoNameID": 6255147,
     "Names": {
       "de": "Asien",
       "en": "Asia",
       "es": "Asia",
       "fr": "Asie",
       "ja": "アジア",
       "pt-BR": "Ásia",
       "ru": "Азия",
       "zh-CN": "亚洲"
     }
   },
   "Country": {
     "GeoNameID": 1814991,
     "IsInEuropeanUnion": false,
     "IsoCode": "CN",
     "Names": {
       "de": "China",
       "en": "China",
       "es": "China",
       "fr": "Chine",
       "ja": "中国",
       "pt-BR": "China",
       "ru": "Китай",
       "zh-CN": "中国"
     }
   },
   "Location": {
     "AccuracyRadius": 500,
     "Latitude": 23.1181,
     "Longitude": 113.2539,
     "MetroCode": 0,
     "TimeZone": "Asia/Shanghai"
   },
   "Postal": {
     "Code": ""
   },
   "RegisteredCountry": {
     "GeoNameID": 1814991,
     "IsInEuropeanUnion": false,
     "IsoCode": "CN",
     "Names": {
       "de": "China",
       "en": "China",
       "es": "China",
       "fr": "Chine",
       "ja": "中国",
       "pt-BR": "China",
       "ru": "Китай",
       "zh-CN": "中国"
     }
   },
   "RepresentedCountry": {
     "GeoNameID": 0,
     "IsInEuropeanUnion": false,
     "IsoCode": "",
     "Names": null,
     "Type": ""
   },
   "Subdivisions": [
     {
       "GeoNameID": 1809935,
       "IsoCode": "GD",
       "Names": {
         "en": "Guangdong",
         "fr": "Province de Guangdong",
         "zh-CN": "广东"
       }
     }
   ],
   "Traits": {
     "IsAnonymousProxy": false,
     "IsSatelliteProvider": false
   }
 }
}

看看效果:

getlite2.png

完


  • 上一条:
    redis安全配置之修改端口、添加密码流程步骤及启动使用
    下一条:
    Laravel 9.13版本发布
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • go语言中查找最长不含有重复字符的字符串算法示例代码(0个评论)
    • go语言中日期时间戳比较功能示例代码(0个评论)
    • go语言中在两个/多个切片、数组中获取并集的示例代码(0个评论)
    • go语言中在两个切片、数组中查找共性(交集)的示例代码(0个评论)
    • go语言中bytes.Map()函数示例代码(0个评论)
    • 近期文章
    • 在laravel框架中使用中间件 + 队列的方式记录请求日志(0个评论)
    • laravel框架常用速查表收集(0个评论)
    • go语言中查找最长不含有重复字符的字符串算法示例代码(0个评论)
    • laravel中where IN多列特殊查询类型代码示例(0个评论)
    • 使用Laravel Airdrop加速您的CI构建(0个评论)
    • go语言中日期时间戳比较功能示例代码(0个评论)
    • 来自一位国外前端程序员学习go语言的功能第三部分(0个评论)
    • Laravel9 Eloquent WHERE Like搜索查询示例代码(0个评论)
    • 在PHP中使用MQTT协议的流程步骤(0个评论)
    • PHP远程代码执行漏洞:mysqlnd拓展中存在堆缓冲区溢出漏洞修复方式建议(0个评论)
    • 近期评论
    • 博主 在

      centos7中Meili Search搜索引擎安装流程步骤中评论 @鹿   执行以下命令看看你的2.27版本是否存在strin..
    • 鹿 在

      centos7中Meili Search搜索引擎安装流程步骤中评论 这是我的错误提示,下载了对应的glibc-2.25.tar.gz后续按照教程操作..
    • 阿凡达123 在

      golang 怎么做热更新中评论 也可以看看这个:https://github.com/edwingeng/hot..
    • 博主 在

      hyperf框架常用命令-在centos7中退出命令及在docker容器中退出命令中评论 @路过的靓仔:cdn静态资源被墙,已修复..
    • GGGGGGGGG 在

      layui框架常用输入框介绍中评论 写的很好解决问题..
    • 2016-10
    • 2017-09
    • 2020-03
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-12
    • 2021-01
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客