[R] MAJ d'un vieux script ne fonctionnant plus

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Syntronis
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mer. 21 nov. 2012 19:10
Status : Hors ligne

[R] MAJ d'un vieux script ne fonctionnant plus

#1

Message par Syntronis »

Bonjour à toute la communauté.

Ma question du jour se base sur un vieux projet qui a pu voir le jour grâce à vous: viewtopic.php?f=3&t=6936&p=45678#p45678
Puis un jour, le script ne fonctionnait plus, et encore une fois, vous avez sauvé la mise: viewtopic.php?f=3&t=10665#p74055

En bref, ce script sert à récupérer des magnitudes de tremblements de terre sur ce site: http://hisz.rsoe.hu/alertmap/index2.php# qui seront stockées dans des fichiers texte.
De là, un programme fabriqué sur Unity3D va les lire et les représenter sous forme de diagrammes.

Pour un peu plus de détail, Auto-It liste tous les résultats de magnitudes, et il prend 5 résultats à la fois pour les stocker dans 5 fichiers textes. L'opération est renouvelée toutes les 5 minutes: les 5 fichiers sont supprimés et remplacés par 5 nouveaux contenant les 5 prochains résultats de magnitudes de la liste. Le script tourne ainsi en boucle et Unity3D met à jour ses diagrammes.

Le script fonctionnait bien pendant longtemps, mais le projet est ressorti et à présent, plus aucun fichier texte n'est créé. Je suppose que la structure du site analysé a changée depuis. Je demande donc humblement un coup de pouce car je nage complètement dans Auto-It.

Voici le script utilisé:

Code : Tout sélectionner

#Include <Array.au3>

$pas = 5
$wait = 10000*12      ;<< mettre 5 minutes

While 1
$source = BinaryToString(InetRead("http://hisz.rsoe.hu/alertmap/index2.php#"))
$magnitude = StringRegExp($source, "text-align:center;font-weight:bold;'>([[:digit:].]+)</td><td>", 3)
$nb = UBound($magnitude)

Dim $array[Ceiling($nb/$pas)][$pas]
For $i=0 to $nb-1
    $array[Floor($i/$pas)][Mod($i, $pas)] = $magnitude[$i]
Next
;_ArrayDisplay($array)  

$nb_lignes = UBound($array)
$nb_colonnes = UBound($array, 2)
Dim $array_temoin[$nb_lignes*$nb_colonnes]

For $i = 0 to $nb_lignes-1
    For $j = 0 to $nb_colonnes-1
        If $array[$i][$j] = "" Then $array[$i][$j] = "0.0"
        FileDelete("Magnitude" & $j+1 & ".txt")
        FileWrite("Magnitude" & $j+1 & ".txt", $array[$i][$j])
      $test = $i*$pas+$j
      $array_temoin[$test] = $array[$i][$j]
    Next
    ; msgbox(0,"", "série " & $i+1)  ; si activée, cette msgbox sert à mettre le script en pause, pour laisser le temps de vérifier à la main le contenu des fichiers créés si on veut faire cette vérification
    Sleep($wait)
Next
;_ArrayDisplay($array_temoin, "array_temoin")  
Wend
J'ai vérifié sur le site analysé, et le mot "magnitude" existe encore dans le code source (Il me semble me rappeler que c'est un mot clé recherché dans le script, et son bon fonctionnement en dépend), donc je ne sais pas où est le problème. Merci d'avance à toute bonne volonté :)
Modifié en dernier par Syntronis le dim. 22 janv. 2017 17:48, modifié 1 fois.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] MAJ d'un vieux script ne fonctionnant plus

#2

Message par orax »

J'ai vu que le site récupère les données depuis des fichiers au format JSON.
Le tableau Earthquake est créé depuis http://hisz.rsoe.hu/alertmap/database/mapData/eq.json
#include <Array.au3>
#include <StringConstants.au3>
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>

$pas = 5
$wait = 10000 * 12 ;<< mettre 5 minutes

