獲取手機號碼歸屬地


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

 


免責聲明!

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



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