通過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;
}
}
}
