[R] Intéraction avec simple note

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Yoyo86220
Niveau 6
Niveau 6
Messages : 238
Enregistré le : mer. 12 mars 2008 21:47
Status : Hors ligne

[R] Intéraction avec simple note

#1

Message par Yoyo86220 »

Bonsoir,

Je souhaiterai faire avec autoit un gestionnaire de mes Notes du site:
https://simple-note.appspot.com/

voici un code PHP qui permet théoriquement de faire ça mais je n'arrive pas à le faire marcher...
dans tout les cas je souhaite le faire avec autoit.
https://github.com/abrahamvegh/simpleno ... oteapi.php

es-que quelqu’un sais se que je dois faire?
merci :D
Modifié en dernier par Yoyo86220 le lun. 30 avr. 2012 23:33, modifié 1 fois.
Avatar du membre
Yoyo86220
Niveau 6
Niveau 6
Messages : 238
Enregistré le : mer. 12 mars 2008 21:47
Status : Hors ligne

Re: [..] Intéraction avec simple note

#2

Message par Yoyo86220 »

Bonjour

J'ai bien avancer dans mes recherches j'arrive a faire fonctionner le code PHP précédemment fourni :D j'ai donc bien étudié le code voici mon probleme...

en php => $request = fsockopen('ssl://' . $host, 443, $error['number'], $error['message'], $time_out)
j'ai donc traduit par:
$Socket = TCPConnect('ssl://simple-note.appspot.com', 443)

la connexion fonctionne car il n'y a pas d'erreur donc ma connexion est réussi sauf que:

en php => $headers_string = implode("\r\n", $headers) . str_repeat("\r\n", 2) . $data;
implode converti tout les éléments d'un tableau en une seul chaine de caractère avec \r\n entre chaque...
se qui me donne au moment de la connexion en version plus simplifié:

$headers_string = "POST /api/login HTTP/1.0\r\nHost: simple-note.appspot.com\r\nContent-type: application/x-www-form-urlencoded\r\nContent-length: 68\r\nConnection: Close\r\n\r\n{data}"

on remplace {data} par email=dzedzedzd%40dadzazd.fr&password=dadaddaz crypté en base64
Content-length détermine le nombre de caractère dans {data} (crypté)
l'email et le mdp ne doit pas contenir de caractère spéciaux en php on utilise URLencode();

maintenant que avec Autoit je suis connecté grace à:
$Socket = TCPConnect('ssl://simple-note.appspot.com', 443)
j’envoie donc mon message avec:
TCPSend($Socket, $headers_string)
mais voilà que j'ai une erreur n°10038

comme si la connexion n'était pas établie...

MERCI d'avance pour votre aide car j'avoue que c'est un peu compliqué si mes explications de sont pas clair dite le moi.
Avatar du membre
Yoyo86220
Niveau 6
Niveau 6
Messages : 238
Enregistré le : mer. 12 mars 2008 21:47
Status : Hors ligne

Re: [..] Intéraction avec simple note

#3

Message par Yoyo86220 »

voici un code PHP bien plus simplifier qui se connecte au compte simplenote@hotmail.fr
il fonctionne parfaitement.
je souhaite le convertir pour Autoit

Code : Tout sélectionner

<?php
    $request = fsockopen('ssl://simple-note.appspot.com', 443);
    if ($request) {
        echo 'connectOK<br />';
    }
    $headers_string = "POST /api/login HTTP/1.0\r\nHost: simple-note.appspot.com\r\nContent-type: application/x-www-form-urlencoded\r\nContent-length: 68\r\nConnection: Close\r\n\r\nZW1haWw9c2ltcGxlbm90ZSU0MGhvdG1haWwuZnImcGFzc3dvcmQ9bW90ZGVwYXNzZQ==";
    fwrite($request, $headers_string);
    
    $response='';
    while (!feof($request)) {
        $response .= fgets($request, 1024);
    }
    echo $response;
?>
version Autoit Qui ne fonctionne pas:

Code : Tout sélectionner

TCPStartup()
$Socket = TCPConnect('ssl://simple-note.appspot.com', 443)
$headers_string = "POST /api/login HTTP/1.0\r\nHost: simple-note.appspot.com\r\nContent-type: application/x-www-form-urlencoded\r\nContent-length: 68\r\nConnection: Close\r\n\r\nZW1haWw9c2ltcGxlbm90ZSU0MGhvdG1haWwuZnImcGFzc3dvcmQ9bW90ZGVwYXNzZQ=="
$Send = TCPSend($Socket, $headers_string)

