我有一個應用程序,人們可以給一個電話號碼,它會通過EMail-SMS網關發送短信到電話號碼。然而,爲了這個工作,我需要給定號碼的電話公司,以便我將電子郵件發送到正確的SMS網關。我見過一些服務可以讓你查看這些信息,但沒有一個是以Web服務或數據庫的形式。尋找手機號碼的電話公司?
例如,http://tnid.us提供這樣的服務。從我的電話號碼輸出例如:
他們究竟是怎麼每個號碼「當前電話公司」的信息。這是免費的信息嗎?是否有數據庫或某種Web服務可用於獲取給定手機號碼的信息?
我有一個應用程序,人們可以給一個電話號碼,它會通過EMail-SMS網關發送短信到電話號碼。然而,爲了這個工作,我需要給定號碼的電話公司,以便我將電子郵件發送到正確的SMS網關。我見過一些服務可以讓你查看這些信息,但沒有一個是以Web服務或數據庫的形式。尋找手機號碼的電話公司?
例如,http://tnid.us提供這樣的服務。從我的電話號碼輸出例如:
他們究竟是怎麼每個號碼「當前電話公司」的信息。這是免費的信息嗎?是否有數據庫或某種Web服務可用於獲取給定手機號碼的信息?
你在tnid.us結果頁面上看起來稍微偏向下方嗎?
Need API access? Contact [email protected]
剛剛看了一眼,看到「需要爲您的企業識別電話號碼?」而不是需要API訪問。嘿。我認爲他們有幾條銷售線或每個請求都有變化。無論哪種方式,好的發現 – Earlz
這將是非常密集的代碼,但有些事你可以做,現在,在你自己的,沒有的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代碼編碼的,所以你必須轉換它們。我給了你上面的一些代碼,應該可以幫助你......它沒有經過測試,完全從我的頭上,但它應該工作或讓你到達你想去的地方。
這有點混亂。但總的來說,龐大的公司就像聯邦調查局一樣,有權訪問我們沒有的。我想也許他們在與信用卡局合作。但是我知道什麼。 – Coffee