Page 1 sur 2

[..] Creation d'une GUI pour speedtest

Posté : ven. 21 août 2015 22:34
par Utilisateur 3309 supprimé
Bonjour,

tout le monde connaît Speedtest.net qui permet de vérifier les performance de sa ligne internet.
Le test se fait depuis un navigateur web + Flash.

Il existe un exécutable en ligne de commande qui permet de faire le test, il est disponible ici:
https://github.com/zpeters/speedtest

J'ai donc décidé d'utiliser autoit pour piloter cet exécutable et d'afficher le résultat dans une GUI.

tout d'abord j'ai récupéré la liste des serveurs avec la commande:

Code : Tout sélectionner

speedtest.exe -l >servers.txt
Puis j'ai supprimé tous les serveurs inutiles, et conservé que les français. J'ai ensuite bidouillé le fichier txt pour l'adapter à mes besoins.

Voici le résultat:
Image

Vous pouvez récupérer l'ensemble des fichiers ici:
http://liveboxinfo.tk/download/speedtest-gui.zip
► Afficher le texte
Donc voici ma question:
y a t'il moyen de se passer de l'exécutable de zpeters et de tout intégrer dans autoit ? avec winhttprequest par exemple ? si oui comment faire ? je ne sais pas comment le test fonctionne...ou les données sont téléchargées et ou elles sont uploadées etc...

Merci pour votre aide. :D

Re: [..] Creation d'une GUI pour speedtest

Posté : dim. 23 août 2015 21:16
par walkson
Bonjour,
Je viens de tester speedtest et cela me donne des idées pour vous répondre.
J'avais utilisé Inetget() pour récupérer un exécutable et ça marche bien. Le seul inconvénient est que si vous mettez l'adresse du site et qu'il y a une nouvelle version, ça ne marche plus.
Après, vous pouvez mettre l'exécutable sur votre site, c'est une solution.
Enfin, il y a la solution d'écrire l'exécutable en binaire et de le mettre sous forme de fonction afin de le redéployer. Il y a BinaryToAu3Kompressor de wakillon (forum US) qui fait trés bien celà. Sous forme Au3, le script pèse 1,85 Mo pour 5,62 Mo pour l'exécutable. Si vous le souhaitez, je peux mettre le script sur le forum.
Si je peux me permettre une remarque, j'ai été étonné que vous passiez par des TXT pour récupérer les retours de speedtest.
Ça ne serait pas plus simple d'utiliser StdoutRead() comme ceci
► Afficher le texte

