百度IP定位API

hyming011 2021-09-07 原文


百度IP定位API

一、背景

为了统计app访客数量来源所属地区,主要是省市的数量及其比例。

 

二、需求分析

通过haproxy的日志可以获取到每次请求的IP地址,通过查询IP地址的地区来统计。网路上有多种免费的IP地址转换的服务,考虑了准确性,易用性,查询速率以及每日查询量,最后决定使用百度的IP地址定位API。

普通IP定位 API是一个根据IP返回对应大致位置信息的HTTP/HTTPS形式位置服务接口。调用API接口,返回请求参数中指定IP的大致位置信息,包括:经纬度、省、市、区县等地址信息。如果请求参数中的IP为空,则默认返回当前服务请求来源的IP所对应的大致位置信息

 

三、说明文档

1、文档位置

百度地图开放平台—Web服务API—普通IP定位API,链接:

http://lbsyun.baidu.com/index.php?title=webapi/ip-api

注意事项:未认证的开发者账号每天配额查询IP数量为10W次,并发6k每分钟。

 

2、使用详细方法

使用方法

第一步,申请密钥(AK) ,作为访问服务的依据;

第二步,拼写发送HTTP/HTTPS请求的URL,注意需使用第一步申请的AK;

第三步,接收HTTP/HTTPS请求返回的数据(JSON格式)。

服务地址

http://api.map.baidu.com/location/ip

https://api.map.baidu.com/location/ip

接口参数:

参数

含义

格式

说明

ip

IP地址

string

可选,IP不出现,或者出现且为空字符串的情况下,会使用当前访问者的IP地址作为定位参数。

ak

开发者密钥

string

必选,登录API控制台,申请AK,作为访问的依据。

sn

用户的权限签名

string

可选,若用户所用AK的校验方式为SN校验时该参数必须。(SN生成算法)

coor

输出的坐标格式

string

可选,coor不出现时,默认为百度墨卡托坐标;coor=bd09ll时,返回为百度经纬度坐标。

 

返回值说明

返回结果(地址解析的结果)

