MiBiciPublica (monitorizador de bicicletas públicas)

y programas personales para otros como tu, puede que te corrijan ;)
barjola
Mensajes: 16
Registrado: 13 Ago 2008, 18:53

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por barjola »

Hola acabo de leer tus 2 post ahora mismo, que antes no he podido, y el error me lo daba sin modificar nada, es decir con tu codigo fuente, por eso decia que si me podiais ayudar con el error porque nose porque es...

Si la de badajoz es onroll por eso queria modificar el programa, ya que solo era añadir esa variable...
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2085
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por BasicOs »

Hola, en el post anterior tienes el dato para hacer el cambio.

El ya lo hizo en el programa original no obstante comprueba que al arrancar el que salga Badajoz entre la lista de ciudades

en caso que no salga:

La información técnica es sencilla detrás de la linea que empieza por ONROLL (dentro del fichero de texto .AU3) Global $webServic_OnRoll= hay muchas ciudades, puedes añadir Badajoz o cualquiera añadiendo el texto siguiente:

España - Badajoz [badajoz.onroll.info]

poner el símbolo | como separador

Salu22
barjola
Mensajes: 16
Registrado: 13 Ago 2008, 18:53

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por barjola »

He estado probando con las marquesinas de badajoz y con este programa pero no funcionan...

http://badajoz.onroll.info/

por ejemplo la marquesina 218...
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por jamaro »

Hola barjola:

Acabo de probar con el programa y he puesto todas las estaciones de Badajoz (en la configuración y seleccionando todas las estaciones de la lista de la izquierda y pasándolas a la lista de la derecha) y me da los resultados de todas ellas, incluida la 218.

¿Puedes especificar el error concreto, cuándo te ocurre y cómo puedo reproducirlo?

Un saludo
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2085
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por BasicOs »

@barjola, puede que no sea el mismo fichero fuente au3 el tuyo que el de jamaro?
Salu22)
barjola
Mensajes: 16
Registrado: 13 Ago 2008, 18:53

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por barjola »

Pues es problema de los ordenadores...

En mi casa no me deja compilar, y creo que es porque uso Win7 de 64bits... y en el trabajo lo probe pero no funcionaba por el proxy creo...

Acabo de probar el programa en mi casa y funciona perfectamente, pero no soy capaz de compilarlo... gracias por el programa!!
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2085
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por BasicOs »

Si instalaste el Autoit normal, solo tienes que ir al fichero fuente .au3, botón dcho, y compilar y te crea el mismo con exe.

Si estas en el Scite, en el menu tools tambien te lo permite,
Hay más maneras pero la del ratón dcho es la más cómoda (COMPILE WITH OPTIONS es para poner el icono y algunas cosas mas)
Salu22:=)
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por jamaro »

Hemos dado otro pasito más gracias a la información de foros y ayuda de foreros.

Con el afán de "automatizar" el programa, tal y como se comenta unos mensajes más arriba, tenemos en esta página de JcDecaux una lista con las ciudades que soporta:

http://www.jcdecaux.com/en/Innovation-D ... yclocity-R

Hasta ahora en el programa se había introducido manualmente el listado (y sus URLs). Con la ayuda de los foros y este nuevo "trozo" de código podemos leer dicha página, las ciudades, sus enlaces y crear la URL de una estación en concreto.
La ventaja es que (si no cambian de sistema), el programa, cada vez que arranque, creará una lista con las ciudades que obtenga de la página oficial. Con ello, si se crea instala el sistema en alguna ciudad nueva y figura en la página oficial, el programa también la mostrará.

Este es el código que (tras realizar pruebas) tengo que incluir en el programa original.

Código: Seleccionar todo

#include <Array.au3>			; Para manejo de matrices

$URL_JcDecaux="http://www.jcdecaux.com/en/Innovation-Design/Cyclocity-R"

#cs
	En la página $URL_JcDecaux se puede localizar los nombres de las Ciudades y sus URL de enlace:
		Ciudad..:		target="_self">(.*?)</a>
		URL.....:		<td style="vertical-align:;">  <a href="(.*?)"

	- Algunas ciudades tienen varias palabras. JcDecaux utiliza para formar la URL con los datos sólo la primera palabra.
	- Los nombres de las ciudades utilizados en la URL con los datos están en minúsculas y sin acentos/tildes.
