Esto de Autoit es un vicio, y cuando uno está trabajando en una cosa, busca información, y acaba liándose con otra.

Después de estar trabajando en obtención de datos de las páginas web, leyendo este y otros foros, viendo el uso de StringRegExp (¡me sorprende su potencia!

¿Utilidad? Poca, salvo que me ha servido para practicar con Autoit y acceso a datos de webs, y bueno, que de un vistazo tengo esa información, sin necesidad de abrir el navegador.
Un saludo

Código: Seleccionar todo
#include <Array.au3>
#include <String.au3>
$httpdir="http://www.emesn.com/autoitforum/"
Global $sData = InetRead($httpdir)
Global $nBytesRead = @extended
Global $DatosLeidos=BinaryToString($sData,4) ; flag = 4, binary data is taken to be UTF8
;msgbox(0,"Aviso",$DatosLeidos)
Local $cadini="<dl>"
Local $cadfin="</dl>"
Local $DatosAutoit=BuscaCadena($datosleidos,$cadini,$cadfin)
;MsgBox(0,"Aviso",$DatosAutoit)
StringRegExpReplace($DatosAutoit,' style="color: #.*?;" class="username-coloured"',"") ; Elimina la parte que cambia los atributos del autor del mensaje
Local $DatosAutoitMens[35][3]
for $i=0 to 34
;Título del mensaje
Local $cadini='class="forumtitle">'
Local $cadfin="</a>"
$DatosAutoitMens[$i][0]=BuscaCadena($datosautoit,$cadini,$cadfin,$i+1)
; Autor del mensaje
;Local $cadini=StringRegExp($datosautoit,'./memberlist.php\?mode\=viewprofile\&u=.*?([[:alnum:]]+)">',3) ; Se ha puesto \ delante de los carácteres que deben estar tal cual (? = &)
Local $cadini=StringRegExp($DatosAutoit,'(?i)memberlist.php\?mode\=viewprofile\&u=.*?"\>([[:word:][:punct:]]+)</a\>',3) ;Word porque hay nombres con _ y punct porque hay nombres con .
;_ArrayDisplay($cadini)
;ConsoleWrite($cadini[$i]&@CRLF)
Local $cadfin="</a>"
$DatosAutoitMens[$i][1]=BuscaCadena($datosautoit,$cadini,$cadfin,$i+1)
;$DatosAutoitMens[$i][1]=stringright($DatosAutoitMens[$i][1],stringlen($DatosAutoitMens[$i][1])-StringInStr($DatosAutoitMens[$i][1],">",1))
$DatosAutoitMens[$i][1]=$cadini[$i]
; Fecha del mensaje
Local $cadini="</a>"
Local $cadfin="<br>"
$DatosAutoitMens[$i][2]=BuscaCadena($datosautoit,$cadini,$cadfin,3*($i+1)) ; 3 porque es la tercera vez que aparace en cada línea
$DatosAutoitMens[$i][2]=stringright($DatosAutoitMens[$i][2],stringlen($DatosAutoitMens[$i][2])-StringInStr($DatosAutoitMens[$i][2],"- ",1))
Next
_ArrayDisplay($DatosAutoitMens,"DatosAutoitMens")
Func BuscaCadena($datos,$cadini,$cadfin,$vez=1)
; Busca la cadena <strong id="price">
Local $datosleidos=$datos
Local $cadenabuscada1=$cadini
Local $cadenabuscada2=$cadfin
local $poscadenainicio=StringInStr($DatosLeidos,$cadenabuscada1,0,$vez)
local $poscadenafin=StringInStr($DatosLeidos,$cadenabuscada2,0,1,$poscadenainicio)
Local $cadenaleida=stringmid($DatosLeidos,$poscadenainicio+stringlen($cadenabuscada1),$poscadenafin-stringlen($cadenabuscada1)-$poscadenainicio)
Return EliminaRepetidos($cadenaleida," ")
EndFunc
func EliminaRepetidos($cadena,$caracter)
; While StringInStr($cadena, $caracter&$caracter) ;mientras encuentre repetidos
While StringInStr($cadena, $caracter) ;mientras encuentre
ConsoleWrite("x")
;$cadena= stringreplace($cadena, $caracter&$caracter, $caracter) ;reemplaza dos caracteres por un caracter
$cadena= stringreplace($cadena, $caracter,"") ;reemplaza un caracter por nada
WEnd
;msgbox(0,"Aviso","*"& $cadena &"*")
return $cadena
EndFunc