Google通讯录Api - >哪些联系人被删除了?

时间:2011-09-02 21:34:34

标签: php xml synchronization gmail

我正在解析Gmail中的联系人,并在我的产品中创建同步功能。 但在我的脚本上,我很难确定哪些联系人从gmail中被“删除”。

实施例: 如果我的应用程序中有 John Doe ,还有Gmail ...(并且它们与gmailId同步)。稍后,如果用户删除联系人John Doe ,并运行我的SYNC, 如何确定该联系人已被删除?

我需要知道在我的数据库中抛出触发器以删除相同联系人的位置。我目前有这个来获取通过发送的每个联系人的信息。

$xml = simplexml_load_string($entry->getXML());
$obj = new stdClass;

//    EDIT LINK
$obj->gmailUrl   = rawurlencode($entry->id);                
$obj->delete     =  (string) $xml->groupMembershipInfo['deleted'];

//    FIRST Name
$obj->firstName  = (string) $xml->name->givenName;

在我的代码中,我还使用这些额外的参数查询谷歌。

$query->setParam('updated-min', $updatedMin);
$query->setParam('showdeleted', 'true');
$query->setParam('requirealldeleted', 'true');

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

我不确定任何特定的钩子,也不能看到明显的deleted字段,但这是另一种解决问题的方法......

当您执行完全同步或单项更新时,如果不再返回特定联系人,则可以将其标记为已删除。请注意,只有将showdeleted保留为false时才会有效。

示例...

$local = array(1, 3, 5, 7, 9);

您运行完全同步...

$remote = array(, 1, 3, 5, 9);

比较两个阵列将显示7已被删除。同样,如果您正在同步单个项目,如果它没有返回任何内容,您可以认为它已被删除。

答案 1 :(得分:1)

我发现Google在删除联系人时添加了一个名为Deleted的空XML标记。

像这样。

if(isset($xml->deleted)) { $deleted = "true"; } else { $deleted = NULL; } 
$obj->delete = $deleted;

虽然Adrian的解决方案可行,但我觉得这不是最佳解决方案,因为我觉得Google必须为此做出答案,而不是检查每天是否有联系人。