2011-09-26 62 views
3

我有一個應用程序,人們可以給一個電話號碼,它會通過EMail-SMS網關發送短信到電話號碼。然而,爲了這個工作,我需要給定號碼的電話公司,以便我將電子郵件發送到正確的SMS網關。我見過一些服務可以讓你查看這些信息,但沒有一個是以Web服務或數據庫的形式。尋找手機號碼的電話公司?

例如,http://tnid.us提供這樣的服務。從我的電話號碼輸出例如:

enter image description here

他們究竟是怎麼每個號碼「當前電話公司」的信息。這是免費的信息嗎?是否有數據庫或某種Web服務可用於獲取給定手機號碼的信息?

+0

這有點混亂。但總的來說,龐大的公司就像聯邦調查局一樣,有權訪問我們沒有的。我想也許他們在與信用卡局合作。但是我知道什麼。 – Coffee

回答

0

你在tnid.us結果頁面上看起來稍微偏向下方嗎?

Need API access? Contact [email protected] 
+0

剛剛看了一眼,看到「需要爲您的企業識別電話號碼?」而不是需要API訪問。嘿。我認爲他們有幾條銷售線或每個請求都有變化。無論哪種方式,好的發現 – Earlz

3

你需要的是所謂的HLR(家庭位置寄存器)號碼查找。

在其基本形式這樣的API會期望在國際格式的電話號碼(例如,15121234567)和將返回自己的IMSI,包括他們MCC(給你的國家)和MNC(給你手機的運營商) 。甚至可能包括電話的當前運營商(例如,以告知電話是否正在漫遊)。如果手機當前超出範圍或關閉,可能無法正常工作。在這些情況下,取決於API提供者,他們可能會給你一個緩存結果。

您提到的網站似乎提供了此類功能。一個網頁搜索「HLR查找API」會給你更多的結果。我有CLX's服務的個人經驗,並會推薦它。

+0

+1優秀的答案 – mate64

1

這將是非常密集的代碼,但有些事你可以做,現在,在你自己的,沒有的API只要tnid.us網站是圍繞:

爲什麼沒有IE在一個隱藏瀏覽器窗口打開與電話號碼的網址?它看起來像URL將採取格式http://tnid.us/search.php?q=##########其中#代表一個數字。所以你需要一個文本框,一個標籤和一個按鈕。我調用文本框「txtPhoneNumber」,標籤「lblCarrier」,並且該按鈕會調用我在「OnClick」下面的函數。

該按鈕功能使用MSHtml.dll和SHDocVW.dll創建IE實例,並執行瀏覽器「對象」中HTML的頁面刮擦。然後你解析它。您必須首先安裝Visual Studio 2005附帶的互操作性程序集(C:\ Program Files \ Common Files \ Merge Modules \ vs_piaredist.exe)。然後:

1>在Visual Studio.NET中創建一個新的Web項目。

2>添加對SHDocVw.dll和Microsoft.mshtml的引用。

3>在default.aspx.cs,在頂部加入這些行:

using mshtml; 
using SHDocVw; 
using System.Threading; 

4>添加以下功能:

protected void executeMSIE(Object sender, EventArgs e) 
{ 
    SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorerClass(); 
    object o = System.Reflection.Missing.Value; 
    TextBox txtPhoneNumber = (TextBox)this.Page.FindControl("txtPhoneNumber"); 
    object url = "http://tnid.us/search.php?q=" + txtPhoneNumber.Text); 
    StringBuilder sb = new StringBuilder(); 

    if (ie != null) { 
     ie.Navigate2(ref url,ref o,ref o,ref o,ref o); 
     ie.Visible = false; 
     while(ie.Busy){Thread.Sleep(2);} 
     IHTMLDocument2 d = (IHTMLDocument2) ie.Document; 
     if (d != null) { 
      IHTMLElementCollection all = d.all; 
      string ourText = String.Empty; 
      foreach (object el in all) 
      { 
       //find the text by checking each (string)el.Text 
       if ((string)el.ToString().Contains("Current Phone Company")) 
        ourText = (string)el.ToString(); 
      } 
     // or maybe do something like this instead of the loop above... 
     // HTMLInputElement searchText = (HTMLInputElement)d.all.item("p", 0); 
      int idx = 0; 
      // and do a foreach on searchText to find the right "<p>"... 
      foreach (string s in searchText) { 
       if (s.Contains("Current Phone Company") || s.Contains("Original Phone Company")) { 
        idx = s.IndexOf("<strong>") + 8; 
        ourText = s.Substring(idx); 
        idx = ourText.IndexOf('<'); 
        ourText = ourText.Substring(0, idx); 
       } 
      } 
      // ... then decode "ourText" 
      string[] ourArray = ourText.Split(';'); 
      foreach (string s in ourArray) { 
       char c = (char)s.Split('#')[1]; 
       sb.Append(c.ToString()); 
      } 
      // sb.ToString() is now your phone company carrier.... 
     } 
    } 

    if (sb != null) 
     lblCarrier.Text = sb.ToString(); 
    else 
     lblCarrier.Text = "No MSIE?"; 
} 

出於某種原因,我沒有得到「當前電話公司」,當我只使用tnid。我們的網站直接,但只有原件。所以,你可能希望有代碼測試什麼它找回,即

bool currentCompanyFound = false; 
if (s.Contains("Current Telephone Company")) { currentCompanyFound = true } 

我有檢查任何一個,上面,所以你得到的東西回來。什麼代碼應該做的是找到HTML的

<p class="lt">Current Telephone Company:<br /><strong> 

</strong></p> 

之間的區域我有找的

<strong> 

索引並添加上的字符字去達到開始的位置。我不記得您是否可以爲.indexOf使用字符串或僅字符。但是你明白這一點,你或其他人可能會找到一種方法從那裏開始工作。

你得到的文本是用char代碼編碼的,所以你必須轉換它們。我給了你上面的一些代碼,應該可以幫助你......它沒有經過測試,完全從我的頭上,但它應該工作或讓你到達你想去的地方。

+0

+1全力以赴免費解決方案,但我認爲如果我真的需要它那麼糟糕,我將使用他們的API – Earlz

+0

你應該能夠腳本下載頁面,並解析頁面上的html。這看起來代碼密集程度較低,並且稍微不那麼雜亂。 – isaaclw

+0

腳本(客戶端)通常更多的帶寬/處理器更強,並且可以鎖定瀏覽器 - 發現代碼隱藏(服務器端)是該部門的方式。如果它是託管解決方案。我同意在任何時候解析HTML都很麻煩,但是我剛剛完成了一個項目,當我發佈這個項目時我必須這樣做,所以當時對我來說看起來很直觀。 – vapcguy

0

:與Twilio Lookup

可以檢索電話號碼信息[披露我的Twilio工作。

如果您當前正在評估電話號碼查詢的服務和功能,我會建議您給予查找via the quickstart

相關問題