提问者:小点点

google libphonenumberAPI提供基于区号的城市名称吗?


我正在使用google libphonenumber来获取电话号码的信息。我能够拉取状态

请提前咨询感谢。


共1个答案

匿名用户

Google的libphonenumberAPI根据区号提供城市名称吗?

是的——但前提是它的内部地理编码数据库包含这些信息。有些US电话号码完全是非地理的(比如1-800号码),而对于许多其他人来说,数据库就是没有这些信息。

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

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

  • 1-800-333-4567
    • 这是一个非地理位置的“1-800”(免费)号码。
    • libphonenumber的查找返回字符串“美国”
    • 是新泽西州区号201的US电话号码。
    • libphonenumber的查找返回字符串“新泽西州泽西城”
      • 它解决了一个城市和州,给出了州的缩写。
      • 这(几乎)是我自己的个人电话号码,我从WA雷德蒙德的一家手机商店得到的。
      • 但是libphonenumber的查找只返回不精确的字符串“华盛顿州”,没有城市名称或类似名称。奇怪的是,它返回了完整的US州名称,而不是“WA”缩写。

      请记住,与任何程序内“离线”地理定位数据库一样,数据将不可避免地过时和不准确。此外,至少在US,不可能区分手机号码和固定电话号码,某人手机号码的区号与电话用户的实际物理位置完全分离(通常是AT的区号

      无论如何,以下是如何使用PhoneNumberOfflineGeocoder类:

      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"
      
      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"