zoukankan      html  css  js  c++  java
  • 根据IP地址获取地址所在城市帮助类(IPHelper)

    很多类库都是需要在长时间的编写过程中进行积累的,进入软件编程行业已经是第五个年头了,从2011年写下第一行代码到现在不知道已经写了多少行代码了,时间也过得挺快的。最近事情比较多,也很少写博客了,最近项目中需要匹配所有用户的IP登录城市信息,所以需要写一个方法来匹配,第一个反映就是IP地址库,但是这个地址库肯定不是很全面,必须要通过其他的API调用来实现此功能。

    思路构建

    1.先通过本地的测IP地址库进行匹配

    2.如果本地IP地址库存在此IP的城市信息,就直接返回,调用速度也快

    3.如果本地没有对应的IP城市信息,必须通过调用网络的IP查询的API了,这里我使用了(百度,新浪,和淘宝)

    注意:百度的调用不是很正常,大批量调用

    开始编写代码:

    复制代码
     1 #region 调用百度  新浪和淘宝接口返回地址   1.百度 2.新浪 3.淘宝
     2         /// <summary>
     3         /// 调用百度  新浪和淘宝接口返回地址   1.百度 2.新浪 3.淘宝
     4         /// </summary>
     5         /// <param name="Serve">1.百度 2.新浪 3.淘宝</param>
     6         /// <param name="ipAddress"></param>
     7         /// <returns></returns>
     8         public string GetAddress(int Serve, string ipAddress)
     9         {
    10             try
    11             {
    12                 var match =
    13                     new Regex(@"((?:(?:25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))).){3}(?:25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))))");
    14                 if (!match.IsMatch(ipAddress))
    15                 {
    16                     return string.Empty;
    17                 }
    18                 var webClient = new System.Net.WebClient();
    19                 NameValueCollection postValues = null;
    20                 // 向服务器发送POST数据
    21                 var url = string.Empty;
    22                 if (Serve == 1)
    23                 {
    24                     url = "http://api.map.baidu.com/location/ip";
    25                     postValues = new System.Collections.Specialized.NameValueCollection
    26                             {
    27                                 {"ak", "MRkBd6jnGOf8O5F58KKrvit5"},
    28                                 {"ip", ipAddress},
    29                                 {"coor", "bd09ll"}
    30                             };
    31                 }
    32                 else if (Serve == 2)
    33                 {
    34                     url = "http://int.dpool.sina.com.cn/iplookup/iplookup.php";
    35                     postValues = new System.Collections.Specialized.NameValueCollection
    36                             {
    37                                 {"format", "json"},
    38                                 {"ip", ipAddress}
    39                             };
    40                 }
    41                 else
    42                 {
    43                     url = "http://ip.taobao.com/service/getIpInfo.php";
    44                     postValues = new System.Collections.Specialized.NameValueCollection
    45                             {
    46                                 {"ip", ipAddress}
    47                             };
    48                 }
    49 
    50                 byte[] responseArray = webClient.UploadValues(url, postValues);
    51 
    52                 string response = System.Text.Encoding.UTF8.GetString(responseArray);
    53 
    54                 var dataJson = JObject.Parse(response);  //动态解析  正常的解析无法生效
    55                 string address = string.Empty;
    56                 //百度接口
    57                 if (Serve == 1)
    58                 {
    59                     if (dataJson["status"].ToString() == "0")
    60                     {
    61                         address = dataJson["content"]["address_detail"]["province"] + "," + dataJson["content"]["address_detail"]["city"];
    62                     }
    63                 }
    64                 //新浪接口
    65                 else if (Serve == 2)
    66                 {
    67                     if (dataJson["ret"].ToString() == "1")
    68                     {
    69                         address = dataJson["province"] + "," + dataJson["city"];
    70                     }
    71                 }
    72                 //淘宝接口
    73                 else
    74                 {
    75                     if (dataJson["code"].ToString() == "0")
    76                     {
    77                         if (!string.IsNullOrEmpty(dataJson["data"]["region"].ToString()))
    78                             address = dataJson["data"]["region"] + "," + dataJson["data"]["city"];
    79                     }
    80                 }
    81                 if (string.IsNullOrEmpty(address))
    82                 {
    83                     address = "局域网";
    84                 }
    85                 return address;
    86             }
    87             catch(Exception ex)
    88             {
    89                 Console.WriteLine(ex.Message);
    90                 return string.Empty;
    91             }
    92         }
    93         #endregion
    复制代码

    程序调用

    参数分别是调用api类别值,和IP地址

    ipAddressName = ipHelper.GetAddress(2, ipaddress);//调用新浪接口返回数据

    完成此功能对于使用客户的区域密集度有很好的分析,数据采集回来之后需要对数据进行准确有用的分析,从获取有用的信息,来对程序的使用人群进行分析了。

  • 相关阅读:
    mysql查看所有触发器以及存储过程等操作集合【转】
    Hutool之Http工具类使用
    SpringCloud之Sentinel
    SpringCloud之Gateway
    com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
    [AWS DA Guru] SQS
    [AWS DA Guru] Kinesis
    [AWS DA Guru] SNS & SES
    [Typescript] Prevent Type Widening of Object Literals with TypeScript's const Assertions
    [AWS] Updating Elastic Beans Talks & RDS
  • 原文地址:https://www.cnblogs.com/duwamish/p/6742206.html
Copyright © 2011-2022 走看看