根据IP地址获取地址所在城市帮助类(IPHelper)
很多类库都是需要在长时间的编写过程中进行积累的,进入软件编程行业已经是第五个年头了,从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)的更多相关文章
- JS 利用新浪接口通过IP地址获取当前所在城市
<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server">< ...
- 获取ip,判断用户所在城市
PHP获取IP地址 这个比较简单了,利用PHP自带函数就可以了,PHP中文手册看一下,都有现成的例子,就不过多说明了,直接上代码,A段: <? //PHP获取当前用户IP地址方法 $xp_Use ...
- 微信小程序获取当前所在城市
本篇文章主要讲解在微信小程序中,如何利用微信自带的api(wx.getLocation())结合百度地图的逆地址解析api来获取当前所在城市名. 实现起来也比较简单,步骤为: 1--利用微信小程序接口 ...
- 根据外网ip地址定位用户所在城市
package com.henu.controller; import java.io.BufferedReader; import java.io.DataOutputStream; import ...
- tp5.1 根据IP地址获取用户所在省市(个人笔记)
class IPAddress extends Common { /** * 根据ip地址,获取用户所在省市 */ public function ipIndex() { $ip = "22 ...
- 微信小程序获取经纬度所在城市
小程序的wx.getLocation()获得是经纬度并不包含地名,所以要通过经纬度用相应的地图转换出地名(本文使用的是百度地图) // 获取坐标 onLoad: function (options) ...
- PHP代码获取客户端IP地址经纬度及所在城市
echo $_SERVER['HTTP_HOST'];//echo $_SERVER['REQUEST_URI'];$getIp=$_SERVER["REMOTE_ADDR"];e ...
- 黄聪:PHP代码获取客户端IP地址经纬度及所在城市
echo $_SERVER['HTTP_HOST']; //echo $_SERVER['REQUEST_URI']; $getIp=$_SERVER["REMOTE_ADDR"] ...
- js根据ip自动获取地址(省市区)
HTML: <html> <head> <meta charset="utf-8"> <meta name="viewport& ...
随机推荐
- 关于typedef的使用方法
在计算机编程语言中用来为复杂的声明定义简单的别名.与宏定义有些差异.它本身是一种存储类的keyword,与auto.extern.mutable.static.register等keyword不能出如 ...
- makeimg
>./simg2img [system.img] [system2.img]>mount -o loop [system2.img] [s/]>./make_ext4fs -s -l ...
- UITabBarController的一些基础设置
利用代码添加UITabBarController - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOpti ...
- Clappr——开源的Web视频播放器
巴西著名的门户网站Globo.com(视频播放器),使用的是基于OSMF的Flash组件.在最近几年的发展过程中,Globo为视频平台陆续添加了不少额外功能,例如: 字幕,广告,画中画播放等.然而,由 ...
- DiskGenius无损调整分区大小
一般情况下,调整分区的大小,通常都涉及到两个或两个以上的分区.比如,要想将某分区的大小扩大,通常还要同时将另一个分区的大小缩小:要想将某个分区的大小缩小,则通常还要同时将另一个分区的大小扩大. ...
- c++ 相关的技术资源整理归类
最近一段时间 c++ 社区里最火热的话题莫过于 cppcon2015 了, isocpp 上一堆相关的新闻,其中有一个页面罗列了该会议的全部主题, 匆匆一瞥几乎眼花缭乱,为期一个星期的会议竟有上百个演 ...
- MyBatis 元素类型为 "configuration" 的内容必须匹配 ".....
修改MyBatis配置文件时,添加typeAliases节点,报了一个BuilderException: org.apache.ibatis.exceptions.PersistenceExcepti ...
- C#将Json字符串反序列化成List对象类集合
摘自:http://blog.csdn.net/cdefg198/article/details/7520398 using System.IO; using System.Web.Script.Se ...
- 下载最新Android代码的方法
之前我是去Android官方网站下载最新Android代码,但是这种方法需要FQ,而且有时候FQ又不太方便,今天我发现一个不错的网站,是清华大学搞的,跟Android官方的代码基本保持同步,而且下载方 ...
- 【转载】Debian/Ubuntu常见安装软件错误解决方案
转载自:http://blog.csdn.net/eqera/article/details/6375293 1.错误: Can't find X includes. Please check you ...