Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 实施";通过电话号码找到朋友”;使用数据存储的应用程序引擎上的功能_Python_Google App Engine_Google Cloud Datastore - Fatal编程技术网

Python 实施";通过电话号码找到朋友”;使用数据存储的应用程序引擎上的功能

Python 实施";通过电话号码找到朋友”;使用数据存储的应用程序引擎上的功能,python,google-app-engine,google-cloud-datastore,Python,Google App Engine,Google Cloud Datastore,my messaging应用程序的核心功能之一是允许用户根据自己的电话号码找到同样使用该服务的朋友。像Whatsapp和Snapchat这样的应用也有同样的机制 我正在努力寻找一个能够返回大量结果的解决方案。我想知道大多数其他应用程序是如何实现这一广泛应用的功能的 我当前的实现是,我有一个用户模型和一个电话用户模型。PhoneUser型号键入已转换为标准E164格式的用户电话号码。它有一个KeyProperty将其链接到相应的用户 class PhoneUser(ndb.Model):

my messaging应用程序的核心功能之一是允许用户根据自己的电话号码找到同样使用该服务的朋友。像Whatsapp和Snapchat这样的应用也有同样的机制

我正在努力寻找一个能够返回大量结果的解决方案。我想知道大多数其他应用程序是如何实现这一广泛应用的功能的

我当前的实现是,我有一个用户模型和一个电话用户模型。PhoneUser型号键入已转换为标准E164格式的用户电话号码。它有一个KeyProperty将其链接到相应的用户

class PhoneUser(ndb.Model):
    # id is the phone number in E164 format
    user = ndb.KeyProperty(kind='User', required=True)
当用户注册该服务并授权访问其电话联系人时,该应用程序可以从用户的电话簿中获取大量电话号码。1000个数字并非不可能。我将所有这些数字转换成标准的E164格式,然后为每个数字生成密钥(即ndb.Key('PhoneUser',PHONE_NUMBER))。有了这个电话用户密钥列表,我可以使用ndb.get\u multi(电话用户密钥列表)。这样可以避免查询1000个数字

这在理论上是有效的,假设用户使用正确的国家代码输入他们的电话号码,以便python phonenumbers库能够解析它

然而,很多时候情况并非如此,但这种方法需要这样做,因为按键获取实体需要精确匹配


这只是我想到的一种方法,它也有缺点。这似乎是应用程序中非常常见的功能,我想知道是否有更好的方法。

正确的方法是不依赖用户放置城市/县代码和/或前缀。我不知道有谁会用国家代码保存自己的号码,除非他们经常出差。
您需要解析并更正这些数字。您可以使用当前地理位置尝试添加缺少的城市/国家代码,也可以删除不需要的前缀。可能需要对目标国家的受众进行一些研究。

在任何情况下,您都需要将电话号码标准化为通用格式(E164)。我们使用,这很好用。你可以去看看这本书

我们用搜索用户的国家代码替换好友电话号码中缺失的国家代码。理由:如果用户没有为其联系人输入国家代码,则他们可能来自同一国家


提示:当您想要实现反向搜索时,事情会变得有趣-通知现有用户他们的一个朋友出现在网络中。

不清楚为什么在没有任何解释的情况下将其标记为-1。仍然是正确答案。我在一个类似的地方,您是如何导入python端口的?(我通常手动导入和修复问题,希望有一种更简单的方法来处理libphonenumber)