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

思路构建

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

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

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

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

开始编写代码:

 #region 调用百度  新浪和淘宝接口返回地址   1.百度 2.新浪 3.淘宝
/// <summary>
/// 调用百度 新浪和淘宝接口返回地址 1.百度 2.新浪 3.淘宝
/// </summary>
/// <param name="Serve">1.百度 2.新浪 3.淘宝</param>
/// <param name="ipAddress"></param>
/// <returns></returns>
public string GetAddress(int Serve, string ipAddress)
{
try
{
var match =
new Regex(@"((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))");
if (!match.IsMatch(ipAddress))
{
return string.Empty;
}
var webClient = new System.Net.WebClient();
NameValueCollection postValues = null;
// 向服务器发送POST数据
var url = string.Empty;
if (Serve == )
{
url = "http://api.map.baidu.com/location/ip";
postValues = new System.Collections.Specialized.NameValueCollection
{
{"ak", "MRkBd6jnGOf8O5F58KKrvit5"},
{"ip", ipAddress},
{"coor", "bd09ll"}
};
}
else if (Serve == )
{
url = "http://int.dpool.sina.com.cn/iplookup/iplookup.php";
postValues = new System.Collections.Specialized.NameValueCollection
{
{"format", "json"},
{"ip", ipAddress}
};
}
else
{
url = "http://ip.taobao.com/service/getIpInfo.php";
postValues = new System.Collections.Specialized.NameValueCollection
{
{"ip", ipAddress}
};
} byte[] responseArray = webClient.UploadValues(url, postValues); string response = System.Text.Encoding.UTF8.GetString(responseArray); var dataJson = JObject.Parse(response); //动态解析 正常的解析无法生效
string address = string.Empty;
//百度接口
if (Serve == )
{
if (dataJson["status"].ToString() == "")
{
address = dataJson["content"]["address_detail"]["province"] + "," + dataJson["content"]["address_detail"]["city"];
}
}
//新浪接口
else if (Serve == )
{
if (dataJson["ret"].ToString() == "")
{
address = dataJson["province"] + "," + dataJson["city"];
}
}
//淘宝接口
else
{
if (dataJson["code"].ToString() == "")
{
if (!string.IsNullOrEmpty(dataJson["data"]["region"].ToString()))
address = dataJson["data"]["region"] + "," + dataJson["data"]["city"];
}
}
if (string.IsNullOrEmpty(address))
{
address = "局域网";
}
return address;
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
return string.Empty;
}
}
#endregion

程序调用

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

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

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

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

根据IP地址获取地址所在城市帮助类(IPHelper)的更多相关文章

  1. JS 利用新浪接口通过IP地址获取当前所在城市

    <html xmlns="http://www.w3.org/1999/xhtml"><head runat="server">< ...

  2. 获取ip,判断用户所在城市

    PHP获取IP地址 这个比较简单了,利用PHP自带函数就可以了,PHP中文手册看一下,都有现成的例子,就不过多说明了,直接上代码,A段: <? //PHP获取当前用户IP地址方法 $xp_Use ...

  3. 微信小程序获取当前所在城市

    本篇文章主要讲解在微信小程序中,如何利用微信自带的api(wx.getLocation())结合百度地图的逆地址解析api来获取当前所在城市名. 实现起来也比较简单,步骤为: 1--利用微信小程序接口 ...

  4. 根据外网ip地址定位用户所在城市

    package com.henu.controller; import java.io.BufferedReader; import java.io.DataOutputStream; import ...

  5. tp5.1 根据IP地址获取用户所在省市(个人笔记)

    class IPAddress extends Common { /** * 根据ip地址,获取用户所在省市 */ public function ipIndex() { $ip = "22 ...

  6. 微信小程序获取经纬度所在城市

    小程序的wx.getLocation()获得是经纬度并不包含地名,所以要通过经纬度用相应的地图转换出地名(本文使用的是百度地图) // 获取坐标 onLoad: function (options)  ...

  7. PHP代码获取客户端IP地址经纬度及所在城市

    echo $_SERVER['HTTP_HOST'];//echo $_SERVER['REQUEST_URI'];$getIp=$_SERVER["REMOTE_ADDR"];e ...

  8. 黄聪:PHP代码获取客户端IP地址经纬度及所在城市

    echo $_SERVER['HTTP_HOST']; //echo $_SERVER['REQUEST_URI']; $getIp=$_SERVER["REMOTE_ADDR"] ...

  9. js根据ip自动获取地址(省市区)

    HTML: <html> <head> <meta charset="utf-8"> <meta name="viewport& ...

随机推荐

  1. 苹果 Mac OS 下查看系统隐藏文件

    Mac OS X中有很多系统隐藏的信息文件, 一般在Finder中都是看不到,也修改不了的. 但通过在"终端"中输入命令, 就可以在Finder中显示出来: defaults wr ...

  2. JVM 参数翻译汉化解释

    博客搬家,新地址:http://www.zicheng.net/article/38.htm Behavioral Options(行为参数) Option and Default Value Des ...

  3. MT写的对URL操作的两个方法

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. String.format详解(转)

    一.前言 String.format 作为文本处理工具,为我们提供强大而丰富的字符串格式化功能,为了不止步于简单调用 String.format("Hello %s", " ...

  5. Android Studio配置和使用OpenCV3.x,不需要OpencvManager

    转载声明,本文转自CSDN:http://blog.csdn.net/qq_22033759/article/details/51156121 ps:本来在贴吧上有人问,想自己写的,但时间有限,当初自 ...

  6. 原生DOM探究 -- NodeList v.s. HTMLCollection

    涉及获取元素的主要API 在获取原生DOM元素的时候,主要涉及这几个DOM API(链接为Living Standard): Node及对应集合NodeList Element(继承Node)及对应集 ...

  7. Linux/Ubuntu sudo不用输入密码的方法

    通常我们并不以root身份登录,但是当我们执行某些命令 (command)时需要用到root权限,我们通常都是用"sudo command"来执行command.由于使用Ubunt ...

  8. c# socket 解决粘包,半包

    处理原理: 半包:即一条消息底层分几次发送,先有个头包读取整条消息的长度,当不满足长度时,将消息临时缓存起来,直到满足长度再解码 粘包:两条完整/不完整消息粘在一起,一般是解码完上一条消息,然后再判断 ...

  9. 【cs229-Lecture19】微分动态规划

    内容: 调试强化学习算法(RL算法) LQR线性二次型调节(french动态规划算法) 滤波(kalman filters) 线性二次高斯控制(LGG) Kalman滤波器 卡尔曼滤波(Kalman ...

  10. SSH: 本地.ssh目录下的公钥文件最好删掉

    这次ssh amazon ec2的instance,在家里电脑登录OK,到了公司电脑登录失败(只支持公钥机制).私钥已经拷贝到公司的ubuntu上了,奇怪. 后来发现是.ssh目录下存在一些公钥文件导 ...