Dans le cas présent, je récupère tous les serveurs, ce qui me permet de faire le trie pour choisir un pays.
Une dernière remarque, je ne sais pas si c'est mon PC qui est lent (ou la connexion) mais attendre sans savoir si le programme a beuguer, c'est long. Un petit progressbar ou autre ferait du bien pour patienter (enfin, c'est mon avis perso)
[Edit]
J'oubliais, votre script beugue quand un serveur n'est pas disponible ou quand la connexion est impossible au niveau de

Code : Tout sélectionner

 $result = "Serveur : " & $sSelection & @CRLF & _
                      "Ping : " & $aPing[0] & @CRLF & _
                      "Download : " & $aDownload[0] & @CRLF & _
                      "Upload : " & $aUpload[0] & "Mbps"

Autoit ne trouve pas d'array (normal!)
Il faudrait la condition If IsArray ( variable ) = 1 Then ... avant ces lignes pour résoudre le problème

Re: [..] Creation d'une GUI pour speedtest

Posté : dim. 23 août 2015 21:42
par Utilisateur 3309 supprimé
Bonjour,
merci pour vos réponses.
intégrer l'exécutable speedtest.exe dans le script pourrait être une solution mais ca ne me plait pas trop, car on ne comprends toujours pas ce qu'il fait.
Pour le passage par un fichier TXT effectivement j'ai fait au mieux de mes connaissances, je ne savais pas qu'on pouvait faire de cette façon pour récupérer le retour...Merci pour l'info :wink:

OK pour le isarray() à ajouter :wink:

Re: [..] Creation d'une GUI pour speedtest

Posté : dim. 23 août 2015 22:21
par walkson
cetipabo a écrit :intégrer l'exécutable speedtest.exe dans le script pourrait être une solution mais ca ne me plait pas trop, car on ne comprends toujours pas ce qu'il fait.
Pourquoi ? Vous déclarer la fonction _Speedtestexe ( "speedtest.exe", @TempDir & "\", 0 ), Speedtest.exe est créé dans (Par exemple) un dossier Temp et puis reste à appeler l'exécutable.
Le réel inconvénient est de surcharger le script
[Petit edit]
"Une actuce"

Code : Tout sélectionner

            $chemin = @ScriptDir & '\speedtest.exe -l'
            $ecoute = run( $chemin, @WorkingDir, @SW_HIDE, $STDOUT_CHILD)
Fonctionne parce que le chemin est intégré dans la variable $chemin Autrement Ke néni ! @ScriptDir & '\speedtest.exe en direct ! passez votre chemin

Re: [..] Creation d'une GUI pour speedtest

Posté : dim. 23 août 2015 22:37
par Utilisateur 3309 supprimé
j'ai bien compris, mais ce que je souhaite faire c'est la même chose que fait cet exécutable, avec winhttprequest par exemple, mais pas l'intégrer. Du 100% autoit quoi...

Re: [..] Creation d'une GUI pour speedtest

Posté : lun. 24 août 2015 11:25
par walkson
Bonjour,
J'ai du mal à vous suivre !
Pour faire du 100% autoit, il faudrait réécrire speedtest en autoit. En ce qui concerne winhttprequest, vous téléchargez l'exécutable comme peut le faire Inetget(), selon mes humbles connaissances...
Après, lancer l'exécutable directement de son site, il me semble totalement impossible à faire.
Donc je ne vois que 3 solutions, ou télécharger speedtest, ou faire le test sur une page d'un site et récupérer les données, ou incorporer l'exécutable dans le script sous forme binaire, à moins qu'un expert ne vienne me contredire...
La forme la plus indépendante de votre programme serait la dernière solution. A titre d'exemple, dans votre Zip, il y a une icone "Speedtest.ico". Il serait tout à fait possible de l'introduire dans le script sous forme binaire afin de l'utiliser au lancement de votre programme. Ce qui ferait un pièce jointe en moins.
Il y a aussi la solution de FileInstall () mais je ne l'utilise plus car il y a des problèmes de faux positifs avec les antivirus

Re: [..] Creation d'une GUI pour speedtest

Posté : lun. 24 août 2015 12:00
par Utilisateur 3309 supprimé
On ne se comprend pas.
l'application de Zpeters fait en ligne de commande la même chose que l'on fait sur le site web : speedtest.net en flash.
il se connecte sur les serveurs de OOKLA et utilise leur protocole pour envoyer des données et en recevoir afin d'établir une valeur de download/upload/ping.
C'est ca que je voudrais faire en 100% autoit, s'il le fait en langage GO on devrait pouvoir le faire en autoit, il suffit de comprendre comment fonctionne le protocol de speedtest.net.

Déja pour récupérer la liste des serveurs on se connecte sur cette page:
http://www.speedtest.net/speedtest-servers.php
c'est ce que fait l'appli de zpeters lorsqu'on fait un speedtest.exe -l

Et après ce qu'il reste a savoir c'est quelles sont les variables POST ou GET ou cookies à envoyer au serveur pour initier un test. je ne pense pas qu'on puisse le faire facilement avec inetget, par contre avec winhttprequest oui.

intégrer un exécutable qui fait le boulot dans mon code autoit ne m'interesse pas, ce n'est pas du tout ce que je cherche a faire. :wink:

Si Zpeters et sivel y arrivent, respectivement en GO et en Python, on devrait y arriver aussi en autoit.

Re: [..] Creation d'une GUI pour speedtest

Posté : lun. 24 août 2015 17:51
par walkson
Re,
Vous l'aviez vu https://www.autoitscript.com/forum/topi ... tinfo-udf/ ?
Je l'ai testé rapidement et j'ai eu un problème avec $My_Location = _NetInfo_GetIPLocation() qui n'est pas reconnu comme array. Le reste a fonctionné.
J'ai regardé aussi les scripts de Zpeters et sivel. Il semble qu'ils utilisent https://www.speedtest.net/speedtest-config.php et https://www.speedtest.net/speedtest-servers-static.php qui renvoie les adresses des serveurs.
Tous les serveurs semblent être configurés à l'identique comme ceci http://speedtest.oltv.ru/speedtest/
Voilà, si ça peut vous être utile...

Re: [..] Creation d'une GUI pour speedtest

Posté : lun. 24 août 2015 22:38
par jguinch
Oui, il suffit de prendre le code source et jeter un oeil :wink:
Il y a un intéressant sur Speedtest : https://support.speedtest.net/hc/en-us/ ... alculated-

@cetipabo : j'aimerais bien connaître la finalité de ton script... Il est censé remplacer les outils existants ?
Si c'est juste pour un test approximatif, c'est plutôt simple. Si tu peux faire un truc assez chiadé, ça va être un poil plus compliqué.

D'après ce que j'ai vu, le script Zpeters passe par les étapes suivantes :
- téléchargement de la liste des serveurs
- calcul du serveur le plus proche (par coordonnées géographiques)
- calcul du serveur le plus rapide
- envoi des requêtes GET pour téléchargement d'un fichier .jpg aléatoire puis calcul du temps de réponse
- calcul du temps de réponse moyen en download à partir des temps de réponse précédents
- envoi des requêtes POST pour upload via le formulaire (je n'ai pas compris ce qui est envoyé :? )
- calcul du temps de réponse moyen en upload à partir des temps de réponse précédents

Re: [..] Creation d'une GUI pour speedtest

Posté : lun. 24 août 2015 22:42
par Utilisateur 3309 supprimé
ha!!! merci beaucoup ! c'est exactement ce que je voulais, donc quelqu'un a déjà fait ce que je voulais faire :lol: :lol:

Re: [..] Creation d'une GUI pour speedtest

Posté : mar. 25 août 2015 08:38
par Utilisateur 3309 supprimé
@Jguinch
le but c'est juste de faire le test speedtest tel qu'on le ferait si on allait sur leur site, mais sans y aller :lol: donc conserver leur méthode de calcul pour que les résultats soient cohérents.
c'est aussi pour m'exercer à l'utilisation de winhttprequest que vous m'avez fait découvrir dans l'utilitaire LiveBoxinfo. :wink:

Re: [..] Creation d'une GUI pour speedtest

Posté : mar. 25 août 2015 12:48
par mikell
Tu pourrais jeter un coup d'oeil à la version 'light' de speedtest.net http://speedtest.api-digital.com/
Même moteur, mêmes serveurs, même protocole, mais avec Firebug on y voit beaucoup mieux :mrgreen:

Re: [..] Creation d'une GUI pour speedtest

Posté : mar. 25 août 2015 17:36
par Utilisateur 3309 supprimé
merci mikell !
encore mieux !! :wink:

Re: [..] Creation d'une GUI pour speedtest

Posté : mar. 25 août 2015 22:15
par mikell
Juste pour le concept j'ai bricolé ça pour voir
► Afficher le texte
c'est simplissime, le script prend le plus performant parmi les serveurs speedtest français et fait un upload et un download
Les valeurs obtenues sont un peu inférieures à celles de speedtest mais j'imagine que leurs machines n'ont rien à voir avec les notres (et sont dédiées) :mrgreen:

Re: [..] Creation d'une GUI pour speedtest

Posté : mer. 26 août 2015 00:03
par jguinch
Sympa ton script mikell :wink:
J'ai trouvé que ta regex mettait du temps à s'exécuter, j'ai pas compris pourquoi...

Ci-dessous un code qui permet la géo-localisation en fonction de l'adresse IP publique (en se basant sur ip-api.com), afin de déterminer quel est le serveur le plus proche. Je ne sais pas s'il y a un intérêt, mais c'est quelque chose qui est effectué sur SpeedTest.
► Afficher le texte

Re: [..] Creation d'une GUI pour speedtest

Posté : mer. 26 août 2015 00:33
par mikell
Pour le regex c'est vrai que c'est un peu long... c'est peut-être que le fichier fait 940 Ko et contient 3857 serveurs ?
Sinon je n'ai pas fait la géo-localisation parce que de toute façon speedtest teste ensuite le ping sur les serveurs les plus proches, donc je suis allé au plus court :roll:
En fait j'ai essayé de faire le plus rapide possible. Le script avec l'exe de cetipabo, chez moi il met environ 4 minutes à s'exécuter... j'imagine que si un utilisateur fait du speedtest sans arrêt c'est que c'est un obsédé de la vitesse, et là 4 minutes ça va vite le faire ch*er :mrgreen:

Re: [..] Creation d'une GUI pour speedtest

Posté : mer. 26 août 2015 07:23
par jguinch
Ce que je voulais dire, c'est que ta regex est anormalement longue (j'avais mis un timer pour voir combien de temps ça met). Je l'ai testé sur regex101 et j'ai l'erreur Catastrophic backtracking. Je sais pas pourquoi...
https://regex101.com/r/tZ7zG8/1

Re: [..] Creation d'une GUI pour speedtest

Posté : mer. 26 août 2015 09:52
par mikell
Je crois que j'ai compris, c'est une histoire de backtracking

Code : Tout sélectionner

$a = StringRegExp($txt, '(?><server url="([^"]+))(?>.*?name="([^"]+))(?>.*?cc="FR" sponsor="([^"]+))', 3)
 

Re: [..] Creation d'une GUI pour speedtest

Posté : mer. 26 août 2015 09:54
par jchd
C'est bien de l'avoir enregistré car je n'utilise pas de LB.
Un simple U dans les options cicatrise l'hémorragie. Après je ne sais pas si le résultat est celui attendu, mais c'est l'idée et là je n'ai pas le temps de creuser plus.

Re: [..] Creation d'une GUI pour speedtest

Posté : mer. 26 août 2015 10:21
par mikell
Je ne comprends pas l'utilisation de (?U) dans ce cas vu que les seuls quantifiers greedy dans l'expression initiale étaient sur des classes, donc restrictifs
C'est confirmé par regex101 (même si les groupes atomiques font encore 1/3 d'étapes en moins) en revanche dans le script le résultat est inattendu :mrgreen: