[R] Récupérer info d'internet et stocker dans fichier.txt

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Syntron
Niveau 1
Niveau 1
Messages : 11
Enregistré le : ven. 18 févr. 2011 06:54
Status : Hors ligne

[R] Récupérer info d'internet et stocker dans fichier.txt

#1

Message par Syntron »

Bonjour.

Je suis dans un projet servant à créer un diagramme de magnitudes de tremblements de terre maximums atteints dans la journée. Le programme final sera Retranscrit sur internet dans une sorte d'application flash mais plus précisément, c'est une application "Unity 3D". La partie concernant Auto-it c'est que les données qui m'intéressent pour créer le diagramme sont stockées dans un tableau d'un site web qui est actualisé tous les jours, et Unity-3D ne me permet pas d'accéder à une information précise contenue dans une page internet. J'ai la prétention de croire qu'Auto-it est capable de le faire... :D et même qu'il est capable de stocker ces informations dans un fichier Texte que mon cher "Unity 3D" pourra lire et retranscrire en variables qu'il traduira par des cubes 3D qui auront la taille de la magnitude contenue dans la variable.

Voici une image de la donnée qui m'intéresse dans le site en question:
Image
Vous voyez à droite, la magnitude, c'est cette donnée que j'aimerais stocker, toutes les cinq données affichées. Je précise que ce tableau n'est pas tout en haut de la page et qu'il va falloir donner au script une indication lui permettant de savoir quel tableau et quelle information nous intéresse.

Une fois les cinq magnitudes enregistrées, j'aimerais qu'Auto-it génère cinq fichiers textes (magnitude1.txt, magnitude2.txt etc..) et chaque fichier contiendra simplement la valeur de magnitude enregistrée. Dans notre exemple ça donnera : 2.5 pour le premier fichier, 2.3 pour le second etc...

