很多类库都是需要在长时间的编写过程中进行积累的,进入软件编程行业已经是第五个年头了,从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. Linux shell crontab expdp 定时任务逻辑备份 定时删除旧文件

    点击进入:Window bat expdp 定时任务逻辑备份 定时删除N天前的旧文件 创建sh脚本 [oracle@localhost ~]$ vi logicbackup.sh 添加脚本内容 #!/ ...

  2. Hadoop - 实时查询Drill

    1.概述 在现实业务当中,存在这样的业务场景,需要实时去查询HDFS上的相关存储数据,普通的查询(如:Hive查询),时延较高.那么,是否存在时延较小的查询组件.在业界目前较为成熟的有Cloudera ...

  3. Rhino -- 基于java的javascript实现

    http://www.cnblogs.com/cczw/archive/2012/07/16/2593957.html

  4. Filter之——GZIP全站压缩

    GZIP压缩:将压缩后的文本文件,发送给浏览器,减少流量. 一.进行gzip压缩条件: 1.请求头:Accept-Encoding : gzip  告诉服务器,该浏览器支持gzip压缩. 2.响应头: ...

  5. 使用DOSBox在Win7_x64下搭建汇编环境

    1. 软件安装 1. debug.exe,masm.exe,link.exe,edit.com等汇编工具,一般32位的windows系统有自带,但64位系统下并没有,而且将32位系统下的工具拷贝到64 ...

  6. 由于无法创建应用程序域,因此未能执行请求。错误: 0x80070002 系统找不到指定的文件

    前两天安装了一堆补丁后突然发现,原本正常使用了一年的应用系统打不开了,到事件日志中发现有.net framewok 2.0的补丁安装失败的日志,于从从重装补丁开始.到重新注册.net框架,再到所有.n ...

  7. CentOS安装epel

    Centos5安装    rpm -ivh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm   rpm  ...

  8. Eclipse 常用最新插件.标记

    Properties Editor     编辑java的属性文件,并可以自动存盘为Unicode格式 http://marketplace.eclipse.org/content/propertie ...

  9. 我所研究过的 ASP.NET MVC 或者 .NET 或者 ORM 或者框架的开源项目

    ASP.NET MVC 的开源项目有很多,这里列出我所研究过的: SocialGoal v1.0.0 prodinner nopCommerce SmartStore.NET 由于今天才做收集工作,可 ...

  10. ruby -- 进阶学习(十二)fragment cache

    基于rails4.0环境 Rails 页面缓存的方法很多,最近弱弱地尝试了fragment cache,用法还算简单~@_@|| 首先,查看config/environment/production. ...