[R] Extraction d'un code source

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Amesamana
Niveau 5
Niveau 5
Messages : 108
Enregistré le : dim. 09 sept. 2012 16:37
Status : Hors ligne

[R] Extraction d'un code source

#1

Message par Amesamana »

Bonsoir,

Me voilà confronté à un soucis que je ne saisi pas !
Je fais une extraction d'un code source, le soucis est que je n'arrive pas à lire ce que je veux. De plus le résultat n'est même pas dans le code source :shock:
Fichier temp et cache nettoyé.
Je l'ai essayé avec d'autres codes source et pas de soucis, mais celui-ci !?

Ce que je veux extraire :
<strong>Version 11.9.900.117</strong>
Code source
Même soucis ici surement lié ?
► Afficher le texte
Par contre sur cette source pas de soucis !
► Afficher le texte
Je ne pige pas pourquoi !
Merci :)
Modifié en dernier par Amesamana le mer. 06 nov. 2013 15:56, modifié 1 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Extraction d'un code source

#2

Message par mikell »

<strong>Version 11.9.900.117</strong>
Tu veux extraire une info qui ne figure ni sur la page ni dans le source ?
Marrant
Essaye plutôt avec cette page

Code : Tout sélectionner

#include <Inet.au3>
Local $LIEN = "http://helpx.adobe.com/flash-player/kb/archived-flash-player-versions.html"
Local $1 = _INetGetSource($LIEN) ;=> Charge le code source
$res = StringRegExp($1, '(?s)<li>\(Released.*?fp_([^_]+)', 3)
Msgbox(0,"", $res[0])
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Amesamana
Niveau 5
Niveau 5
Messages : 108
Enregistré le : dim. 09 sept. 2012 16:37
Status : Hors ligne

Re: [..] Extraction d'un code source

#3

Message par Amesamana »

Bonjour,
Merci pour la réponse
Mickell a écrit : <strong>Version 11.9.900.117</strong>
Tu veux extraire une info qui ne figure ni sur la page ni dans le source ?
Marrant
Je ne comprend pas !
Sur la page l'info de la dernière version est bien présente.
Image

Sur le code source aussi :
Image

Je test ton code ce soir car je ne suis pas devant mon PC perso.
Je n'ai pas compris :
$res = StringRegExp($1, '(?s)<li>\(Released.*?fp_([^_]+)', 3)

Bonne journée :)
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Extraction d'un code source

#4

Message par jchd »

Vous êtes entrés dans un dialogue de sourds, bien malgré vous.
Je suppose que vous ne disposez pas de la même version d'OS.

Le web est devenu dynamique depuis un sacré bout de temps !

Voici un indice :

Code : Tout sélectionner

[spoiler=]#include <Inet.au3>

Local $LIEN = "http://get.adobe.com/fr/flashplayer/"

HttpSetUserAgent("")
Local $source = _INetGetSource($LIEN)
Local $version = StringRegExp($source, '(?i)"AUTO_ID_columnleft_p_version".*?version\s+([\d.]+)', 1)
Local $RESULT = "AutoIt - FlashPlayer - " & $version[0] & @CRLF
ConsoleWrite($RESULT)

HttpSetUserAgent("My own browser")
Local $source = _INetGetSource($LIEN)
Local $version = StringRegExp($source, '(?i)"AUTO_ID_columnleft_p_version".*?version\s+([\d.]+)', 1)
Local $RESULT = "AutoIt - FlashPlayer - " & $version[0] & @CRLF
ConsoleWrite($RESULT)

HttpSetUserAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0")
$source = _INetGetSource($LIEN)
$version = StringRegExp($source, '(?i)"AUTO_ID_columnleft_p_version".*?version\s+([\d.]+)', 1)
$RESULT = "FF 24 - FlashPlayer - " & $version[0] & @CRLF
ConsoleWrite($RESULT)

HttpSetUserAgent("Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)")
$source = _INetGetSource($LIEN)
$version = StringRegExp($source, '(?i)"AUTO_ID_columnleft_p_version".*?version\s+([\d.]+)', 1)
$RESULT = "IE 10 W7 - FlashPlayer - " & $version[0] & @CRLF
ConsoleWrite($RESULT)

HttpSetUserAgent("Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)")
$source = _INetGetSource($LIEN)
$version = StringRegExp($source, '(?i)"AUTO_ID_columnleft_p_version".*?version\s+([\d.]+)', 1)
$RESULT = "IE 7 Vista - FlashPlayer - " & $version[0] & @CRLF
ConsoleWrite($RESULT)

HttpSetUserAgent("Opera/9.20 (Windows NT 6.0; U; en)")
$source = _INetGetSource($LIEN)
$version = StringRegExp($source, '(?i)"AUTO_ID_columnleft_p_version".*?version\s+([\d.]+)', 1)
$RESULT = "Opera 9.2 Vista - FlashPlayer - " & $version[0] & @CRLF
ConsoleWrite($RESULT)
[/spoiler]
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Extraction d'un code source