#ce

$sFile=InetRead($URL_JcDecaux)
	$sFile=BinaryToString($sFile,4)  ; 1=ANSI 4= UTF8
		;cw($sFile) ; Muestra el texto del archivo HTML
	Local $mCiudades=StringRegExp($sFile,'target="_self">(.*?)</a>',3)
;~ 		_ArrayDisplay($mCiudades)

	Dim $mCiudadesMod[UBound($mCiudades)]
		; Se modifica la ciudad para utilizarla en la URL de búsqueda de datos
		For $a=0 to UBound($mCiudades)-1	; Para cada ciudad
			$mCiudadesMod1=StringSplit($mCiudades[$a]," ")		; Hay ciudades con varias palabras y la URL se forma con la primera. Se parte la ciudad en las palabras que contenga (separadas por espacios)
			$mCiudadesMod[$a]=ConvCar($mCiudadesMod1[1]) 		; Convierte caracteres con acentos/tildes de la primera palabra de una ciudad
			$mCiudadesMod[$a]=StringLower($mCiudadesMod[$a])	; Convierte a minúsculas
			cw("La ciudad: " & $mCiudades[$a] & " se convierte a: " & $mCiudadesMod[$a])
		Next

	Local $mURLs=StringRegExp($sFile,'<td style="vertical-align:;">  <a href="(.*?)"',3)
;~ 		_ArrayDisplay($mURLs)

	Dim $mURL_Creada[UBound($mCiudades)]
		For $a=0 to UBound($mCiudades)-1
			$mURL_Creada[$a]=$mURLs[$a]&"service/stationdetails/"&$mCiudadesMod[$a]&"/NumEstacion"
		Next

	Local $mCiudadURL=UnirMatriz($mCiudades,$mURLs,$mCiudadesMod,$mURL_Creada)
		_ArrayDisplay($mCiudadURL)	; Muestra la matriz creada (con todas las columnas)
		_ArrayDisplay($mURL_Creada)	; Muestra la matriz creada para la URL de la ciudad/estación

Func ConvCar($sStr)
	; Obtenido de: http://www.autoitscript.com/forum/topic/115065-how-to-replace-scpecial-characters-in-a-string/
	; Modificado según: http://www.emesn.com/autoitforum/viewtopic.php?p=11821#p11820

	Local $aSearch = StringSplit("Š,Œ,Ž,š,œ,ž,Ÿ,¥,µ,À,Á,Â,Ã,Ä,Å,Æ,Ç,È,É,Ê,Ë,Ì,Í,Î,Ï,Ð,Ñ,Ò,Ó,Ô,Õ,Ö,Ø,Ù,Ú,Û,Ü,Ý,ß,à,á,â,ã,ä,å,æ,ç,è,é,ê,ë,ì,í,î,ï,ð,ñ,ò,ó,ô,õ,ö,ø,ù,ú,û,ü,ý,ÿ", ",", 2)
	Local $aReplace = StringSplit("S,O,Z,s,o,z,Y,Y,u,A,A,A,A,A,A,A,C,E,E,E,E,I,I,I,I,D,N,O,O,O,O,O,O,U,U,U,U,Y,s,a,a,a,a,a,a,a,c,e,e,e,e,i,i,i,i,o,n,o,o,o,o,o,o,u,u,u,u,y,y", ",", 2)

	; Sistema reemplazando todas las letras en la cadena
	For $i = 0 To Ubound($aSearch) -1
		$sStr = StringReplace($sStr, $aSearch[$i], $aReplace[$i],0,1)
	Next
	Return $sStr
EndFunc





; ----------------------------------------------------------------------------------------------------
; ----------------------------------------------------------------------------------------------------
; ----------------------------------------------------------------------------------------------------
; Funciones ya incluidas en MiBiciPublica.au3, pero que se ponen en este código para que funcione
; ----------------------------------------------------------------------------------------------------
; ----------------------------------------------------------------------------------------------------
; ----------------------------------------------------------------------------------------------------