While 1
    $Recv = TCPRecv($Socket, 1024)
    If $Recv <> "" Then
        ExitLoop
    EndIf
WEnd
MsgBox(0, "", $Recv)
Avatar du membre
Yoyo86220
Niveau 6
Niveau 6
Messages : 238
Enregistré le : mer. 12 mars 2008 21:47
Status : Hors ligne

Re: [..] Intéraction avec simple note

#4

Message par Yoyo86220 »

SVP j'ai vraiment besoin d'aide... :cry:
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Intéraction avec simple note

#5

Message par mikell »

Je connais pas php ni TCP mais ya au moins ça

Code : Tout sélectionner

TCPStartup()
$ip = TCPNameToIP('ssl://simple-note.appspot.com')
$Socket = TCPConnect($ip, 443)
MsgBox(0, "", @error)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Yoyo86220
Niveau 6
Niveau 6
Messages : 238
Enregistré le : mer. 12 mars 2008 21:47
Status : Hors ligne

Re: [..] Intéraction avec simple note

#6

Message par Yoyo86220 »

Code : Tout sélectionner

TCPStartup()
$ip = TCPNameToIP('simple-note.appspot.com')
$Socket = TCPConnect($ip, 443)
$headers_string = "POST /api/login HTTP/1.0"&@CRLF&"Host: simple-note.appspot.com"&@CRLF&"Content-type: application/x-www-form-urlencoded"&@CRLF&"Content-length: 68"&@CRLF&"Connection: Close"&@CRLF&@CRLF&"ZW1haWw9c2ltcGxlbm90ZSU0MGhvdG1haWwuZnImcGFzc3dvcmQ9bW90ZGVwYXNzZQ=="
$Send = TCPSend($Socket, $headers_string)
if @error Then MsgBox(0, "", "error")
While 1
    $Recv = TCPRecv($Socket, 1024)
    If $Recv <> "" Then
        ExitLoop
    EndIf
WEnd
MsgBox(0, "", $Recv)
donc voilà, j'ai plus d'erreur quand j’envoie le message j'avais oublié que pour TCPConnect il fallait l'IP et non l'adresse... faute de débutant :(
enfin ça ne résout rien au problème car j'ai aucune réponse a ma requête se qui me parait logique car rien est crypté et en SSL je pense que c'est le but non? si j’analyse les trames avec wireshark je vois bien le message en claire donc... je sais pas comment envoyer un message en SSL merci de m'aider.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Intéraction avec simple note

#7

Message par mikell »

Hum je peux pas t'aider plus mais AMHA WinHttp conviendrait mieux
WinHttp 1.6.2.3.zip
(107.82 Kio) Téléchargé 67 fois
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Intéraction avec simple note

#8

Message par ani »

d'après ton code, tu demande des que t'a une reception differente de rien alors tu quitte, là et l'erreur.

Code : Tout sélectionner

If $Recv <> "" Then exitloop

Code : Tout sélectionner

If $Recv <> "" Then
    consolewrite($recv)
endif
je li l'aide sur ce chapitre et me semble qu'il existe une librairie specialement pour ssl1/2 ou d'utilise WINinet.au3
Avatar du membre
Yoyo86220
Niveau 6
Niveau 6
Messages : 238
Enregistré le : mer. 12 mars 2008 21:47
Status : Hors ligne

Re: [..] Intéraction avec simple note

#9

Message par Yoyo86220 »

Voici se que j'ai fais mais la requête ne me retourne rien :(

Code : Tout sélectionner

#include <WinHttp.au3>

Global $sDomain = "simple-note.appspot.com"
Global $sPage = "api/login"
$headers_string = "POST /api/login HTTP/1.0"&@CRLF&"Host: simple-note.appspot.com"&@CRLF&"Content-type: application/x-www-form-urlencoded"&@CRLF&"Content-length: 68"&@CRLF&"Connection: Close"&@CRLF&@CRLF&"ZW1haWw9c2ltcGxlbm90ZSU0MGhvdG1haWwuZnImcGFzc3dvcmQ9bW90ZGVwYXNzZQ=="


Global $hOpen = _WinHttpOpen()
; Get connection handle
Global $hConnect = _WinHttpConnect($hOpen, $sDomain)
if @error Then MsgBox(16, "", 1)
$sData = "ZW1haWw9c2ltcGxlbm90ZSU0MGhvdG1haWwuZnImcGFzc3dvcmQ9bW90ZGVwYXNzZ=="
$hRequestSSL = _WinHttpSimpleSSLRequest($hConnect, "POST", $sPage, $sData)
if @error Then MsgBox(16, "", 2&@CRLF&@error)

