2009-11-21 16 views
10

Gmail tiene esta cosa dulce pasando a tener una alimentación átomo:¿Cómo iniciar sesión automáticamente en la alimentación de atom de gmail con Python?

def gmail_url(user, pwd): 
    return "https://"+str(user)+":"+str(pwd)+"@gmail.google.com/gmail/feed/atom" 

Ahora, cuando se hace esto en un navegador, se autentica y hacia usted. Pero en Python, al menos lo que estoy intentando, no está funcionando bien.

url = gmail_url(settings.USER, settings.PASS) 
print url 
opener = urllib.FancyURLopener() 
f = opener.open(url) 
print f.read() 

En lugar de reenviar correctamente, que está haciendo esto:

>>> 
https://user:[email protected]/gmail/feed/atom 
Enter username for New mail feed at mail.google.com: 

Esto es malo! ¡No debería tener que escribir el nombre de usuario y la contraseña otra vez! ¿Cómo puedo hacer que solo avance automáticamente en Python como lo hace en mi navegador web, para que pueda obtener los contenidos de la fuente sin todas las BS?

Respuesta

13

Puede utilizar el HTTPBasicAuthHandler, He intentado lo siguiente y funcionó:

import urllib2 

def get_unread_msgs(user, passwd): 
    auth_handler = urllib2.HTTPBasicAuthHandler() 
    auth_handler.add_password(
     realm='New mail feed', 
     uri='https://mail.google.com', 
     user='%[email protected]' % user, 
     passwd=passwd 
    ) 
    opener = urllib2.build_opener(auth_handler) 
    urllib2.install_opener(opener) 
    feed = urllib2.urlopen('https://mail.google.com/mail/feed/atom') 
    return feed.read() 
+2

Me estoy poniendo 'urllib2.HTTPError: Error HTTP 401: autenticación básica falló, aunque estoy seguro de que tengo la nombre de usuario y contraseña correctos ¿Hay alguien más que esté teniendo este problema? –

+0

No importa. Solo es un problema cuando trato de ejecutar el código desde mi servidor. Cuando lo hago en mi máquina local funciona bien. –

Cuestiones relacionadas