Aller au contenu


Photo
- - - - -

[Resolu] Scriptmaster Post Data To Url Pour Créer Un Evenement Dans Google Agenda


  • Please log in to reply
12 réponses à ce sujet

#1 Chet.Toulouse

Chet.Toulouse
  • Membres
  • PipPip
  • 65 messages
  • Genre :Homme
  • Lieu :Toulouse
  • FM Conférence : Paris 2010, Toulouse 2012
  • FM : FM-P,S-A-7 à 11
  • OS : Vista, W7, WS2K8


Posté 10 août 2012 - 07:50

Bonjour à tous,

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 Clem

Clem
  • Membres
  • PipPipPipPipPipPipPipPip
  • 2 992 messages
  • Genre :Homme
  • Lieu :Groland
  • FM : FMPA 12.0.2, iOS
  • OS : OSX 10.6.8 | XP pro SP3 | Seven


Posté 10 août 2012 - 08:33

Bonjour,

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 ?
Image envoyée

Clement Hoffmann aka clem
Certified "Do-it-yourself" developer.

#3 Chet.Toulouse

Chet.Toulouse
  • Membres
  • PipPip
  • 65 messages
  • Genre :Homme
  • Lieu :Toulouse
  • FM Conférence : Paris 2010, Toulouse 2012
  • FM : FM-P,S-A-7 à 11
  • OS : Vista, W7, WS2K8


Posté 10 août 2012 - 08:52

Salut,
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 Clem

Clem
  • Membres
  • PipPipPipPipPipPipPipPip
  • 2 992 messages
  • Genre :Homme
  • Lieu :Groland
  • FM : FMPA 12.0.2, iOS
  • OS : OSX 10.6.8 | XP pro SP3 | Seven


Posté 10 août 2012 - 09:53

... je ne vois pas de phase d'authentification !
Image envoyée

Clement Hoffmann aka clem
Certified "Do-it-yourself" developer.

#5 Chet.Toulouse

Chet.Toulouse
  • Membres
  • PipPip
  • 65 messages
  • Genre :Homme
  • Lieu :Toulouse
  • FM Conférence : Paris 2010, Toulouse 2012
  • FM : FM-P,S-A-7 à 11
  • OS : Vista, W7, WS2K8


Posté 10 août 2012 - 10:07

Oui, c'est fait avant...
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 Clem

Clem
  • Membres
  • PipPipPipPipPipPipPipPip
  • 2 992 messages
  • Genre :Homme
  • Lieu :Groland
  • FM : FMPA 12.0.2, iOS
  • OS : OSX 10.6.8 | XP pro SP3 | Seven


Posté 10 août 2012 - 10:24

... de ce que je viens d'en lire dans la doc Google, l'erreur 400 implique une erreur de token...

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 ?
Image envoyée

Clement Hoffmann aka clem
Certified "Do-it-yourself" developer.

#7 Chet.Toulouse

Chet.Toulouse
  • Membres
  • PipPip
  • 65 messages
  • Genre :Homme
  • Lieu :Toulouse
  • FM Conférence : Paris 2010, Toulouse 2012
  • FM : FM-P,S-A-7 à 11
  • OS : Vista, W7, WS2K8


Posté 10 août 2012 - 10:50

Non quand le token est expiré, on a une erreur 401.
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 ) :
Fichier joint  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 Chet.Toulouse

Chet.Toulouse
  • Membres
  • PipPip
  • 65 messages
  • Genre :Homme
  • Lieu :Toulouse
  • FM Conférence : Paris 2010, Toulouse 2012
  • FM : FM-P,S-A-7 à 11
  • OS : Vista, W7, WS2K8


Posté 10 août 2012 - 11:47

Je viens de constater une erreur dans mon premier post :
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 alnoe

alnoe
  • Membres
  • PipPipPip
  • 114 messages
  • Genre :Homme
  • Lieu :Au milieu du parc
  • FM : FMA 11 - FMA 12
  • OS : MacOS 10.6


Posté 10 août 2012 - 12:33

Je n'y connais rien en API google mais j'ia un doute sur le fait que tu passes

'{ "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 Clem

Clem
  • Membres
  • PipPipPipPipPipPipPipPip
  • 2 992 messages
  • Genre :Homme
  • Lieu :Groland
  • FM : FMPA 12.0.2, iOS
  • OS : OSX 10.6.8 | XP pro SP3 | Seven


Posté 10 août 2012 - 12:57

ben non, sa "map" est "Java" correctement écrite …
Image envoyée

Clement Hoffmann aka clem
Certified "Do-it-yourself" developer.

#11 Chet.Toulouse

Chet.Toulouse
  • Membres
  • PipPip
  • 65 messages
  • Genre :Homme
  • Lieu :Toulouse
  • FM Conférence : Paris 2010, Toulouse 2012
  • FM : FM-P,S-A-7 à 11
  • OS : Vista, W7, WS2K8


Posté 10 août 2012 - 14:00

Si ma "map" est correctement écrite, où est le problème alors ?
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 Clem

Clem
  • Membres
  • PipPipPipPipPipPipPipPip
  • 2 992 messages
  • Genre :Homme
  • Lieu :Groland
  • FM : FMPA 12.0.2, iOS
  • OS : OSX 10.6.8 | XP pro SP3 | Seven


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 :) ), je te la fais parvenir dès que j'ai accès à ma librairie perso SM.
Image envoyée

Clement Hoffmann aka clem
Certified "Do-it-yourself" developer.

#13 Chet.Toulouse

Chet.Toulouse
  • Membres
  • PipPip
  • 65 messages
  • Genre :Homme
  • Lieu :Toulouse
  • FM Conférence : Paris 2010, Toulouse 2012
  • FM : FM-P,S-A-7 à 11
  • OS : Vista, W7, WS2K8


Posté 13 août 2012 - 09:55

J'ai trouvé une solution : passer le type a application/json et ne pas convertir en utf-8 :
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.