
正文
c#根据ip获取城市地址
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
用的API是百度、新浪、淘宝:
1、首先是一个检测获取的值是不是中文的方法,因为有的ip只能识别出来某省,而城市名称则为空返回的json里会出现null或undefined。
public static bool HasChinese(string str)
{
return Regex.IsMatch(str, @"[\u4e00-\u9fa5]");
}
百度的API
/// <summary>
/// 百度api
/// </summary>
/// <returns></returns>
public static string GetBaiduIp(string ip)
{
try
{
string cs = "";
string url = "http://api.map.baidu.com/location/ip?ak=GlfVlFKSc6Y7aSr73IHM3lQI&ip=" + ip;
WebClient client = new WebClient();
var buffer = client.DownloadData(url);
string jsonText = Encoding.UTF8.GetString(buffer);
JObject jo = JObject.Parse(jsonText);
var txt = jo["content"]["address_detail"]["city"];
JToken st = txt;
string str = st.ToString();
if (str == "")
{
cs = GetCS(ip);
return cs; }
int s = str.IndexOf('市');
string css = str.Substring(, s);
bool bl = HasChinese(css); if (bl)
{
cs = css;
}
else
{
cs = GetCS(ip);
} return cs;
}
catch
{
return GetIPCitys(ip);
} }
新浪API(这个是直接获取网页源代码,然后抓取)
/// <summary>
/// 新浪api
/// </summary>
/// <param name="ip"></param>
/// <returns></returns>
public static string GetCS(string ip)
{
try {
string url = "http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=" + ip;
WebClient MyWebClient = new WebClient();
MyWebClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据
Byte[] pageData = MyWebClient.DownloadData(url); //从指定网站下载数据
string stt = Encoding.GetEncoding("GBK").GetString(pageData).Trim();
return stt.Substring(stt.Length - , );
}
catch
{
return "未知";
} }
淘宝API
/// <summary>
/// 淘宝api
/// </summary>
/// <param name="strIP"></param>
/// <returns></returns>
public static string GetIPCitys(string strIP)
{
try
{
string Url = "http://ip.taobao.com/service/getIpInfo.php?ip=" + strIP + ""; System.Net.WebRequest wReq = System.Net.WebRequest.Create(Url);
wReq.Timeout = ;
System.Net.WebResponse wResp = wReq.GetResponse();
System.IO.Stream respStream = wResp.GetResponseStream();
using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream))
{
string jsonText = reader.ReadToEnd();
JObject ja = (JObject)JsonConvert.DeserializeObject(jsonText);
if (ja["code"].ToString() == "")
{
string c = ja["data"]["city"].ToString();
int ci = c.IndexOf('市');
if (ci != -)
{
c = c.Remove(ci, );
}
return c;
}
else
{
return "未知";
}
}
}
catch (Exception)
{
return ("未知");
}
}