Func UnirMatriz($m1, $m2=0, $m3=0,$m4=0,$m5=0,$m6=0,$m7=0,$m8=0)
	; Crea una matriz poniendo en cada columna las matrices que se vana a unir
	cw("Haciendo UnirMatriz $m: "& $m1 &"-"&$m2&"-"&$m3&"-"&$m4&"-"&$m5&"-"&$m6&"-"&$m7&"-"&$m8)
	cw("Haciendo UnirMatriz Ubound: "&UBound($m1)&"-"&UBound($m2)&"-"&UBound($m3)&"-"&UBound($m4)&"-"&UBound($m5)&"-"&UBound($m6)&"-"&UBound($m7)&"-"&UBound($m8))

	Local $re[UBound($m1)][8]
	For $i = 0 To UBound($m1) - 1
	;For $i = 0 To UBound($m1) - 2
					   $re[$i][0] = $m1[$i]
		if $m2<>0 then $re[$i][1] = $m2[$i]
		if $m3<>0 then $re[$i][2] = $m3[$i]
		if $m4<>0 then $re[$i][3] = $m4[$i]
		if $m5<>0 then $re[$i][4] = $m5[$i]
		if $m6<>0 then $re[$i][5] = $m6[$i]
		if $m7<>0 then $re[$i][6] = $m7[$i]
		if $m8<>0 then $re[$i][7] = $m8[$i]
			;cw("Aquí llega " & $i)
	Next
	Return $re
EndFunc ;==>UnirMatriz


func cw($mensaje,$Debugit=1,$linea=@ScriptLineNumber)	;Abreviatura de ConsoleWrite
	if $DebugIt=1 Then
		ConsoleWrite("-->Linea(" & StringFormat("%04d", $linea) & "):" & @TAB &$mensaje & @CRLF)
	Else
		ConsoleWrite($mensaje & @CRLF)
	EndIf
EndFunc
Con este código hemos creado una matriz con varias columnas:

Imagen


La última columna muestra la URL donde cambiando NumEstacion por el número de la estación que se desea comprobar, se muestra el archivo XML que posteriormente el programa utiliza para obtener las bicicletas y bornetas libres.

Como digo al principio, ¡otro paso más hacia la automatización!

Saludos
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por Ximorro »

¡¡GRANDE!!
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2085
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por BasicOs »

Ejemplo de una API Usable x AUTOIT
Vemos que consiste en las especificaciones para leer un fichero en internet con sus campos.

http://politica.elpais.com/politica/201 ... 01025.html

Salu22:)

PD Igualmente como lo anterior, la info puede ser abierto por los proveedores de servicios de bicis, ya q hablamos de un servicio publico que pagamos los contribuyentes
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por jamaro »

Interesante que se publiquen las APIs.
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Nuevo error de conexión

Mensaje por jamaro »

Buenos días:

El mismo usuario del programa que en su día me decía que le daba error el programa y por lo que introduje la comprobación de conexión haciendo PING a http://www.google.com, me comenta que, si bien en casa le funciona bien, en el trabajo le da el error (ahora controlado) diciendo que no tiene conexión a http://www.google.com (función SiHayInternet() del programa).
Sin embargo, dice que desde fuera sí puede conectar con http://www.google.com.

Le dije que comprobara si tenía conexión a estas páginas:

http://www.valenbisi.com/service/carto
http://www.valenbisi.com/service/statio ... valence/58

Y me contesta diciendo:

He probado las dos direcciones y con http://www.valenbisi.com/service/carto no tengo ningún problema, pero con http://www.valenbisi.com/service/statio ... valence/58 me sale el siguiente error:
No se puede mostrar la página XML
No se puede ver la entrada XML con la hoja de estilo . Corrija el error y haga clic en el botón Actualizar, o inténtelo de nuevo más tarde.

¿Sabéis qué puede ser y por dónde enfocar la solución?
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por Ximorro »

El error del XML no es porque no pueda acceder al archivo, más bien es porque el navegador se queja de que no tiene estilo para mostrarla.
A mí (Firefox 3.6) me sale un warning pero debajo lo muestra:
"Este fichero XML no parece tener ninguna información de estilo asociada. Se muestra debajo el árbol del documento."

Con IE8 se muestra sin problemas.

