Page 1 sur 1

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

Posté : dim. 22 janv. 2017 14:49
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é :)

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

Posté : dim. 22 janv. 2017 16:53
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

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

Posté : dim. 22 janv. 2017 17:09
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?

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

Posté : dim. 22 janv. 2017 17:20
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)

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

Posté : dim. 22 janv. 2017 17:47
par Syntronis
Un Grand Merci à toi! Tout fonctionne parfaitement! :)
Franchement, chapeau bas :shock:

Le projet est sauvé pour la troisième fois hihihi

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

Posté : dim. 22 janv. 2017 17:57
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.

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

Posté : dim. 22 janv. 2017 20:41
par Syntronis
J'ai actualisé le fichier. Encore un grand merci pour ton support Orax :D