MsgBox(0, "", $hRequestSSL)
se que je souhaite récupérer c'est l'"id" d'authentification
exemple en PHP Voici se qu'il le retourne comme information après avoir envoyer la requête de connexion:
HTTP/1.0 200 OK Content-Type: text/html; charset=utf-8 Cache-Control: no-cache Set-Cookie: auth=EABF31F848234D3A927D670516E4AE5FA99CF6830E39DDE33F26DF2603259729; expires=Mon, 14-May-2012 13:39:09 GMT Set-Cookie: email=simplenote@hotmail.fr; expires=Mon, 14-May-2012 13:39:09 GMT Account-Type: 000 Expires: Fri, 01 Jan 1990 00:00:00 GMT Vary: Accept-Encoding Date: Mon, 30 Apr 2012 13:39:09 GMT Server: Google Frontend EABF31F848234D3A927D670516E4AE5FA99CF6830E39DDE33F26DF2603259729
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Intéraction avec simple note

#10

Message par ani »

normale vu que sous tout autre language il y a le retour de l'entete que tu a oublié d'ajouter sur ton exemple

Reponse header (read)

comme tu passe au winhttp doit avoir cette commande

Code : Tout sélectionner

_WinHttpQueryHeaders($hRequestSSL)
j'ai toujours pas suivit ce que tu désire réaliser (kesako Simple note InteractiF ?)

merci et bonne continuation
Avatar du membre
Yoyo86220
Niveau 6
Niveau 6
Messages : 238
Enregistré le : mer. 12 mars 2008 21:47
Status : Hors ligne

Re: [..] Intéraction avec simple note

#11

Message par Yoyo86220 »

Merci ani c'était le problème effectivement j'ai trouvé tout seul! comme un grand :D

voici le script qui permet de lire les notes une par une:
je vais faire un UDF.

Code : Tout sélectionner

#include <WinHttp.au3>
#include <String.au3>
#include <Base64.au3>
#include <Array.au3>
#include "JSON.au3"

Global $sDomain = "simple-note.appspot.com"
Global $sPage = "api/login"

$email = "adresse-email@domaine.fr"
$password = "password"

$emailURL = _URIEncode($email)
$passwordURL = _URIEncode($password)

$sData = _Base64Encode("email="&$emailURL&"&password="&$passwordURL)

Global $hOpen = _WinHttpOpen()

Global $hConnect = _WinHttpConnect($hOpen, $sDomain)

$hRequestSSL =  _WinHttpSimpleSendSSLRequest($hConnect, "POST", $sPage,Default, $sData)
$HeadersReturn = _WinHttpQueryHeaders($hRequestSSL)
$Number = _StringBetween($HeadersReturn, "HTTP/1.1 ", " ")
If $Number[0] = 200 Then
    $auth = _StringBetween($HeadersReturn, "auth=", ";")
    $AUTH = $auth[0]
    $hRequestSSL = _WinHttpSimpleSendRequest($hConnect, Default, 'api/index?auth='&$AUTH&'&email='&$emailURL)
    $retour = _WinHttpSimpleReadData($hRequestSSL)
    $table = _JSONDecode($retour)
    For $i = 1 to UBound($table)
        $Note = $table[$i-1]
        $KeyNote = $Note[3][1]
        $hRequestSSL = _WinHttpSimpleSendRequest($hConnect, Default, 'api/note?key='&$KeyNote&'&auth='&$AUTH&'&email='&$emailURL&'&encode=base64')
        $retour = _WinHttpSimpleReadData($hRequestSSL)
        MsgBox(0, "", BinaryToString(_Base64Decode($retour)))
    Next
EndIf


Func _URIEncode($sData)
    Local $aData = StringSplit(BinaryToString(StringToBinary($sData,4),1),"")
    Local $nChar
    $sData=""
    For $i = 1 To $aData[0]
        ConsoleWrite($aData[$i] & @CRLF)
        $nChar = Asc($aData[$i])
        Switch $nChar
            Case 45, 46, 48-57, 65 To 90, 95, 97 To 122, 126
                $sData &= $aData[$i]
            Case 32
                $sData &= "+"
            Case Else
                $sData &= "%" & Hex($nChar,2)
        EndSwitch
    Next
    Return $sData
EndFunc

