Это было бы довольно много кода, но что-то, что вы могли бы сделать прямо сейчас, самостоятельно, без API, если сайт tnid.us существует:
Почему бы не открыть IE в скрытом браузереокно с URL телефонного номера?Похоже, что URL будет иметь формат http://tnid.us/search.php?q=##########, где # представляет число.Таким образом, вам нужно текстовое поле, метка и кнопка.Я вызываю текстовое поле «txtPhoneNumber», метку «lblCarrier», и кнопка вызывает вызываемую мной функцию «OnClick».
Функция кнопки создает экземпляр IE, используя MSHtml.dll и SHDocVW.dll, ивыполняет очистку страницы HTML-кода, который находится в вашем браузере, «объект».Вы тогда анализируете это.Сначала необходимо установить сборки взаимодействия, поставляемые с Visual Studio 2005 (C: \ Program Files \ Common Files \ Merge Modules \ vs_piaredist.exe).Затем:
1> Создайте новый веб-проект в Visual Studio.NET.
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.us напрямую, хотя только оригинал.Таким образом, вы можете захотеть проверить код, что он возвращает, то есть
bool currentCompanyFound = false;
if (s.Contains("Current Telephone Company")) { currentCompanyFound = true }
У меня есть проверка любого из них, выше, так что вы получите что-то обратно.Что код должен сделать, это найти область HTML между
<p class="lt">Current Telephone Company:<br /><strong>
и
</strong></p>
Я искал индекс для
<strong>
идобавление символов этого слова, чтобы добраться до начальной позиции.Я не могу вспомнить, можете ли вы использовать строки или только символы для .indexOf.Но вы понимаете суть, и вы или кто-то другой, возможно, сможете найти способ заставить его работать оттуда.
Этот текст, который вы получаете, закодирован с помощью кодов символов, поэтому вам придется конвертировать их.Я дал вам вышеупомянутый код, который должен помочь в этом ... он непроверен и полностью из моей головы, но он должен сработать или получить вас, куда вы идете.