#5

Message par mikell »

Ha ! évidemment :mrgreen:
Pas le même OS, et pas le même navigateur non plus
Avec mon XP et mon Firefox antique ("AUTO_ID_columnleft_p_version" ne figure même pas dans le source !) j'ai ça :
► Afficher le texte
Donc si mon code fonctionne sur d'autres OS à browser up-to-date on pourra dire qu'il est polyvalent ^^

Amesamana si mon code marche chez toi je te traduirai le regex, sinon ben faudra trouver aut'chose ...
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Amesamana
Niveau 5
Niveau 5
Messages : 108
Enregistré le : dim. 09 sept. 2012 16:37
Status : Hors ligne

Re: [..] Extraction d'un code source

#6

Message par Amesamana »

Bonsoir et merci pour vos réponses qui vont me faire mettre un joli R à ce sujet :wink:
La finalité fait que j'arrive à extraire
Quelques questions :mrgreen:
jchd a écrit :Vous êtes entrés dans un dialogue de sourds, bien malgré vous.
Je suppose que vous ne disposez pas de la même version d'OS.

Le web est devenu dynamique depuis un sacré bout de temps !
Ok je n'ai pas pensé à cette hypothèse, qui semble la plus logique
L'indice fonctionne parfaitement :)
Je ne saisie pas la fin de cette ligne : s+([\d.]+), pourrais-je être éclairé ?

Code : Tout sélectionner

Local $version = StringRegExp($source, '(?i)"AUTO_ID_columnleft_p_version".*?version\s+([\d.]+)', 1)
mickell a écrit :Donc si mon code fonctionne sur d'autres OS à browser up-to-date on pourra dire qu'il est polyvalent ^^

Amesamana si mon code marche chez toi je te traduirai le regex, sinon ben faudra trouver aut'chose ...
:D que du bonheur ça fonctionne nickel, je l'ai fait ainsi avec le premier lien.

Code : Tout sélectionner

Local $LIEN = "http://get.adobe.com/fr/flashplayer/"
Local $1 = _INetGetSource($LIEN) ;=> Charge le code source
$res = StringRegExp($1, '(?i)"AUTO_ID_columnleft_p_version"..*?version\s+([\d.]+)', 1)
Msgbox(0,"", $res[0])
Bon rien de glorieux j'ai juste repris mon lien de recherche et insérer le bout de code jchd que je ne saisie pas.
Je suis bien sur preneur des explications concernant

Code : Tout sélectionner

$res = StringRegExp($1, '(?s)<li>\(Released.*?fp_([^_]+)', 3)
Merci.
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Extraction d'un code source

#7

Message par jchd »

Code : Tout sélectionner

$res = StringRegExp($1, '(?i)"AUTO_ID_columnleft_p_version".*?version\s+([\d.]+)', 1)
Attention au copier/modifier/coller ! Tu as rajouté un . (..*? au lieu de .*?). Il se trouve qu'en l'occurence ça n'a aucune incidence mais dans le cas général, une modif intempestive peut ruiner une regexp.

Sinon :
.*? : la plus courte séquence de caractères qui permet à la suite du pattern de "matcher". Ici le ? est un inverseur de cupidité (greediness) car il suit une spécification de répétition.
\s+ : un ou plusieurs espacements
([\d.]+) : groupe de capture consistant en : un ou plusieurs chiffres ou points. Le point n'est pas un métacaractère dans un "character class".
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Extraction d'un code source

#8

Message par mikell »

Pour l'autre regex : sur la page "http://helpx.adobe.com/flash-player/kb/ ... sions.html" il y a une liste des releases, le code récupère la plus récente qui est la première de la liste

Code : Tout sélectionner

....<li>([color=#FF0000]Released[/color] 10/8/2013) <a target="_blank" href="http://download.macromedia.com/pub/flashplayer/installers/archive/[color=#FF0000]fp_[/color]11.9.900.117[color=#FF0000]_[/color]archive.zip">....

$res = StringRegExp($1, '(?s)[color=#FF0000]Released[/color].*?[color=#FF0000]fp_[/color]([^_]+)', 3)
Donc on cherche après le premier "Released" dans le code et on récupère ce qui figure entre "fp_" et l'underscore suivant
(?s) : "le point utilisé dans l'expression peut éventuellement représenter un espace horizontal ou vertical"
.*? : "tout et n'importe quoi jusqu'au repère suivant mentionné dans l'expression"
[^_]+ : "un ou plusieurs caractères consécutifs qui ne sont pas des underscores"
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Amesamana
Niveau 5
Niveau 5
Messages : 108
Enregistré le : dim. 09 sept. 2012 16:37
Status : Hors ligne

Re: [R] Extraction d'un code source

#9

Message par Amesamana »

Merci messieurs pour les explications :)
Répondre