【问题标题】:Does google libphonenumber API provide CITY name based on the area code?google libphonenumber API 是否根据区号提供 CITY 名称?
【发布时间】:2014-09-29 18:36:44
【问题描述】:

我正在使用 google libphonenumber 来获取电话号码的信息。我能够提取州和国家/地区名称。但我无法获得城市名称。 google API 是否也提供 CITY 名称?

请提前告知,谢谢。

【问题讨论】:

  • 如果您仅指区号,则大多数区号跨越许多城市。您需要深入交流才能使问题有意义。
  • @Max 也许你没有以正确的方式理解我,但我发现了这个名为 geocoder 的库,它提供了传入电话号码的地理位置。谢谢。
  • 你能发一个图书馆的链接吗?

标签: java phone-number libphonenumber


【解决方案1】:

Google 的 libphonenumber API 是否提供基于区号的城市名称?

是的 - 但前提是其内部地理编码数据库包含该信息。一些美国电话号码完全是非地理号码(如1-800 号码),而对于其他许多电话号码,数据库没有这些信息。

此外,libphonenumber 的地理查找仅返回单个 string 值:它不返回结构化数据,例如具有城市、州、县和邮政编码字段的类。并且返回的字符串值的格式差异很大 - 限制了它在任何自动化系统中的使用,因为它必然需要人类用户来解释数据。

例如,使用当前的 libphonenumber(截至 2021 年 12 月,版本为 8.12.38),对于这些虚构但有效的数字,我得到以下结果:

  • 1-800-333-4567
    • 这是一个非地理“1-800”(免费)号码。
    • libphonenumber 的查找返回字符串 "United States"
  • 1-201-200-0000
    • 这是一个美国电话号码,位于新泽西的区号 201。
    • libphonenumber 的查找返回字符串 "Jersey City, NJ"
      • 它将它解析为一个城市和州,并给出该州的缩写。
  • 1-425-666-9999
    • 这是我从华盛顿州雷德蒙德的一家 T-Mobile 商店获得的(几乎)个人电话号码。
    • 但是libphonenumber 的查找只返回不精确的字符串"Washington State",没有城市名称或类似名称。奇怪的是,它返回的是完整的美国州名,而不是 "WA" 的缩写。

请记住,与任何进程内“离线”地理位置数据库一样,数据将不可避免地变得陈旧和不准确。另外,至少在美国,无法区分手机号码和固定电话号码,并且某人的手机号码的区号与电话用户的实际物理位置完全分离(通常是区号)他们最初注册服务的 AT&T / T-Mobile / Sprint 商店,even if they subsequently move across the country)。

无论如何,这就是你如何使用PhoneNumberOfflineGeocoder 类:

Java:

static string lookupNumber( string phoneNumber ) {
    
    PhoneNumber parsed = PhoneNumberUtil.getInstance().parse( phoneNumber, /*defaultRegion:*/ "US" );

    return PhoneNumberOfflineGeocoder.getInstance().getDescriptionForNumber( parsed, Locale.ENGLISH );
}

lookupNumber( "1-800-333-4567" ) // "United States"

lookupNumber( "+12012000000" ) // "Jersey City, NJ"

lookupNumber( "+14256669999" ) // "Washington State"

C#

static String LookupNumber( string phoneNumber ) {
    
    PhoneNumber parsed = PhoneNumberUtil.GetInstance().Parse( phoneNumber, defaultRegion: "US" );

    return PhoneNumberOfflineGeocoder.GetInstance().GetDescriptionForNumber( parsed, Locale.English );
}

LookupNumber( "1-800-333-4567" ) // "United States"

LookupNumber( "+12012000000" ) // "Jersey City, NJ"

LookupNumber( "+14256669999" ) // "Washington State"

【讨论】:

    猜你喜欢
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 2019-01-16
    相关资源
    最近更新 更多