2010-03-26 6 views
4

Je me bats avec l'écriture d'un script python qui récupère automatiquement le zip contenant tous mes calendriers Google et le stocke (en tant que sauvegarde) sur mon disque dur. J'utilise ClientLogin pour obtenir un jeton d'authentification (et peut obtenir le jeton avec succès).Sauvegardez Google Calendar par programmation: https://www.google.com/calendar/exporticalzip

Malheureusement, je suis incapable de récupérer le fichier à https://www.google.com/calendar/exporticalzip

Il me demande toujours les informations de connexion à nouveau en retournant une page de connexion en html (au lieu du zip).

Voici le code critique:

post_data = post_data = urllib.urlencode({ 'auth': token, 'continue': zip_url}) 
request = urllib2.Request('https://www.google.com/calendar', post_data, header) 
try: 
    f = urllib2.urlopen(request) 
    result = f.read() 
except: 
    print "Error" 

Toute personne des idées ou fait ça avant? Ou une autre idée comment sauvegarder tous mes calendriers (automatiquement!)

Répondre

0

Les calendriers ont une URL qui vous permet de le télécharger sans authentification (voir l'interface de Google Calendar, les paramètres du calendrier, sous URL privée). Vous devriez être capable de télécharger le fichier iCal ou XML en utilisant urllib sans problèmes.

+0

Si possible, je voudrais utiliser l'URL que j'ai fourni ci-dessus. Là, je reçois toujours tout mon calendrier dans un fichier zip sans avoir besoin de connaître les URL privées de chaque calendrier. – Michael

5

Vous pouvez écrire un script avec mechanize pour parcourir le processus de connexion google avant de télécharger le calendrier à partir de votre URL préférée.

Donc, essayez avec:

import mechanize 
br=mechanize.Browser() 
br.open('https://www.google.com/calendar/exporticalzip') 
br.select_form(nr=0) 
br['Email']='[email protected]' 
br['Passwd']='Password' 
br.submit() 
br.retrieve('https://www.google.com/calendar/exporticalzip','exportical.zip') 

Il a travaillé pour moi, j'ai téléchargé mon calendrier ical compressé avec succès.

0

Grande solution systempuntoout! Pour ceux d'entre vous qui utilisent Google Apps, il suffit de modifier les URL et l'adresse e-mail.

import mechanize 
br=mechanize.Browser() 
br.open('https://www.google.com/calendar/hosted/yourdomain.com/exporticalzip') 
br.select_form(nr=0) 
br['Email']='Username' 
br['Passwd']='Password' 
br.submit() 
br.retrieve('https://www.google.com/calendar/hosted/yourdomain.com/exporticalzip','exportical.zip')