While 1
   $source = BinaryToString(InetRead("http://hisz.rsoe.hu/alertmap/database/mapData/eq.json"))
   $magnitude = StringRegExp($source, '"magnitude"\s*:\s*"(\d+\.\d+)"', $STR_REGEXPARRAYGLOBALMATCH)
   $nb = UBound($magnitude)

   Dim $array[Ceiling($nb / $pas)][$pas]
   For $i = 0 To $nb - 1
      $array[Floor($i / $pas)][Mod($i, $pas)] = $magnitude[$i]
   Next
;~    _ArrayDisplay($array)

   $nb_lignes = UBound($array)
   $nb_colonnes = UBound($array, 2)
   Dim $array_temoin[$nb_lignes * $nb_colonnes]

   For $i = 0 To $nb_lignes - 1
      For $j = 0 To $nb_colonnes - 1
         If $array[$i][$j] = "" Then $array[$i][$j] = "0.0"
         $file = FileOpen("Magnitude" & $j + 1 & ".txt", $FO_OVERWRITE)
         If $file = -1 Then
            ConsoleWriteError("Erreur lors de l'ouverture de : Magnitude" & $j + 1 & ".txt" & @CRLF)
;~                 MsgBox($MB_ICONERROR, Default, "Erreur lors de l'ouverture de : Magnitude" & $j + 1 & ".txt")
         Else
            FileWrite($file, $array[$i][$j])
            FileClose($file)
         EndIf
         $test = $i * $pas + $j
         $array_temoin[$test] = $array[$i][$j]
      Next
      ; msgbox($MB_OK, "", "série " & $i+1)  ; si activée, cette msgbox sert à mettre le script en pause, pour laisser le temps de vérifier à la main le contenu des fichiers créés si on veut faire cette vérification
      Sleep($wait)
   Next
   ;_ArrayDisplay($array_temoin, "array_temoin")
WEnd
Modifié en dernier par orax le dim. 22 janv. 2017 17:27, modifié 1 fois.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Syntronis
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mer. 21 nov. 2012 19:10
Status : Hors ligne

Re: [..] MAJ d'un vieux script ne fonctionnant plus

#3

Message par Syntronis »

Ah oui en effet, les fichiers sont de nouveau créés. Merci Orax pour ta réponse rapide et efficace!

Un seul détail, les magnitudes devraient s'afficher sous forme de chiffre, suivi d'un point, suivi d'un autre chiffre, comme "2.6" par exemple. Ici, les résultats n'incluent pas le chiffre après le point: "2." par exemple. Une idée?
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] MAJ d'un vieux script ne fonctionnant plus

#4

Message par orax »

J'ai corrigé mon code.
J'avais mal lu le code d'origine, je croyais que c'était le résultat attendu. J'espère que ça marche maintenant.


$wait = 10000 * 12 ;<< mettre 5 minutes ça fait seulement 120 000 millisecondes (2 minutes)
$wait = 1000 * 60 * 5 ;<< mettre 5 minutes = 300 000 millisecondes (5 minutes)
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Syntronis
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mer. 21 nov. 2012 19:10
Status : Hors ligne

Re: [R] MAJ d'un vieux script ne fonctionnant plus

#5

Message par Syntronis »

Un Grand Merci à toi! Tout fonctionne parfaitement! :)
Franchement, chapeau bas :shock:

Le projet est sauvé pour la troisième fois hihihi
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [R] MAJ d'un vieux script ne fonctionnant plus

#6

Message par orax »

Je viens de changer certaines choses. J'ai notamment ajouté l'affichage d'un message d'erreur si le script n'arrive pas à ouvrir un fichier. On peut aussi décommenter la ligne MsgBox(...), mais si la MsgBox s'affiche, elle bloque le script.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Syntronis
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mer. 21 nov. 2012 19:10
Status : Hors ligne

Re: [R] MAJ d'un vieux script ne fonctionnant plus

#7

Message par Syntronis »

J'ai actualisé le fichier. Encore un grand merci pour ton support Orax :D
Répondre