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);//调用新浪接口返回数据

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

    编写时间:2015年3月20日22:09:25

  • 相关阅读:
    light oj 1105 规律
    light oj 1071 dp(吃金币升级版)
    light oj 1084 线性dp
    light oj 1079 01背包
    light oj 1068 数位dp
    light oj 1219 树上贪心
    light oj 1057 状压dp TSP
    light oj 1037 状压dp
    矩阵快速幂3 k*n铺方格
    矩阵快速幂2 3*n铺方格
  • 原文地址:https://www.cnblogs.com/wohexiaocai/p/4354732.html
Copyright © 2011-2022 走看看