使用python从gmail中检索所有联系人

时间:2014-07-22 09:22:52

标签: python django lxml django-socialauth

我正在使用django social auth来从gmail检索联系人。获得授权我没有任何问题。我做了一个请求,然后我使用lxml来检索电子邮件地址。

问题在于它不显示每个联系人。例如,我只能检索30个联系人,而我的gmail帐户有超过300个联系人。

以下是我的观点:

def get_email_google(request):
    social = request.user.social_auth.get(provider='google-oauth2')
    url = 'https://www.google.com/m8/feeds/contacts/default/full' + '?access_token=' + social.tokens['access_token']
    req = urllib2.Request(url, headers={'User-Agent' : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.30 (KHTML, like Gecko) Ubuntu/11.04 Chromium/12.0.742.112 Chrome/12.0.742.112 Safari/534.30"})
    contacts = urllib2.urlopen(req).read()  
    contacts_xml = etree.fromstring(contacts)

    contacts_list = []

    for entry in contacts_xml.findall('{http://www.w3.org/2005/Atom}entry'):
        for address in entry.findall('{http://schemas.google.com/g/2005}email'):
            email = address.attrib.get('address')
            contacts_list.append(email)

我无法弄清楚为什么我没有与该网址进行任何接触。

关于如何获得每个联系人的任何想法?

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

作为Contacts API documentation says

  

即使您明确请求所有可能的结果,Contacts API也会对一次返回的结果数量进行硬性限制。如果请求的Feed包含的字段多于单个响应中可返回的字段,则API会截断Feed并添加" Next"链接,允许您请求其余的响应。

因此,您必须浏览联系人,然后按照"下一步"链接,直到您拥有所有联系人(您可以通过查找没有'下一步'链接的结果来检测到这些联系人)。

如果您不想进行额外的解析,可以尝试using the start-index parameter要求额外的联系人(即您的程序已检索到30,因此您将设置start-index到下一个查询的31)。该部分还建议您可能能够覆盖返回结果的限制:

  

如果您希望接收所有联系人,而不是仅接收默认最大值,则可以为max-results指定一个非常大的数字。

但如果这是错误的,我不会感到惊讶,你必须使用分页方法。

相关问题