我正在使用google libphonenumber来获取电话号码的信息。我能够提取州和国家/地区名称。但我无法获得城市名称。google API 是否也提供 CITY 名称?
请提前咨询谢谢。
我正在使用google libphonenumber来获取电话号码的信息。我能够提取州和国家/地区名称。但我无法获得城市名称。google API 是否也提供 CITY 名称?
请提前咨询谢谢。
Google 的
libphonenumber
API是否根据区号提供城市名称?
是的 - 但前提是其内部地理编码数据库包含该信息。一些美国电话号码完全是非地理的(如1-800
数字),而对于许多其他人来说,数据库只是没有这些信息。
此外,libphonenumber
的地理查找仅返回单个string
值:它不返回结构化数据,例如具有城市、州、县和邮政编码字段的类。并且返回的字符串值的格式变化很大——限制了它在任何自动化系统中的使用,因为它必然需要人类用户来解释数据。
例如,使用当前libphonenumber
(截至 2021 年 12 月,即版本8.12.38
),对于这些虚构但有效的数字,我得到以下结果:
1-800-333-4567
libphonenumber
的查找返回字符串"United States"
。1-201-200-0000
libphonenumber
的查找返回字符串"Jersey City, NJ"
。
1-425-666-9999
libphonenumber
的查找仅返回不精确的字符串"Washington State"
,没有城市名称或类似名称。奇怪的是它返回的是完整的美国州名而不是"WA"
缩写。请记住,与任何进程内“离线”地理定位数据库一样,数据将不可避免地变得陈旧和不准确。另外,至少在美国,无法区分手机号码和固定电话号码,并且某人的手机号码的区号与电话用户的实际物理位置完全分离(通常是区号)他们最初注册服务的 AT&T / T-Mobile / Sprint 商店,即使他们随后搬到全国各地)。
无论如何,这是您使用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"