{  

    address: “CN|北京|北京|None|CHINANET|1|None”,    #地址  

    content:    #详细内容  

    {  

        address: “北京市”,    #简要地址  

        address_detail:    #详细地址信息  

        {  

            city: “北京市”,    #城市  

            city_code: 131,    #百度城市代码  

            district: “”,    #区县  

            province: “北京市”,    #省份  

            street: “”,    #街道  

            street_number: “”    #门址  

        },  

        point:    #当前城市中心点  

        {  

            x: “116.39564504”,  

            y: “39.92998578”  

        }  

    },  

    status: 0    #返回状态码  }

注:若返回异常,请查看 异常返回状态码 ,确认异常原因。

接口示例

http://api.map.baidu.com/location/ip?ak=请输入您的AK&coor=bd09ll

https://api.map.baidu.com/location/ip?ak=请输入您的AK&coor=bd09ll

返回值:

{  

    address: “CN|吉林|长春|None|CERNET|1|None”,  

    content: 

    {  

        address: “吉林省长春市”,  

        address_detail: 

        {  

            city: “长春市”,  

            city_code: 53,  

            district: “”,  

            province: “吉林省”,  

            street: “”,  

            street_number: “”  

        },  

        point:  #当前城市中心点

        {       

            x: “125.31364243”,      

            y: “43.89833761”  

        }  

    },  

    status: 0  }

 

Python代码

import urllib2

import json

def ip_to_addr(ip,ak):

try:

url=\’https://api.map.baidu.com/location/ip?ip=\’+str(ip)+\’&ak=ak&coor=bd09ll\’

                response = urllib2.urlopen(url,timeout=3)

                html = response.read()

                decoded = json.loads(html)

                status = decoded[\’status\’]

                if status == 0:

                        province = decoded[\’content\’][\’address_detail\’][\’province\’]

                        city = decoded[\’content\’][\’address_detail\’][\’city\’]

                        return status,province,city

                else:return status

        except Exception as e:

                return 999

 

四、设计

1、在haproxy服务器,用shell脚本(static_haprxy_log.sh)将前一天的日志清洗过滤及统计,生成文本文件,文本每行只有两个字段,IP地址和此IP地址的请求数。然后将文本传到处理数据的主机(免密码scp)。

>$ cat static_haprxy_log.sh

#!/bin/bash

DIR=\’/apps/logs/haproxy/rotate\’

cd $DIR

filename=\’haproxy.log.\’$(date -d “1 days ago” +%F)

filename_s=\’haproxy.static.\’$(date -d “1 days ago” +%F)\’.txt\’

filename_s_old=\’haproxy.static.\’$(date -d “11 days ago” +%F)\’.txt\’

awk \'{print $6}\’ $filename |awk -F: \'{print $1}\’ |sort|uniq -c|sort -k 1 -nr > $filename_s

sed -i \’s/^ \{1,9\}//g\’ $filename_s

scp $filename_s root@$IP://apps/logs/haproxy_statick/

rm -f $filename_s_old

注意:$IP为处理数据的主机的IP地址。

2、接收到数据文本的主机,首先用shell脚本(filter.sh)排除白名单的IP地址(调用接口的IP地址),再用Python脚本(insertMySQL.py)将数据写到MySQL数据库表中。数据库表5个有用字段:IP地址,IP地址请求次数,API返回状态码,省,市。

>$ cat filter.sh

#!/bin/bash

cd \’/apps/logs/haproxy_statick\’

filename_s=\’haproxy.static.\’$(date -d “1 days ago” +%F)\’.txt\’

cat /apps/sh/whiteList.txt |while read line

do

sed -i “/$line/d” $filename_s

done

filename_old=\’haproxy.static.\’$(date -d “11 days ago” +%F)\’.txt\’

rm -f $filename_old

3、运行Python程序(insertMySQL.py),将查到的IP地址对应的省,市,返回码更新到数据库表。

发表于
2018-01-10 15:32 
韩英明的个人笔记 
阅读(15353
评论(0
编辑 
收藏 
举报

 

版权声明:本文为hyming011原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/hyming011/p/8258882.html

百度IP定位API的更多相关文章

随机推荐

  1. 移除VS解决方案中的TFS版本控制

    现象: 项目之前使用TFS作为版本管理,后迁移至SVN,其他机器check out下来的项目会提示: “Tea […]...

  2. 涨姿势 | 无线通讯距离现场评估知多少?

    转摘http://www.21ic.com/app/rf/201506/628582.htm 在现实生活中,无 […]...

  3. 优米-马云与80后面对面对话实录

    王利芬:谢谢各位,刚才在这个幕布升起的那一刹那,想起的是《赢在中国》的主題曲《在路上》。这个时候我觉得很像恍然 […]...

  4. JavaScript基础学习

    前端基础学习-JavaScript JavaScript 简介 JS的简介 在上个世纪的1995年,当时的网景 […]...

  5. Java Stream 流如何进行合并操作

    1. 前言 Java Stream Api 提供了很多有用的 Api 让我们很方便将集合或者多个同类型的元素转 […]...

  6. log4j平稳升级到log4j2

    一、前言   公司中的项目虽然已经用了很多的新技术了,但是日志的底层框架还是log4j,个人还是不喜欢用这个的 […]...

  7. 干货!攻城狮的交流分享!聊一聊开发人员快速提升自己的方式

    建立一个实质性的项目 从不同的视角,端点功能触发, 构建具有独特性且能展示开发人员创造力的应用 web后端框架 […]...

  8. 基于Pytest豆瓣自动化测试【1】

    —— Pytest基础使用教程【1】 引言 Pytest 是一个非常实用的自动化测试框架,目前来说资料也是非常 […]...

展开目录

目录导航