Func _URIDecode($sData)
    Local $aData = StringSplit(StringReplace($sData,"+"," ",0,1),"%")
    $sData = ""
    For $i = 2 To $aData[0]
        $aData[1] &= Chr(Dec(StringLeft($aData[$i],2))) & StringTrimLeft($aData[$i],2)
    Next
    Return BinaryToString(StringToBinary($aData[1],1),4)
EndFunc
Merci à tous pour votre aide.
Résolu :P
Avatar du membre
Yoyo86220
Niveau 6
Niveau 6
Messages : 238
Enregistré le : mer. 12 mars 2008 21:47
Status : Hors ligne

Re: [R] Intéraction avec simple note

#12

Message par Yoyo86220 »

voici l'UDF _simpleNote

Code : Tout sélectionner

;UDF AutoItV3 Créer par Lionel Seguin
;Date de commencement: 01/05/2012 à 11h52
;Date de fin: 01/05/2012 à 12h56
;Version: 1.0
;---------- SimpleNote Sync ----------

#include <WinHttp.au3>
#include <String.au3>
#include <Base64.au3>
#include <JSON.au3>

Global $sDomain = "simple-note.appspot.com"

Func SimpleNote_login($email, $password)
    $emailURL = _URIEncode($email)
    $passwordURL = _URIEncode($password)
    $hOpen = _WinHttpOpen()
    $hConnect = _WinHttpConnect($hOpen, $sDomain)
    $sData = _Base64Encode("email="&$emailURL&"&password="&$passwordURL)
    $hRequestSSL =  _WinHttpSimpleSendSSLRequest($hConnect, "POST", "api/login", Default, $sData)
    $HeadersReturn = _WinHttpQueryHeaders($hRequestSSL)
    $Number = _StringBetween($HeadersReturn, "HTTP/1.1 ", " ")
    If $Number[0] = 200 Then
        $auth = _StringBetween($HeadersReturn, "auth=", ";")
        $AUTH = $auth[0]
        Dim $aConnexion[3]
        $aConnexion[0] = $hConnect
        $aConnexion[1] = $AUTH
        $aConnexion[2] = $emailURL
        Return $aConnexion
    EndIf
EndFunc ; ===> Return $aConnexion

Func SimpleNote_getIndex($aConnexion)
    $hConnect = $aConnexion[0]
    $AUTH = $aConnexion[1]
    $emailURL = $aConnexion[2]
    $hRequestIndex = _WinHttpSimpleRequest($hConnect, Default, 'api/index?auth='&$AUTH&'&email='&$emailURL)
    $aIndex = _JSONDecode($hRequestIndex)
    Return $aIndex
EndFunc  ; ===> Return $aIndex

Func SimpleNote_getNbNote($aIndex)
    Return UBound($aIndex)
EndFunc ; ===> Return Nombre de Note dans $aIndex

Func SimpleNote_getKey($aIndex, $numNote)
    $aNote = $aIndex[$numNote-1]
    Return $aNote[3][1]
EndFunc ; ===> Return la Key d'une note de $aIndex

Func SimpleNote_getDateModif($aIndex, $numNote)
    $aNote = $aIndex[$numNote-1]
    Return $aNote[2][1]
EndFunc

Func SimpleNote_getNoteByKey($aConnexion, $Key)
    $hConnect = $aConnexion[0]
    $AUTH = $aConnexion[1]
    $emailURL = $aConnexion[2]
    $hRequestNote = _WinHttpSimpleRequest($hConnect, Default, 'api/note?key='&$Key&'&auth='&$AUTH&'&email='&$emailURL&'&encode=base64')
    Return BinaryToString(_Base64Decode($hRequestNote))
EndFunc

Func SimpleNote_getNote($aConnexion, $aIndex, $numNote)
    $NoteKey = SimpleNote_getKey($aIndex, $numNote)
    Return SimpleNote_getNoteByKey($aConnexion, $NoteKey)
EndFunc

Func SimpleNote_modifyNote($aConnexion, $Text, $Key)
    $hConnect = $aConnexion[0]
    $AUTH = $aConnexion[1]
    $emailURL = $aConnexion[2]
    $hRequestNote = _WinHttpSimpleRequest($hConnect, "POST", 'api/note?key='&$Key&'&auth='&$AUTH&'&email='&$emailURL, default, _Base64Encode($Text))
EndFunc

Func SimpleNote_addNote($aConnexion, $Text)
    $hConnect = $aConnexion[0]
    $AUTH = $aConnexion[1]
    $emailURL = $aConnexion[2]
    $hRequestNote = _WinHttpSimpleSendRequest($hConnect, "POST", 'api/note?auth='&$AUTH&'&email='&$emailURL, default, _Base64Encode($Text))