Voici ce que ça donnera une fois qu'Unity 3D aura pu lire et interpréter ces données qu'il traduira en variables: (c'est une esquisse, à la fin ça sera plus shadé que de simples boites hahaha!)
Image
Voilà le travail qui m'attend... évidemment je pense retrouver facilement les fonctions Auto-it me permettant de générer les fichiers textes, mais là où je me sens en rade, c'est comment envoyer mon script à stocker les informations qui m'intéressent, car elles sont à un endroit bien spécifique de la page et dans un tableau. Heureusement, un élément qui pourrait l'aider c'est qu'au dessus de la colonne qui nous intéresse se trouve l'intitulé "Magnitude"... Enfin, c'est une piste mais franchement, je n'ai aucune idée de la manière de procéder. :cry:

Est ce que quelqu'un pourrait me donner une indication avec quelques lignes de script pour illustrer ses explications?
Modifié en dernier par Syntron le ven. 11 mars 2011 05:27, modifié 4 fois.
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: Récupérer info dans internet et stocker dans fichier .tx

#2

Message par zeshrek »

Merci de respecter les
Regles de Présentation d'un message.
Profites en pour redimensionner tes images (au moins la seconde)...
Des sites comme Imageshack permettent de n'afficher qu'une vignette sur le forum...



Sinon, si le site pu tu veux récupérer les infos est public, peux tu nous donner l'url de la page en question ? Dans le cas ou le site n'est pas public, pourrais tu nous joindre la page ?
C'est fou comme on peut se repérer facilement dans une page web quand on en a le source, et pas que l'affichage.
Si vis pacem para bellum
Avatar du membre
Syntron
Niveau 1
Niveau 1
Messages : 11
Enregistré le : ven. 18 févr. 2011 06:54
Status : Hors ligne

Re: Récupérer info dans internet et stocker dans fichier .tx

#3

Message par Syntron »

Mea culpa pour la présentation... le ferais plus. :oops: (je n'arrive pas à mettre [..] en titre, même en copiant collant, la croche fermante ne veut pas apparaitre, et si je mets les deux croches avant les points je ne peux mettre qu'un point, le deuxième ne veut pas s'écrire... bizarre)

Voici un lien vers le site en question : http://hisz.rsoe.hu/alertmap/index2.php#
Pour le copyright, je suis tout à fait au courant des règles à respecter et il va de soi que mon programme ne sera pas diffusé sur internet sans l'autorisation du webmaster de ce site pour les informations qui seront prises dessus. (je travaille pour une petite entreprise et nous tenons à rester réglo!)
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Récupérer info d'internet et stocker dans fichier.t

#4

Message par zeshrek »

bon, bin, j'ai déjà bien avancé sur le sujet... je edvrais arriver a te poster un truc d'ici midi
Si vis pacem para bellum
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Récupérer info d'internet et stocker dans fichier.t

#5

Message par GaRydelaMer »

Bonjour

[ModoON]
J'ai modifié le titre de ton Post, tu y arrivais pas car la longueur du titre est limité en nombre de caractères.
[/ModoOFF]

Alors j'ai regarder le site. Tu vas pouvoir y retrouvé les information mais ca va pas être trivial, le site est construit uniquement avec des <table> les unes imbriquées dans les autres.

JE vois le truc comme ca:

Code : Tout sélectionner

    Local $oIE = _IECreate()
    _IENavigate ($oIE, "http://hisz.rsoe.hu/alertmap/index2.php")
    ;Local $oTable = _IETableGetCollection ($oIE)
    ;Local $nbTable = @extended, $aTableData
    ;For $i = 0 To $nbTable
        ;$oTable = _IETableGetCollection ($oIE, $i)
        ;$aTableData = _IETableWriteToArray ($oTable)
        ;_ArrayDisplay($aTableData)
    ;Next

    ; Donc c'est la table N° 10, Pour te montrer la recherche et l'affichage des 5 premières valeurs
    Local $oTable = _IETableGetCollection ($oIE, 10)
    Local $aTableData = _IETableWriteToArray ($oTable)
    For $i = 2 To 6; Ici 2 + 5 - 1 comme tu le souhaites
        ConsoleWrite("!>Date/Time: " & $aTableData[0][$i])
        ConsoleWrite(@TAB & "Magnétude: " & $aTableData[1][$i] & @LF)
    Next
 
La 1ere partie du code en commentaire c'est pour trouver la table que tu cherches, je l'ai laissé pour tes prochaine interrogation.
Pour créer les fichiers dans la boucle For, remplace les ConsoleWrite par:

Code : Tout sélectionner

Local $hFile
For $i = 2 To 6; Ici 2 + 5 - 1 comme tu le souhaites
    $hFile = FileOpen(@ScriptDir & "\magnitude" & $aTableData[1][$i] & ".txt", 10)
    FileWriteLine($hFile, "Date/Time: " & $aTableData[0][$i])
    FileWriteLine($hFile, "Magnitude: " & $aTableData[1][$i])
    FileClose($hFile)
Next
 
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Récupérer info d'internet et stocker dans fichier.t

#6

Message par zeshrek »

Justement, les 'table' imbriquées, c'est quasiment ce qui est le plus simple a parser !
La preuve :
► Afficher le texte
par contre je viens de zieuter ton exemple... c'est pas mal aussi :-D
en même temps tu triches, tu utilises des fonctions déjà toutes pretes, alors que comme un boulet, j'ai tout parsé a la mimine...
Si vis pacem para bellum
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Récupérer info d'internet et stocker dans fichier.t

#7

Message par GaRydelaMer »

Je triche pas !!!

Moi j'aime pas réinventer la roue à chaque fois que je code un truc :p

Tien mieux une fonction avec Recherche de la bonne table:

Code : Tout sélectionner

#include <IE.au3> 
#include <Math.au3>

;; Je créer les variables mais elles sont déjà en valeur par défaut de la fonction
Local $URL = "http://hisz.rsoe.hu/alertmap/index2.php", $Header = "Earthquake(s)"
Magnitude_Write2Files(10, @ScriptDir, "magitude%s.txt", $URL, $Header)

Func Magnitude_Write2Files($NbValues = 5, $Path = @ScriptDir, $Name = "magitude%s.txt", _
        $URL = "http://hisz.rsoe.hu/alertmap/index2.php", $Header = "Earthquake(s)")
    Local $oIE = _IECreate($URL)
    Local $oTable = _IETableGetCollection($oIE)
    Local $nbTable = @extended
    Local $aTableData, $Find = False
    For $i = 0 To $nbTable - 1
        $oTable = _IETableGetCollection($oIE, $i)
        $aTableData = _IETableWriteToArray($oTable)
        If StringStripWS($aTableData[0][0], 7) = $Header Then
            $Find = True
            ExitLoop
        EndIf
    Next
    If $Find Then
        Local $hFile, $FileName, $iStart = 2
        Local $iEnd = $iStart + $NbValues - 1
        If $iEnd > UBound($aTableData, 2) Then $iEnd = _Min($iEnd, UBound($aTableData, 2) - 1)
        For $i = $iStart To $iEnd
            $FileName = StringFormat($Name, $aTableData[1][$i])
            $hFile = FileOpen($Path & "\" & $FileName, 10)
            FileWriteLine($hFile, "Date/Time: " & $aTableData[0][$i])
            FileWriteLine($hFile, "Magnitude: " & $aTableData[1][$i])
            FileClose($hFile)
        Next
    Else
        MsgBox(1 + 16, "Erreur", "J'ai pas trouvé la tables des valeurs sur le site !!!")
    EndIf
EndFunc   ;==>Magnitude_Write2Files
 
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Récupérer info d'internet et stocker dans fichier.t

#8

Message par zeshrek »

Meuh si tu triche ! La preuve, tu utilise des fonctions toutes faites qui marchent tres bien, alors que moi je fais le tacheron a pondre un truc qui rame comme une vache ! :P

Bon, note pour plus tard : me familiariser avec les fonctions _IE... :roll:
Si vis pacem para bellum
Avatar du membre
Syntron
Niveau 1
Niveau 1
Messages : 11
Enregistré le : ven. 18 févr. 2011 06:54
Status : Hors ligne

Re: [R] Récupérer info d'internet et stocker dans fichier.tx

#9

Message par Syntron »

Alors là.... :shock: Chapeau!!!

Ca fonctionne exactement comme je l'espérais!!! Comme je suis nouveau je ne m'attendais pas à avoir une réponse toute prête à l'usage (je suis habitué à des forums où il faut beaauuuccoup de patience :mrgreen: )

Je vais donc étudier méticuleusement vos précieux scripts et il ne me reste plus qu'à finir ce que j'ai commencé sur Unity 3D (la partie facile pour moi lol)

Merci beaucoup pour vos réponses rapides et précises!
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Récupérer info d'internet et stocker dans fichier.t

#10

Message par GaRydelaMer »

J'ai modifié le script

Transformé en fonction pour un usage plus simple dans le reste de ton code.
Avatar du membre
Syntron
Niveau 1
Niveau 1
Messages : 11
Enregistré le : ven. 18 févr. 2011 06:54
Status : Hors ligne

Re: [..] Récupérer info d'internet et stocker dans fichier.t

#11

Message par Syntron »

Oui justement je vais bien étudier ça, parce que j'ai tout à apprendre et il vaudrait mieux que je comprenne bien de quoi retourne le script "pivot de mon projet" :)
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Récupérer info d'internet et stocker dans fichier.t

#12

Message par zeshrek »

Si tout est ok pour toi, il ne te reste plus qu'a mettre un R a la place des deux points dans le titre entre les crochets
Si vis pacem para bellum
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Récupérer info d'internet et stocker dans fichier.tx

#13

Message par Tlem »

Syntron a écrit :Comme je suis nouveau je ne m'attendais pas à avoir une réponse toute prête à l'usage (je suis habitué à des forums où il faut beaauuuccoup de patience
Lorsqu'une question est posée correctement (pas besoin de réfléchir deux heures pour comprendre), lorsque tout les éléments sont donnés et lorsque les gens compétents sont disponibles pour répondre, alors oui la réponse est souvent rapide. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [R] Récupérer info d'internet et stocker dans fichier.tx

#14

Message par bloodwolff »

En un peu plus rapide

Code : Tout sélectionner

$source = BinaryToString(InetRead("http://hisz.rsoe.hu/alertmap/index2.php#"))
$magnitude = StringRegExp($source, "text-align:center;font-weight:bold;'>([[:digit:].]+)</td><td>", 3)
For $i=0 to UBound($magnitude)-1
    FileWrite("Magnitude" & $i+1 & ".txt", $magnitude[$i])
Next
Compte skype : bloodwolfff
Avatar du membre
Syntron
Niveau 1
Niveau 1
Messages : 11
Enregistré le : ven. 18 févr. 2011 06:54
Status : Hors ligne

Re: [R] Récupérer info d'internet et stocker dans fichier.tx

#15

Message par Syntron »

Je rebondis sur ton script bloodwolf, car j'aimerais beaucoup avoir quelques précisions.

J'ai essayé ce script et les fichiers textes se créent immédiatement, visiblement aucun processus internet explorer n'est lancé, ça a l'air de se faire très discrètement et rapidement, c'est super, et ça tient en 5 lignes O___O

Je suis obligé de me re-pencher sur la question car le projet a évolué depuis, et je dois récupérer des informations sur plusieurs sites pour avoir au final un chiffre global donnant une moyenne (un peu comme le projet initial mais plusieurs sites sont visités par le script).

Tous vos scripts sans exception fonctionnent très bien et j'ai essayé de les analyser pour les retranscrire au besoin comme un grand, mais visiblement je suis encore trop petit lol !!! Je crois que l'information qui me manque, c'est : quelle source utilisez-vous pour savoir où le script va chercher les information entre les balises de tableaux? est ce que vous arrivez à trouver ces infos simplement en visitant le code source de la page? J'ai regardé le code source et surtout dans le script de bloodwolf, je n'arrive toujours pas à comprendre comment avec l'information :

Code : Tout sélectionner

text-align:center;font-weight:bold;'>([[:digit:].]+)</td><td>
le script va savoir exactement où chercher.... car lorsque j'affiche le code source de la page et que je tape ce paramètre en recherche, il ne trouve rien. Donc je suppose que vous passez par un outil permettant d'avoir le code source de la page prenant en compte les résultats et affichages + textes à l'actualité de l'instant... est ce que je suis sur la voie? Peut-on m'en dire plus?

J'ai changé la ligne :

Code : Tout sélectionner

For $i=0 to UBound($magnitude)-1
en :

Code : Tout sélectionner

For $i=0 to 4
pour n'avoir que 5 résultats (comme je récupère les chiffres et les transforme en variables dans le programme unity 3d, je dois me limiter au nombre de résultats. Donc voilà en gros le seul détail que je suis capable de changer. Reste plus qu'à comprendre comment je peux moi-même connaitre les lignes html à chercher pour les indiquer à autoit, comme vous avez tous su le faire, sauf moi lol.

voilà donc pour ma question, désolé de re-soulever le sujet qui était mis en résolu. Modos n'hésitez pas à me le dire si ça pose problème, je créerais un nouveau sujet.

Si ça peut vous servir, voici d'autres sites que je dois envoyer autoit visiter, on ne va pas tous les retenir et d'autres remplaceront surement certains que je donne ici, car c'est encore en analyse, mais ça vous donne une idée du genre de script que je vais devoir créer et l'à peu près de son contenu.

http://www.spaceweather.com/ (ici on cherche le tableau "Recent & Upcoming Earth-asteroid encounters" et les 5 premiers paramètres "Miss Distance (sans "LD")" et "Size (sans "m" ou "km")")

http://www.tesis.lebedev.ru/en/sun_flares.html (ici, c'est le tableau "Solar flares today" et le paramètre "Flare of class". Ici je vais demander à autoit de multiplier par deux les classes "M" > moderate flares - et multiplier par 4 les classes "X" > large flares - avant de mettre le résultat dans le fichier texte)

http://hisz.rsoe.hu/alertmap/index2.php (et oui encore lui, je vais l'envoyer chercher le paramètre "VEI" des 5 premiers résultats du tableau "Supervolcanoes Monitoring System")

edit : je viens de me rendre compte que quand je relance le script de bloodwolf, la magnitude se rajoute à l'ancienne au lieu de l'effacer, y a-t-il moyen d'y remédier?
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [...] Récupérer info d'internet et stocker dans fichier.

#16

Message par bloodwolff »

InetRead ==> Sert à télécharger le code source de la page en binaire
BinaryToString ==> Comme le binaire ce n'est pas toujours pratique on le converti en chaine de caractère
StringRegExp ==> Dans ce cas il sert à récupérer tous les suites de chiffres et de points contenu entre text-align:center;font-weight:bold;'> et </td><td>, un trait qui apparait seulement dans le tableau qui nous intéressait.
For $i to ==> Une simple boucle ou $i s'incrémente de 1 à chaque fois et qui va de 0 à (Grandeur du tableau)-1
Filewrite ==> On écrit les données dans un document texte en utilisant notre variable $i pour faire varier le nom
Next ==> Fin de la boucle
Compte skype : bloodwolfff
Avatar du membre
Syntron
Niveau 1
Niveau 1
Messages : 11
Enregistré le : ven. 18 févr. 2011 06:54
Status : Hors ligne

Re: [..] Récupérer info d'internet et stocker dans fichier.t

#17

Message par Syntron »

Merci beaucoup pour ces précisions Bloodwolff!! Grâce à ça, je devrais être capable d'adapter le script pour qu'il aille chercher des infos sur d'autres sites du projet. J'ai aussi trouvé les lignes en question en affichant le code source, je m'y suis mal pris la fois d'avant. Donc encore merci, je pense avoir tous les éléments nécessaires pour voler de mes propres ailes si je puis dire :)
Répondre