Recupera todos los contactos de gmail usando python

Estoy usando Django Social Auth para recuperar contactos de Gmail. No tengo ningún problema para obtener la autorización. Hago una solicitud y luego uso lxml para recuperar las direcciones de correo electrónico.

El problema es que no muestra todos los contactos. Por ejemplo, solo puedo recuperar 30 contactos mientras tengo más de 300 contactos con mi cuenta de gmail.

Aquí está mi punto de vista:

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) 

No puedo entender por qué no tengo todos los contactos con esa URL.

¿Alguna idea de cómo puedo conseguir todos los contactos?

Muchas gracias por su ayuda !

Como dice la documentación de la API de contactos :

La API de contactos tiene un límite estricto para la cantidad de resultados que puede devolver a la vez, incluso si usted solicita explícitamente todos los resultados posibles. Si la fuente solicitada tiene más campos de los que se pueden devolver en una sola respuesta, la API trunca la fuente y agrega un enlace “Siguiente” que le permite solicitar el rest de la respuesta.

Por lo tanto, tendrá que buscar en los contactos, siguiendo los enlaces “Siguiente”, hasta que tenga todos los contactos (que puede detectar buscando un resultado sin un enlace “Siguiente”).

Si no desea realizar un análisis adicional, puede intentar usar el parámetro start-index para solicitar contactos adicionales (es decir, su progtwig ha recuperado 30, por lo que establecerá start-index en 31 para la próxima consulta). Esa sección también sugiere que podría anular el límite de resultados devueltos:

Si desea recibir todos los contactos, en lugar de solo el máximo predeterminado, puede especificar un número muy grande para max-results .

Pero no me sorprendería si eso fuera falso, y tendrá que usar el enfoque paginado.