很多类库都是需要在长时间的编写过程中进行积累的,进入软件编程行业已经是第五个年头了,从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. C# 调用系统winmm.dll 播放音乐wav mp3

    using System.Runtime.InteropServices;//放wav public partial class frmMain : Form { 系统放 播放音乐 wav mp3 [ ...

  2. 深入浅出 nginx lua 为什么高性能

    最近很多人问我nginx lua的优势是什么?为什么? 一.同步和异步.阻塞和非阻塞 如果要说清楚这个问题首先要了解:同步和异步.阻塞和非阻塞的关系 同步:php.java的正常代码都是同步执行的 异 ...

  3. Android下海康实时视频解码

    折腾了一个多月,终于调出来了.....首先吐槽一下海康SDK,同时也感谢之... 手头有个项目,需要实时抓取海康摄像头,我是在Android下实现的,海康官网上没有Android SDK,这里友情提醒 ...

  4. Linux探秘之I/O效率

    一.文章来由 最近看了<UNIX环境高级编程>,对以前比较模糊的一些知识结构又做了进一步的加强,特别是前两章讲到不带缓冲的文件I/O和带缓冲的标准I/O,对read.write.fread ...

  5. preg_match_all正则表达式的基本使用

    了解正则表达式之前,须要掌握一些常用的正则表达式的基础知识,这些如果能记得最好记得,记不住须要用的时候能查到就行,就多个特殊字符,所以说正则表达式玩的就是特殊,具体大家可以查看更加细致的说明. pre ...

  6. Query Object--查询对象模式(上)

    回顾 上两篇文章主要讲解了我对于数据层的Unit Of Work(工作单元模式)的理解,其中包括了CUD的操作,那么今天就来谈谈R吧,文章包括以下几点: 什么是Query Object 基于SQL的实 ...

  7. [原]Android打包之Gradle打包

    最近尝试了一下Android的Gradle打包,发现确实比Ant打包会方便很多,特此记录下来. 注:android的gradle现在插件的版本已经是0.14.3了,对于一些老的方法和api,有一些已经 ...

  8. 我的第一个Socket程序-SuperSocket使用入门(三)

    本来博客都停了,不打算更了,但今天百度一个socket的问题时无意间发现第一篇的socket文章权重仅次于SuperSocket网站,顿时觉得自己6到不行,再写一篇,讨论下数据持久化的问题 去年搞那个 ...

  9. Surface Shader

    Surface Shader: (1)必须放在SubShdader块,不能放在Pass内部: (2)#pragma sufrace surfaceFunction lightModel [option ...

  10. Unity 学习资源

    NGUI文档及视频: http://www.tasharen.com/forum/index.php?topic=6754 动态更新的解决方案: http://game.ceeger.com/foru ...