C# Winform實現手機號碼歸屬地查詢工具


摘要:本文介紹使用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數據得到手機號碼歸屬地信息。

四、實現方法(代碼)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Xml;

namespace QueryLocating
{
    public partial class formQueryLocating : Form
    {
        //Html網頁代碼
        private string htmlCode = string.Empty;
        //運營商
        private  string corp = string.Empty;
        //手機卡類型
        private  string card = string.Empty;


        public formQueryLocating()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 查詢
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        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);
            }

        }

        /// <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;
        }
    }
}

最終效果圖:

源代碼:http://files.cnblogs.com/jara/QueryLocating.rar

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM