IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques tierces Python Discussion :

Bad request avec Gdata google calendar


Sujet :

Bibliothèques tierces Python

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2011
    Messages : 57
    Points : 46
    Points
    46
    Par défaut Bad request avec Gdata google calendar
    Bonjour,

    le code ci dessous me permets de lister tous les evenements futurs contenus dans mon calendrier Outlook et devrait insérer ceux-ci dans un calendirer Google...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    # -*- coding: UTF-8 -*-
    from __future__ import unicode_literals
    import gdata.calendar.service
    import gdata.service
    import atom.service
    import gdata.calendar
    import atom
    import getopt
    import sys
    import string
    import time
    from pywintypes import UnicodeType, TimeType
    import os
    import win32com.client
    from win32com.client import Dispatch, constants
    #import time
    #import datetime
    from datetime import *
     
     
    #connexion a google
    user = "********"
    passwd = "*******"
    cal_client = gdata.calendar.service.CalendarService()
    cal_client.email = user
    cal_client.password = passwd
    cal_client.source = 'Google-Calendar_Python_Sample-1.0'
    cal_client.ProgrammaticLogin()
     
     
    #Ouverture Outlook
    outlook = win32com.client.Dispatch("Outlook.Application")
    namespace = outlook.GetNamespace("MAPI")
    appointments = namespace.GetDefaultFolder(9).Items
    dateDefault = datetime.now().strftime('%m/%d/%y %H:%M:%S')
    dateFin = datetime(2013,9,30, 0, 0, 0)
    dateFin = dateFin.strftime('%m/%d/%y %H:%M:%S')
     
    #Lecture des evenements
    appointment = appointments.GetFirst()
     
     
    while dateDefault <= unicode(appointment.Start): # apprès la date du jour
        datedebut = unicode(appointment.Start)
        if datedebut >= dateDefault:
            sujet = appointment.Subject
            detail = appointment.Body
            location = appointment.Location
            invites = appointment.RequiredAttendees
            optionnels = appointment.OptionalAttendees
            rappel = unicode(appointment.ReminderMinutesBeforeStart)
            #on imprime pour contrôle
            print "Debut : " + unicode(appointment.Start) + ", Fin : " + unicode(appointment.End)
            print type(appointment.Start)
            start = str(appointment.Start)
            fin = str(appointment.End)
            fin = datetime.strptime( fin, "%m/%d/%y %H:%M:%S")
            print type(start)
            start = datetime.strptime(start, "%m/%d/%y %H:%M:%S")
            print type(start)
            jourStart= start.strftime("%Y-%m-%dT%H.%M.%S.%f")
            #heureStart = start.strftime("%H:%M:%S")
            jourFin = fin.strftime("%Y-%m-%dT%H.%M.%S.%f")
            #heureFin = fin.strftime("%H:%M:%S")
            print "DATE FORMATEE //// " + jourStart
            print "Sujet : " + appointment.Subject
            print "Location : " + appointment.Location
            print "Corps : " +appointment.Body
            print "Invités : " + unicode(appointment.RequiredAttendees)
            print "Invités Optionnels : " + appointment.OptionalAttendees
            print "Rappel : " + unicode(appointment.ReminderMinutesBeforeStart) + " minutes"
     
            #Code destiné à inserer chaque evenement outlook trouvé dans le calendrier google
            event = gdata.calendar.CalendarEventEntry()
            event.author.append(atom.Author(name=atom.Name(text=sujet)))
            event.title = atom.Title(text=sujet)
            event.content = atom.Content(text=detail)
            event.where.append(gdata.calendar.Where(value_string=location))
            event.when.append(gdata.calendar.When(start_time=jourStart, end_time=jourFin))
            calendar_url = 'https://www.google.com/calendar/feeds/default/owncalendars/full/f7b55d4g5901402khkous663bc%40group.calendar.google.com'
     
            new_event = cal_client.InsertEvent(event,calendar_url)
     
     
     
     
     
     
            appointment = appointments.GetNext ()
    Tout se passe correctement jusqu'à la ligne 74, c-à-d jusqu'à ce que j'insère le code destiné à insérer les evenements dans google calendar, là je reçois l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RequestError:{'satus':400,'body:'Invalid request URI', 'reason':'Bad Request'}
    J'ai beau retourner l'url dans tous les sens, toujour le même résultat.

    Une idée ?

    Merci,

    Pierre

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2011
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    bonjour,

    en fait, dans mon code j'utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    calendar_url = 'https://www.google.com/calendar/feeds/default/owncalendars/full/f7b55d4g5901402khkous663bc%40group.calendar.google.com'
    qui est l'adresse que jai récupéré au moyen de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    feed = cal_client.GetOwnCalendarsFeed()
    dans une autre fonction.
    Mais apparament, pour insérer un évènement, l'adresse doit - être de cette forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'https://www.google.com/calendar/feeds/f7b55d4g5901402khkous663bc%40group.calendar.google.com/private/full'
    J'ai donc reconstitué cette adresse comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    titre = entry.title.text
            url = entry.id.text
            url = url.split('/')
            list(url)
            url = url[8]
            url = ''.join(url)
            url = 'http://www.google.com/calendar/feeds/' + url + '/private/ful'
    qui me donne bien le format désiré.
    Mais, pour pouvoir choisir dans quel calendrier je veux insérer mon évenement, j'ai lister tous les calendriers et leur url et les ai placé dans une BDD comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for entry in feed.entry:
            titre = entry.title.text
            url = entry.id.text
            url = url.split('/')
            list(url)
            url = url[8]
            url = ''.join(url)
            url = 'http://www.google.com/calendar/feeds/' + url + '/private/ful'
            print url
            cur.execute("INSERT INTO Calendriers(Titre,Adresse) VALUES(?,?)",(titre,url))
            #On enregistre la BDD pour usage ultérieur
            connexion.commit()
    Pour recuperer ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cur.execute("SELECT Adresse FROM Calendriers WHERE Titre = 'VIVAQUA'")
    url1 = list(cur)
    et créer l'evenement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    event = gdata.calendar.CalendarEventEntry()
            event.author.append(atom.Author(name=atom.Name(text=sujet)))
            event.title = atom.Title(text=sujet)
            event.content = atom.Content(text=detail)
            event.where.append(gdata.calendar.Where(value_string=location))
            event.when.append(gdata.calendar.When(start_time=jourStart, end_time=jourFin))
            calendar_url = url1
    Resultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UnparsableUrlObject: Unable to parse url parameter because it was not a string or atom.url.Url
    c'est à s'arracher les cheveux ce truc

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2011
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    Bah encore une fois j'ai fini par trouver...
    Plutot que d'utiliser une BDD, j'utilise un fichier de dictionnaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dico = {}
    dico1={titre:url}
    dico.update(dico1)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. api google calendar avec javascript
    Par webax dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 08/06/2010, 15h54
  2. [adobe AIR] Interaction avec Google calendar API
    Par Sumoner dans le forum Flex
    Réponses: 3
    Dernier message: 01/12/2009, 16h39
  3. gérer l'ajout d'événement avec l'API Google Calendar
    Par brunoperel dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/03/2009, 16h41
  4. Bad Request avec PERL LWP
    Par guillem1 dans le forum Modules
    Réponses: 3
    Dernier message: 01/12/2008, 12h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo