[Resolu] Scriptmaster Post Data To Url Pour Créer Un Evenement Dans Google Agenda
#1
Posté 10 août 2012 - 07:50
Je bute sur la syntaxe exacte à utiliser pour envoyer une requête de création d'événement vers google agenda.
J'utilise la requête suivante, en OAuth2, d'où l'access token :
POST https : // www.googleapis.com/calendar/v3/calendars/myCalendar/events/quickAdd?access_token=myAcessToken
key = body
value = '{ "summary": "Test", "start": {"timeZone": "Europe/Paris","dateTime": "2012-08-09T09:00:00"}, "end": {"timeZone": "Europe/Paris","dateTime": "2012-08-09T10:00:00"} }'
J'obtiens une erreur 400, j'en déduis que quelque chose ne va pas dans ma requête, je me doute que cela vient :
- soit de ma clé, qui au sens google est une resource, mais dont la valeur n'est pas clairement explicitée ici :
https://developers.g...e/events/insert
- soit de ma valeur, dont j'ai trouvé un exemple de requête python ici :
http://code.google.c...es/detail?id=86 ,
d'où le 'body' et les doubles et simples quotes.
Je ne dois pas être loin du tout car la requête suivante fonctionne et crée bien un événement dans mon agenda :
url = https : //www.googleapis.com/calendar/v3/calendars/myCalendar/events/quickAdd?access_token=myAccessToken
key = text
value = myEvent
La syntaxe de la requête est donnée par Google :
https://developers.g...e/events/insert
avec même des exemples de code Java, Pyhton, PHP et Ruby, mais pas en "brut" ou en scriptMaster on va dire.
Merci
#2
Posté 10 août 2012 - 08:33
J'utilise aujourd'hui encore "OAuth1" et SM à ma plus grande satisfaction et n'ai pas basculé en OAuth2 (encore en bêta); mais pourrais-tu poster le script Java/Groovy que tu utilises avec ScriptMaster ?

Clement Hoffmann aka clem
Certified "Do-it-yourself" developer.
#3
Posté 10 août 2012 - 08:52
Voici le script groovy, tout à fait classique, je ne l'ai pas vraiment modifié par rapport au fichier d'exemple fourni par ScriptMaster :
// Construct data
String data = URLEncoder.encode(key, "UTF-8") + "=" + URLEncoder. encode(value, "UTF-8");
// Send data
URL url = new URL(url);
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();
// Get the response
String response = conn.getInputStream().getText("utf-8");
wr.close();
return response;
J'ai également essayé d'envoyer la requête sans key, directement avec la valeur, même erreur 400.
#4
Posté 10 août 2012 - 09:53

Clement Hoffmann aka clem
Certified "Do-it-yourself" developer.
#5
Posté 10 août 2012 - 10:07
C'est assez complexe, avec une première requête en GET pour avoir un authorization token, puis une requête en POST pour avoir l'access token.
Comme je l'ai écrit dans le premier post, mon acces_token est valable car la requete en quickAdd fonctionne :
url = https : //www.googleapis.com/calendar/v3/calendars/myCalendar/events/quickAdd?access_token=myAccessToken
key = text
value = myEvent
Ca ajoute bien mon événement. J'en déduis que c'est la syntaxe de ma requête insert qui est incorrecte.
Non ?
#6
Posté 10 août 2012 - 10:24
quelle info retourne:
https://www.googleapis.com/oauth2/v1/tokeninfo?access_token={accessToken} ?La durée de vie du token n'est-elle pas arrivée à échéance ?

Clement Hoffmann aka clem
Certified "Do-it-yourself" developer.
#7
Posté 10 août 2012 - 10:50
Je te donne pour info le retour du GET sur le tokeninfo :
{
"issued_to": "1044031973367-9f7qocmq1khrdirr72n0d5ciibhna4ar.apps.googleusercontent.com",
"audience": "1044031973367-9f7qocmq1khrdirr72n0d5ciibhna4ar.apps.googleusercontent.com",
"user_id": "110110735689480935698",
"scope": "https://www.googleap...m/auth/calendar https://www.googleap...serinfo.profile https://www.googleap...userinfo.email",
"expires_in": 3527,
"email": "chenot.olivier@gmail.com",
"verified_email": true,
"access_type": "offline"
}
Mais comme je l'ai posté, j'ai déja une requete POST qui fonctionne avec mon acces_token ( quickAdd ) :
Sans titre.png 3,79K
1 Nombre de téléchargements Sauf erreur, c'est donc bien ma requête qui pose problème, et non mon token.
#8
Posté 10 août 2012 - 11:47
La requête POST que je fais est bien pour une insertion d'événement :
POST https : // www.googleapis.com/calendar/v3/calendars/myCalendar/events?access_token=myAcessToken
body='{ "summary": "Test", "start": {"timeZone": "Europe/Paris","dateTime": "2012-08-09T09:00:00"}, "end": {"timeZone": "Europe/Paris","dateTime": "2012-08-09T10:00:00"} }'
Et non comme je l'ai indiqué par erreur :
POST https : // www.googleapis.com/calendar/v3/calendars/myCalendar/events/quickAdd?access_token=myAcessToken
body='{ "summary": "Test", "start": {"timeZone": "Europe/Paris","dateTime": "2012-08-09T09:00:00"}, "end": {"timeZone": "Europe/Paris","dateTime": "2012-08-09T10:00:00"} }'
Comme déjà indiqué la requête quickAdd est plus simple (text=myEvent) et fonctionne.
Clem, as-tu écrit en OAuth1 une requête d'insertion d'événement ?
Merci
#9
Posté 10 août 2012 - 12:33
'{ "summary": "Test", "start": {"timeZone": "Europe/Paris","dateTime": "2012-08-09T09:00:00"}, "end": {"timeZone": "Europe/Paris","dateTime": "2012-08-09T10:00:00"} }'
en chaine.
Car dans le code Python dico={"keyword":"key"} indique la création d'une liste de type dictionnaire
A mon avis ton body est à revoir
#10
Posté 10 août 2012 - 12:57

Clement Hoffmann aka clem
Certified "Do-it-yourself" developer.
#11
Posté 10 août 2012 - 14:00
Clem utilises-tu une valeur pour 'key' ? la valeur 'body' ?
Sinon je vais essayer d'espionner ce qui se passe sur mon trafic sortant , je n'ai pas de meilleure idée...
#12
Posté 10 août 2012 - 15:01
Clem, as-tu écrit en OAuth1 une requête d'insertion d'événement ?
j'avais pas vu...désolé.
Oui j'en ai écris une pour OAuth1 (et elle fonctionne tjrs

Clement Hoffmann aka clem
Certified "Do-it-yourself" developer.
#13
Posté 13 août 2012 - 09:55
String data = value;
// Send data
URL url = new URL(url);
URLConnection conn = url.openConnection();
conn.setRequestProperty( "content-type", "application/json" );
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();
Ca marche nickel.
FM Source est un service gratuit de La Source multimédia - spécialistes FileMaker
Développement FileMaker. Formation FileMaker. Hébergement FileMaker. Le blog FileMaker. Vente de licences FileMaker. Conférence FileMaker. Forum FileMaker. FileMaker resources