EndFunc

Func SimpleNote_deleteNote($aConnexion, $Key)
    $hConnect = $aConnexion[0]
    $AUTH = $aConnexion[1]
    $emailURL = $aConnexion[2]
    $hRequestNote = _WinHttpSimpleSendRequest($hConnect, Default, 'api/delete?key='&$Key&'auth='&$AUTH&'&email='&$emailURL)
EndFunc

Func SimpleNote_searchNote($aConnexion, $search_term, $max_results = 10, $offset_index = 0)
    $hConnect = $aConnexion[0]
    $AUTH = $aConnexion[1]
    $emailURL = $aConnexion[2]
    $hRequestSearch = _WinHttpSimpleRequest($hConnect, Default, 'api/search?query='&_URIEncode($search_term)&'&results='&$max_results&'&offset='&$offset_index&'&auth='&$AUTH&'&email='&$emailURL)
    $aSearch = _JSONDecode($hRequestSearch)
    Return $aSearch
EndFunc

Func SimpleNote_readNbFindNote($aSearch)
    $Reponse = $aSearch[1][1]
    $TotalRecord = $Reponse[1][1]
    Return $TotalRecord
EndFunc

Func SimpleNote_readContentFindNote($aSearch, $numNote)
    $Reponse = $aSearch[1][1]
    $AllRep = $Reponse[2][1]
    $Tempo = $AllRep[$numNote-1]
    $Content = $Tempo[1][1]
    Return $Content
EndFunc

Func SimpleNote_readKeyFindNote($aSearch, $numNote)
    $Reponse = $aSearch[1][1]
    $AllRep = $Reponse[2][1]
    $Tempo = $AllRep[$numNote-1]
    $Key = $Tempo[2][1]
    Return $Key
EndFunc

Func _URIEncode($sData)
    Local $aData = StringSplit(BinaryToString(StringToBinary($sData,4),1),"")
    Local $nChar
    $sData=""
    For $i = 1 To $aData[0]
        ConsoleWrite($aData[$i] & @CRLF)
        $nChar = Asc($aData[$i])
        Switch $nChar
            Case 45, 46, 48-57, 65 To 90, 95, 97 To 122, 126
                $sData &= $aData[$i]
            Case 32
                $sData &= "+"
            Case Else
                $sData &= "%" & Hex($nChar,2)
        EndSwitch
    Next
    Return $sData
EndFunc

Func _URIDecode($sData)
    Local $aData = StringSplit(StringReplace($sData,"+"," ",0,1),"%")
    $sData = ""
    For $i = 2 To $aData[0]
        $aData[1] &= Chr(Dec(StringLeft($aData[$i],2))) & StringTrimLeft($aData[$i],2)
    Next
    Return BinaryToString(StringToBinary($aData[1],1),4)
EndFunc
Exemple:

Code : Tout sélectionner

;Script AutoItV3 Créer par Lionel Seguin
;Date de commencement: 28/04/2012 à 11h34
;Date de fin: 01/05/2012 à 11h52

#include <_SimpleNote.au3>

$Email = "adresse@domaine.fr"
$Password = "mot_de_passe"

$Connexion = SimpleNote_login($Email, $Password)
$Index = SimpleNote_getIndex($Connexion)
$Key = SimpleNote_getKey($Index, 1)
$Search = SimpleNote_searchNote($Connexion, "in") ; trouve toutes les notes qui possède la chaine de caractère "in"   

$NbNoteFound = SimpleNote_readNbFindNote($Search) ; retourne le nombre de note trouvé dans $Search 

For $i = 1 to $NbNoteFound
    MsgBox(0, "", SimpleNote_readKeyFindNote($Search, $i)) ; retourne la key de la $i note trouvé dans $Search 
    MsgBox(0, "", SimpleNote_readContentFindNote($Search, $i)) ; retourne le contenu de la $i note trouvé dans $Search 
Next
Avatar du membre
blacksoul305
Membre émérite
Membre émérite
Messages : 957
Enregistré le : ven. 18 mars 2011 11:49
Localisation : Au pays des programmeurs.
Status : Hors ligne

Re: [R] Intéraction avec simple note

#13

Message par blacksoul305 »

Pense à mettre tes codes dans les balises spoiler.

Pourquoi pas poster ton UDF ici ?
Étudiant en 2ème année de Licence Informatique.
Répondre