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! ) y algunos ejemplo de su uso, me hice este "Cotilleador", que lo que hace es, simplemente, mostrar los últimos mensajes que se lista en la parte inferior de la página principal de este foro (http://www.emesn.com/autoitforum/index.php), justo bajo el título "ÚLTIMAS NOVEDADES POR POSTS"
¿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