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

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

Go  /  管理员 发布于 3年前   2686

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+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 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
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-08
    • 2024-11
    • 2025-02
    • 2025-04
    • 2025-05
    • 2025-06
    Top

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

    侯体宗的博客