通过webservices接口获取手机号码归属地:
引用webservices地址:
http://api.showji.com/locating/Mobile.asmx
主要代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Windows.Forms;
using System.Xml;
namespace MobileAttribution
{
public partial class Form1 : Form
{
//Html网页代码
private string htmlCode = string.Empty;
//运营商
private string corp = string.Empty;
//卡类型
private string card = string.Empty;
ServiceMobile.MobileSoapClient mc = new ServiceMobile.MobileSoapClient();
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 查询号码归属地
/// </summary>
/// <param name="htmlCode">网页Html代码</param>
private void QueryLocating(string htmlCode)
{
//创建Xml实例
XmlDocument xmldoc = new XmlDocument();
//加载Xml文档
xmldoc.LoadXml(htmlCode);
//获取Xml文档的根元素
XmlElement root = xmldoc.DocumentElement;
//获取Xml文档的根元素下的所有子节点
XmlNodeList topNode = xmldoc.DocumentElement.ChildNodes;
//子节点凑集
XmlNodeList elemList;
//遍历根元素下所有子节点
foreach (XmlElement element in topNode)
{
//按照节点名称获取节点元素值
elemList = root.GetElementsByTagName(element.Name);
switch (element.Name)
{
//断定号码格式是否正确
case "QueryResult":
if (elemList[0].InnerText.ToString() == "False")
MessageBox.Show("您输入的号码格式有误,请重新输入!", "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
continue;
//号码
case "Mobile":
txtMobile.Text = elemList[0].InnerText;
break;
//所属省份
case "Province":
txtProvince.Text = elemList[0].InnerText;
break;
//所属城市
case "City":
txtCity.Text = elemList[0].InnerText;
break;
//区号
case "AreaCode":
txtAreaCode.Text = elemList[0].InnerText;
break;
//邮编
case "PostCode":
txtPostCode.Text = elemList[0].InnerText;
break;
//运营商
case "Corp":
corp = elemList[0].InnerText;
break;
//卡类型
case "Card":
card = elemList[0].InnerText;
//拼接字符串(运营商+卡类型)
txtCard.Text = corp + card;
break;
}
}
}
/// <summary>
/// 抓取网页html代码
/// </summary>
/// <param name="strUrl">URL</param>
/// <returns></returns>
private static string GetStringByUrl(string strUrl)
{
//与指定URL创建HTTP请求
WebRequest wrt = WebRequest.Create(strUrl);
//获取对应HTTP恳求的响应
WebResponse wrse = wrt.GetResponse();
//获取响应流
Stream strM = wrse.GetResponseStream();
//对接响应流(以"GBK"字符集)
StreamReader SR = new StreamReader(strM, Encoding.GetEncoding("UTF-8"));
//获取响应流的全部字符串
string strallstrm = SR.ReadToEnd();
//封闭读取流
SR.Close();
//返回网页html代码
return strallstrm;
}
/// <summary>
/// 传入URL返回网页的html代码
/// 这个方法在这里没有用到
/// </summary>
/// <param name="Url">URL</param>
/// <returns></returns>
public string GetUrltoHtml(string Url)
{
StringBuilder content = new StringBuilder();
try
{
// 与指定URL创建HTTP请求
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.KeepAlive = false;
// 获取对应HTTP请求的响应
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
// 获取响应流
Stream responseStream = response.GetResponseStream();
// 对接响应流(以"GBK"字符集)
StreamReader sReader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
// 开始读取数据
Char[] sReaderBuffer = new Char[256];
int count = sReader.Read(sReaderBuffer, 0, 256);
while (count > 0)
{
String tempStr = new String(sReaderBuffer, 0, count);
content.Append(tempStr);
count = sReader.Read(sReaderBuffer, 0, 256);
}
// 读取结束
sReader.Close();
}
catch (Exception)
{
content = new StringBuilder("Runtime Error");
}
return content.ToString();
}
/// <summary>
/// 符合下列规则也可使用
/// 返回xml
/// 需要顺序的节点:
/// QueryResult(查询结果状态True,False)
/// Province(所属省份)
/// City(所属地区)
/// Corp(服务商)
/// Card(卡类型 GSM)
/// AreaCode(区号)
/// PostCode(邮编)
/// </summary>
/// <param name="url"></param>
/// <param name="mobileNum"></param>
/// <returns></returns>
public static string GetInfoByxml(string url, string mobileNum)
{
string str = "";
try
{
XmlDocument xml = new XmlDocument();
// xml.LoadXml("<?xml version='1.0' encoding='utf-8' ?><QueryResponse xmlns='http://api.showji.com/Locating'><Mobile>15890636739</Mobile><QueryResult>True</QueryResult><Province>河南</Province><City>郑州</City><AreaCode>0371</AreaCode><PostCode>450000</PostCode><Corp>中国移动</Corp><Card>GSM</Card></QueryResponse>");
xml.Load(string.Format(url, mobileNum));
XmlNamespaceManager xmlNm = new XmlNamespaceManager(xml.NameTable);
xmlNm.AddNamespace("content", "http://api.showji.com/locating");
XmlNodeList nodes = xml.SelectNodes("//content:QueryResult|//content:Mobile|//content:Province|//content:City|//content:Corp|//content:Card|//content:AreaCode|//content:PostCode", xmlNm);
if (nodes.Count == 8)
{
if ("True".Equals(nodes[1].InnerText))
{
str=nodes[0].InnerText+","+ nodes[2].InnerText +","+ nodes[3].InnerText+","+nodes[6].InnerText +","+nodes[7].InnerText+","+ nodes[4].InnerText+","+ nodes[5].InnerText ;
}
}
return str.ToString();
}
catch
{
return str.ToString();
}
}
/// <summary>
/// 查询号码归属地
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnQuery_Click(object sender, EventArgs e)
{
ServiceMobile.MobileSoapClient mc = new ServiceMobile.MobileSoapClient();
string Mobile = txtmob.Text.Trim().ToString();
string Province = null;
string City = null;
string AreaCode = null;
string PostCode = null;
string Corp = null;
string Card = null;
if (string.IsNullOrEmpty(txtmob.Text))
{
MessageBox.Show("请输入号码!", "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
else
{
bool result = mc.Query(Mobile, out Province, out City, out AreaCode, out PostCode, out Corp, out Card);
if (result == true)
{
txtMobile.Text = Mobile;
txtProvince.Text = Province;
txtCity.Text = City;
txtAreaCode.Text = AreaCode;
txtPostCode.Text = PostCode;
txtCopy.Text = Corp;
txtCard.Text = Card;
richTextBox1.AppendText("Mobile:" + Mobile + "\r\n" + "Province:" + Province + "\r\n" + "City:" + City + "\r\n" + "AreaCode:" + AreaCode + "\r\n" + "PostCode:" + PostCode + "\r\n" + "Corp:" + Corp + "\r\n" + "Card:" + Card + "\r\n");
MessageBox.Show("查询成功!");
}
else if (result == false)
{
MessageBox.Show("查询失败 服务器返回超时!");
}
}
//string str = GetInfoByxml("http://api.showji.com/Locating/? m={0}", txtm.Text.Trim());
//string[] array = str.Split(',');
//foreach (string item in array)
//{
// richTextBox1.Text += "__" + item;
//}
//if (txtm.Text.Trim().ToString() != "")
//{
// //抓取网页html代码
// htmlCode = GetStringByUrl("http://api.showji.com/locating/?m=" + txtm.Text.Trim().ToString());
// //查询号码归属地
// QueryLocating(htmlCode);
//}
//else
//{
// txtMobile.Text = "";
// txtProvince.Text = "";
// txtCity.Text = "";
// txtAreaCode.Text = "";
// txtPostCode.Text = "";
// txtCard.Text = "";
// MessageBox.Show("请输入号码!", "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
//}
}
///返回 bool 值,表示用户输入的号码是否可识别。
/// <summary>
/// 查询手机号所属地方法
/// </summary>
/// <param name="Mobile">查询的手机号码</param>
/// <param name="Province">返回手机号码归属地的省份</param>
/// <param name="City">返回手机号码归属地的城市</param>
/// <param name="AreaCode">返回手机号码归属地的区号</param>
/// <param name="PostCode">返回手机号码归属地的邮编</param>
/// <param name="Corp">返回所属运营商</param>
/// <param name="Card">返回所属卡类型</param>
/// <returns></returns>
private bool Query(string Mobile, out string Province, out string City, out string AreaCode, out
string PostCode, out string Corp, out string Card)
{
bool result = mc.Query(Mobile, out Province, out City, out AreaCode, out PostCode, out Corp, out Card);
return result;
}
}
}