【问题标题】:Retrieve all contacts from gmail using python使用python从gmail中检索所有联系人
【发布时间】:2014-07-22 09:22:51
【问题描述】:

我正在使用 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)

我不明白为什么我没有与该网址的所有联系人。

知道如何获取每个联系人吗?

非常感谢您的帮助!

【问题讨论】:

    标签: python django lxml django-socialauth


    【解决方案1】:

    作为Contacts API documentation says

    即使您明确请求所有可能的结果,Contacts API 也对一次可以返回的结果数量有硬性限制。如果请求的提要包含的字段多于单个响应中无法返回的字段,API 会截断提要并添加一个“下一步”链接,以便您请求响应的其余部分。

    因此,您必须通过这些“下一个”链接浏览联系人,直到您拥有所有联系人(您可以通过查找没有“下一个”链接的结果来检测)。

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

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

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

    【讨论】:

    • 非常感谢!我使用了 max-results 参数,效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多