Para asegurarse de que es cosa de conexión en vez de que el navegador no lo sepa mostrar, yo descargaría el archivo, por ejemplo que haga:
InetGet("http://www.valenbisi.com/service/statio ... valence/58", "c:\archivo.xml")

Y que vea si en C: se le crea el archivo.xml con este contenido o similar (es lo que me ha salido a mí, naturalmente los números irán cambiando, pero la cosa es que le salga un xml con esta estructura y no un html de error):

Código: Seleccionar todo

<?xml version="1.0" encoding="utf-8"?>
<station>
  <available>4</available>
  <free>16</free>
  <total>20</total>
  <ticket>1</ticket>
</station>
Ya es raro lo de no conectar con Google.com, no creo que tenga restricciones en el trabajo para semejante url...
A ver si el problema es con la configuración de los DNS en la empresa, igual habrá que hacer los Ping con IPs directamente en vez de con el nombre de dominio...

Editado: Estoy pensando que por ejemplo con Windows7 la raíz de C: puede estar protegida contra escritura. En el InetGet que se asegure de guardar el archivo en un sitio donde tenga permisos de escritura.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por jamaro »

Veré que puedo hacer. Lo primero que he pensado, es enviarle una versión del programa sin la comprobación de conexión a www.google.com

Ya contaré.
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por Ximorro »

Que pruebe el inetget y así sabes al menos si está recuperando bien el xml.
Ya también debería probar el PING a mano, desde una ventana DOS, no sea que en la empresa esté internet muy capado y sólo vaya el puerto 80 para el http o cosas así.
Es raro pero igual se les ha ido la mano cortando y han anulado los PINGs externos...
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por jamaro »

Hola de nuevo:

Envié al usuario un exe que hacía la solicitud a la página con InetGet y guardaba lo recogido del xml en un txt y es todo correcto, con los resultados esperados.

Código: Seleccionar todo

; Comprobación de recuperación de datos XML
; Guarda un archivo txt con los datos XML devueltos de la estación indicada

$a=InputBox("Estación a comprobar","Introduzca el número de estacíón a comprobar",58)
InetGet("http://www.valenbisi.com/service/stationdetails/valence/"&$a, @scriptdir&"\_Estacion_"&$a&".txt")
¿Alguna idea? El error que da es el esperado con la función SiHayInternet("www.google.com") que pongo en este mensaje:

Código: Seleccionar todo

Func SiHayInternet($webParaPing,$linea_desde_donde_viene)
	; ====================================================================================================================
	; Función ............: SiHayInternet($webParaPing)	Comprobación de conexión a internet
    ; Comentarios ........:	Comprueba si hay conexión a internet, haciendo un PING en $webParaPing
    ; ====================================================================================================================
	Local $ping, $MsgBoxConexionInternet
	While 1
		$ping = Ping($webParaPing)
		;----- PROPUESTA DEL FORO AUTOIT.ES: COMPROBAR DOS O TRES VECES ANTES DE DAR ERROR
		;----- PROPUESTA DEL FORO AUTOIT.ES: DAR ERROR TAMBIÉN SI NO SE ENCUENTRA ACTIVA LA PÁGINA DE LAS BICICLETAS
		If $ping > 0 Then ; Si hay respuesta del PING
			ExitLoop
		Else ; Si no hay respuesta del PING
			$MsgBoxConexionInternet = MsgBox(53, "Error de Conexión a Internet (linea "&$linea_desde_donde_viene&")", "No se ha obtenido respuesta de "&$webParaPing & @CRLF & @CRLF & "Es probable que no haya conexión a internet o que la página "&$webParaPing&" esté fuera de servicio."& @CRLF & @CRLF & "Pulse REINTENTAR cuando tenga la conexión a internet activada, o CANCELAR para salir del programa.")
			Select
				Case $MsgBoxConexionInternet = 4 ;Reintentar
					ContinueLoop ; Continúa intentándolo
				Case $MsgBoxConexionInternet = 2 ;Cancelar
					Exit ; Sale del programa
			EndSelect
		EndIf
	WEnd
EndFunc   ;==>SiHayInternet
Como véis, tengo un comentario en el que en cierta ocasión se me propuso en este foro hacer varios intentos antes de dar error. No está implantado, pero dado que el MsgBox permite "reintentar" no creo que se necesario (al menos para eliminar el error que le da a este usuario en concreto).

