使用C#開發基於Winform的手機號碼歸屬地查詢工具

一、需求描述

輸入正確的手機號碼,查詢該號碼的歸屬地和其他相關信息。

二、需求分析

1、實現手機號碼歸屬地查詢的方法

01、本地數據庫存儲信息,查詢本地庫

02、調用WebService查詢

03、通過Http請求Get方式從服務器上獲取數據

2、方式分析:

01、採用本地數據庫存儲,可以斷網查詢,無需付費,但信息量較大佔用本地資源

02、調用WebService必須連接網絡,不佔用本地資源,但公開的WebService大多數需要付費。

03、通過Http請求Get方式從服務器上獲取數據的方式必須連接網絡,不佔用本地資源,無需付費。

通過以上分析,決定採用第3種方式實現

三、實現思路

尋找免費的手機號碼歸屬地查詢網址

通過一番尋找和對比,決定使用“手機號碼歸屬地數據庫API”這個網站上的查詢接口。

首頁地址:http://vip.showji.com/locating/help.htm

查詢地址(返回結果頁面):http://api.showji.com/Locating/query.aspx?m=手機號碼

查詢地址(返回xml數據):http://vip.showji.com/locating/?m=手機號碼

通過跟蹤調試網站的JS代碼,發現返回結果頁面是使用$("txtMobile").innerHTML=obj["Mobile"];的方式賦值的,這樣的話頁面是有值的,但查看源代碼發現結果爲空,所以無法通過抓取網頁源碼來提取結果值。

經過分析和反覆試驗發現,查詢結果可以直接發回xml格式的數據,哈哈,親,要的就是你。

有了xml數據就好辦了,通過抓取網頁Html代碼,用一個string變量存儲xml格式的數據,然後通過分析xml數據得到手機號碼歸屬地信息。

四、實現方法(代碼)

公共變量
//Html網頁代碼
private string htmlCode = string.Empty;
//運營商
private  string corp = string.Empty;
//手機卡類型
private  string card = string.Empty;

抓取網頁Html代碼
/// 
/// 抓取網頁html代碼
/// 
/// URL
/// 
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;
}

查詢號碼歸屬地
/// 
/// 查詢手機號碼歸屬地
/// 
/// 網頁Html代碼
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;
}
}
}

調用查詢方法
/// 
/// 查詢
/// 
/// 
/// 
private void btnQuery_Click(object sender, EventArgs e)
{
if (txtm.Text.Trim().ToString() != "")
{
//抓取網頁html代碼
htmlCode = GetStringByUrl("http://vip.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);
}
}

最終效果圖:

源碼下載:http://download.csdn.net/detail/luyaoapp/4150189

文章出處:http://qjb.573114.com/Blog/Html/121D/20244.html

發佈了32 篇原創文章 · 獲贊 10 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章