找一个手机号码的电话公司?

时间:2011-09-26 16:44:09

标签: web-services sms phone-number

我有一个人们可以提供电话号码的应用程序,它会通过EMail-SMS网关向手机号码发送短信。然而,为了这个工作,我需要给定号码的电话公司,以便我将电子邮件发送到正确的SMS网关。我已经看到一些服务允许您查找这些信息,但没有一个以Web服务或数据库的形式。

例如,http://tnid.us提供此类服务。我的电话号码的输出示例:

enter image description here

他们从哪里获得每个号码的“当前电话公司”信息。这是免费提供的信息吗?是否有数据库或某种Web服务可用于获取给定手机号码的信息?

4 个答案:

答案 0 :(得分:3)

您需要的是一个HLR(归属位置寄存器)号码查找。

在这些基本形式中,此类API会使用国际格式的电话号码(例如,+ 15121234567)并返回其IMSI,其中包括MCC(为您提供国家/地区)和{ {3}}(给你手机的运营商)。甚至可能包括电话的当前运营商(例如,告知电话是否正在漫游)。如果手机当前超出范围或已关闭,则可能无法使用。在这些情况下,根据API提供程序,它们可能会为您提供缓存结果。

您提到的网站似乎提供了此类功能。对“HLR查找API”的网络搜索将为您提供更多结果。我有MNC服务的个人经验,并会推荐它。

答案 1 :(得分:1)

这可能是代码密集型的,但是只要tnid.us网站出现,你就可以自己做,而不用API,你可以做到这一点:

为什么不在隐藏的浏览器窗口中打开IE并显示电话号码的URL?看起来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.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字符。但是你明白了,你或其他人可能会找到一种方法让它从那里开始工作。

你得到的那个文字用char代码编码,所以你必须转换它们。我给了你一些上面的代码应该可以帮助...它没有经过测试,完全不在我的脑海中,但它应该可以工作或者让你到达目的地。

答案 2 :(得分:0)

您是否在tnid.us结果页面上看得更远了?

Need API access?  Contact sales@tnID.us.

答案 3 :(得分:0)

[披露:我为Twilio工作]

您可以使用Conversation service检索电话号码信息。

如果您目前正在评估电话号码查询的服务和功能,我建议您尝试使用Lookup Twilio Lookup