Si tenéis alguna idea.... porque en principio pensaba que podía tener acceso el navegador y no el programa de autoit, pero al enviar el exe que sólo hace la petición no ha tenido ningún problema y se ha devuelto la página deseada.
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por Chefito »

Pues no se lo que le puede ocurrir. Puede estar fastidiandote un proxy??? :smt017 . Quien sabe.

Nos dices que el ping no lo hace bien. Si le quitas la comprobación de si hay internet funciona el script???
Intenta sacar por consola el número de error (@error) que te salta con el ping. Puede que te ayude a comprender que puede pasar en la red. Mira el ping en la ayuda.

Recuerda que con InetGet también puedes hacer tratamiento de errores sin necesidad de otra función.

Consejos: Acostúmbrate ha hacer funciones más genéricas. Intenta que te devuelvan cosas con el return para luego tratar el resultado fuera. Normalmente return 1 es cuando la función ha tenido éxito, y 0 o -1 cuando ha habido algún error. Si hay algún error, también acostúmbrate a devolverlos con seterror. Es una forma más correcta de programar.
Una vez que te devuelva el resultado, trata éste con un if then y msgbox.

Si ves que el ping no te va bien por algo (raro raro, pero bueno), puedes utilizar otros métodos para ver que tiene conexión. Por ejemplo, si la función _Inetgetsource te devuelve el código de la página, pues hay conexión. Hay muchísimas más formas.
He estado probando con apis de Internet, pero casi ninguna me ha ido bien, por lo menos en el w7. Esta que utiliza la librería inet si me ha ido bien:
http://www.autoitscript.com/forum/topic ... ntry671306
Créditos a Rajesh V R.

Ya nos contarás.

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por Ximorro »

Además en el programa usabas directamente el nombre del servidor, deberías probar directamente con la IP, por si es cosa de la resolución de nombres.
Tampoco estaría mal que el usuario probara el ping a mano desde una ventana DOS, con el nombre, igual que hace el programa, para si da error ver qué dice.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por jamaro »

Hola de nuevo:

La última versión que le dí a este usuario llamaba, en lugar de http://www.google.com a la IP 209.85.148.147 (de Google) y le sigue saliendo error, aunque esta vez, haciendo caso de vuestros comentarios, había añadido el número de error en el MsgBox que avisa de que no se puede conectar con la página.

El error es el 1, que según la ayuda de PING (en Autoit) es 1 = Host is offline.

Lo de probar el PING desde DOS, se lo comentaré, pero sin embargo, desde su navegador si tiene acceso a http://www.google.com y a las páginas de las estaciones (que devuelve un xml).

Chefito creo que en una versión anterior que le envié, no hacía la función SiHayInternet() y creo que también le daba error. Pero probaré de nuevo, ahora que ya hemos hecho otras pruebas. Le voy a preparar una versión sin la comprobación con SiHayInternet().

Por cierto en el título del MsgBox que muestra el error tengo @ScriptLineNumber, pero al estar compilado muestra -1 ¿alguna manera de que muestre la línea del código sin compilar?

Gracias....
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por jamaro »

Bueno, pues hay novedades. He preparado una versión del programa con un "casilla de verificación" en la pantalla principal para Activar/Desactivar la comprobación de conexión a internet y en la función SiHayInternet() se ejecuta la comprobación sólo si la casilla está marcada.

El usuario, con la casilla desactivada, puede ejecutar el programa sin problema, pero al activarla, le da el error de siempre.

De momento le he dejado la versión del programa con la casilla de verificación y que lo use sin esa comprobación de conexión a internet. Lo más que le puede pasar es que el programa se bloquee o rompa cuando quiera acceder a la página de donde lee los archivos y no tenga conexión.

Esta vez ha probado a hacer el PING desde MS-DOS y el resultado es "Tiempo de espera agotado para esta solicitud", así que tenemos que:

- El programa funciona bien (salvo si se ejecuta el PING a Google o su IP para probar la conexión con la función SiHayInternet())
- El usuario tiene acceso a http://www.google.com desde su navegador
- El usuario no obtiene respuesta satisfactoria con el PING desde MS-DOS

¿Conclusiones?

¡Saludos!
Responder