根据Ip获取城市帮助类
思路构建
1.先通过本地的测IP地址库进行匹配
2.如果本地IP地址库存在此IP的城市信息,就直接返回,调用速度也快
3.如果本地没有对应的IP城市信息,必须通过调用网络的IP查询的API了,这里我使用了(百度,新浪,和淘宝)
注意:百度的调用不是很正常,大批量调用
要引用dll Newtonsoft.Json.dll
下载地址:http://www.newtonsoft.com/products/json/
1.解压下载文件,得到Newtonsoft.Json.dll
2.在项目中添加引用..
3.兼容.net framwork2.0到4.5框架
使用NewtonSoft.JSON.dll来序列化和发序列化对象
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|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{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
调用方式:
ipAddressName = ipHelper.GetAddress(2, ipaddress);//调用新浪接口返回数据
根据Ip获取城市帮助类的更多相关文章
- php 根据ip获取城市以及网络运营商名称(利用qqwry.dat)
根据用户IP地址判定出所在城市以及网络运营商 qqwry.dat下载地址:http://files.cnblogs.com/guangxiaoluo/qqwry.rar 解压出来即可 //获取用户真 ...
- c#根据ip获取城市地址
用的API是百度.新浪.淘宝: 1.首先是一个检测获取的值是不是中文的方法,因为有的ip只能识别出来某省,而城市名称则为空返回的json里会出现null或undefined. public stati ...
- 通过外部接口 根据ip获取城市名
3种接口 淘宝/百度/不知名/ 推荐淘宝接口 ip自个去获取,下附带php 获取ip的示例 function getIP() { static $realip; if (isset($_SERVE ...
- Spark- 根据IP获取城市(java)
开源 IP 地址定位库 ip2region 1.4 ip2region 是准确率 99.9% 的 IP 地址定位库,0.0x毫秒级查询,数据库文件大小只有 2.7M,提供了 Java.PHP.C.Py ...
- C# 解析百度天气数据,Rss解析百度新闻以及根据IP获取所在城市
百度天气 接口地址:http://api.map.baidu.com/telematics/v3/weather?location=上海&output=json&ak=hXWAgbsC ...
- 百度地图API的IP定位城市和浏览器定位(转)
百度地图API提供了Geolocation 和 LocalCity两个服务类. 这俩API可以分别供用户在JavaScript中进行定位和城市确认. 1 本质上,Geolocation这个类是使用了支 ...
- 根据IP获得城市信息(百度API的运用)
/** * 根据IP获取城市 * @param string $ip ip地址 * @return array * http://api.map.baidu.c ...
- 根据IP地址获取地址所在城市帮助类(IPHelper)
很多类库都是需要在长时间的编写过程中进行积累的,进入软件编程行业已经是第五个年头了,从2011年写下第一行代码到现在不知道已经写了多少行代码了,时间也过得挺快的.最近事情比较多,也很少写博客了,最近项 ...
- 根据IP获取所在的国家城市
根据IP获取所在的国家城市 新浪的IP地址查询接口:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js 新浪多地域测试方法:htt ...
随机推荐
- C++学习26 运算符重载的概念和语法
所谓重载,就是赋予新的含义.函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作.运算符重载(Operator Overloading)也是一个道 ...
- eclipse快速收缩展开代码
快速折叠所有代码和展开所有代码都是CTRL+SHIFT+/
- 微信JSSDK上传多张图片
之前是使用for循环实现的,但是安卓手机没有问题,苹果手机只能上传最后一张图片. 好在有高手在前面趟路,实用的循环调用.苹果是没有,安卓不清楚.以下内容转自:http://leo108.com/pid ...
- 用SPCOMM 在 Delphi中实现串口通讯 转
用Delphi 实现串口通讯,常用的几种方法为:使用控件如MSCOMM和SPCOMM,使用API函数或者在Delphi 中调用其它串口通讯程序.利用API编写串口通信程序较为复杂,需要掌握大量通信 ...
- PostgreSQL 数据迁移
新主机PostgreSQL需要事先建立和原主机名称相同的用户和数据库. 备份原主机数据库 pg_dump -U <UserName> -p <PortNum> <DBNa ...
- CentOS 6.5 安装 Nginx 1.7.8 教程
http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29791971&id=4702007 Nginx是一款轻量级的Web ...
- 常用自动化测试工具介绍(支持B/S、C/S)
一.功能测试工具1.QTP测试工具 全名HP QuickTest Professional software ,最新的版本为HP QuickTest Professional 11.0 QTP是qui ...
- android 提高进程优先级 拍照永不崩溃(闪退)
首先科普一下Android系统进程的优先级: 当系统的内存不足时, android系统将根据进程优先级选择杀死一些不太重要的进程. 进程优先级从高到低分别为: 1. 前台进程. 以下的进程为前台进程: ...
- [ CodeVS冲杯之路 ] P1171
不充钱,你怎么AC? 题目:http://codevs.cn/problem/1171/ 代码调了很久才调好啊,一开始题目都看错了(要是真的NOIP肯定没戏了QuQ) 后面发现CodeVS上的数据输入 ...
- Fiddler录制jmeter脚本,干货分享
我们知道以前jmeter的脚本来源有三个,手动书写.badboy录制.自带的录制功能(jmeter3.0该功能还比较好),目前我们又多了一个fiddler生成,自上次分享出来fiddler ...