MiBiciPublica (monitorizador de bicicletas públicas)

y programas personales para otros como tu, puede que te corrijan ;)
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por jamaro »

(EDITADO: Enlace a la última versión al final del mensaje)

EL PROGRAMA
MiBiciPublica, que un primer momento se llamó MiValenbisi, es una aplicación para Windows que permite monitorizar los datos de bicicletas y bornetas libres de las estaciones de bicicletas públicas de varias ciudades.
El programa lee los datos que se encuentra publicados en las páginas web de los distintos sistemas de servicio de bicicletas públicas, y a los que se puede acceder libremente.

Actualmente (04/05/2011) la aplicación está preparada para los siguientes sistemas:
- JcDecaux
- BiciCard, del ITCL(Instituto Tecnológico de Castilla y León)
- Clear Channel (De momento sólo Barcelona, se está estudiando Zaragoza)
- OnRoll de DomoBlue
- BarclaysCycleHire (Londres)
- OYBike (Cardiff y Reading)
- Alabici (Alicante)

No obstante, los nombres de las ciudades están introducidas manualmente en el programa, ya que, de momento, no conozco ningún sitio web donde esté publicado un listado completo de las ciudades de cada sistema (sólo he encontrado un lista de JcDecaux en http://www.jcdecaux.com/fr/Innovation-D ... yclocity-R)


¿Por qué utilizar este programa?
En todas las páginas oficiales del servicio de bicicletas públicas de cada una de las ciudades, se muestra la totalidad de las estaciones (o marquesinas).
En muchas ocasiones, al usuario sólo le interesa conocer los datos de algunas de esas estaciones (las más cercanas a su domicilio, lugar de trabajo,...).
El programa MiBiciPublica, creado con Autoit, está pensado para ejecutarlo en un PC/Portátil con Windows. El usuario puede indicar, mediante una búsqueda de texto, las estaciones que desea monitorizar, y así obtener los datos únicamente de esas estaciones, sin necesidad de ver el resto, ni de abrir el navegador, ni ninguna página web, simplemente ejecutar la aplicación.

Archivos necesarios
Para un uso normal, son necesarios el archivo .exe y la carpeta de iconos (con sus archivos .ico). Tras la primera utilización se creará un archivo .ini que guardará la configuración y datos de estaciones de usuario.
En el archivo ZIP adjunto se incluye también el código de Autoit (archivo .au3)

Pruebas y errores
Espero que os sea de utilidad, como usuarios de bicicletas públicas, o como usuarios de Autoit. El programa, hasta el momento, ha sido utilizado por pocos usuarios, pero las pruebas "reales" de la última versión, sólo por mí, así que, por supuesto, cualquier sugerencia de mejora será bienvenida, así como reportar cualquier fallo o error, ... (la dirección de correo está en la barra de estado del programa)

En estudio:
Siguiendo las sugerencias de BasicOS, para darle utilidad a los usuarios con teléfonos móviles y conexión a internet, se está estudiando la posibilidad de que el programa (ejecutado en un PC de sobremesa) haga una lectura de estaciones periódica y envíe un mensaje de correo electrónico definido por el usuario cuando algunas de las estaciones tenga menos de un número mínimo de bicicletas y vuelva a avisar cuando se vuelva a tener dicho mínimo)

Capturas del programa

Imagen
Imagen
Imagen


Ciudades soportadas

Código: Seleccionar todo

België - Bruselas [en.villo.be]
England - Cardiff [www.oybike.com]
England - London [web.barclayscyclehire.tfl.gov.uk/maps]
England - Reading [www.oybike.com]
España - Úbeda [ubeda.onroll.info]
España - A Rúa [arua.onroll.info]
España - Alaquàs [www.hortasudenbici.es]
España - Albacete [albacete.onroll.info]
España - Alcázar de San Juan [www.bicialcazardesanjuan.es]
España - Aldaia [www.hortasudenbici.es]
España - Alhama de Murcia [alhamademurcia.onroll.info]
España - Alicante [www.alabici.es]
España - Almansa [www.bicialmansa.es]
España - Almendralejo [www.almendralejoenbici.es]
España - Amorebieta [www.biziprest.com/amorebiziz]
España - Antequera [antequera.onroll.info]
España - Aranda de Duero [arandadeduero.onroll.info]
España - Avilés [www.avilesenbici.es]
España - Badajoz [badajoz.onroll.info]
España - Baeza [baeza.onroll.info]
España - Barcelona [www.bicing.cat]
España - Benidorm [benidorm.onroll.info]
España - Blanca [blanca.onroll.info]
España - Burgos [www.bicibur.es]
España - Burjassot [www.burjabike.com]
España - Cáceres [www.bicci.es]
España - Cartagena [www.bicitycartagena.es]
España - Castellón [www.bicicas.es]
España - Catarroja [www.catarroda.es]
España - Ceuti [www.ceuti.es/ceutienbic]
España - Cieza [cieza.onroll.info]
España - Ciudad Real [ciudadreal.onroll.info]
España - Cuenca [www.tubici.cuenca.es]
España - Culleredo [www.culleredoenbici.es]
España - El Campello [elcampello.onroll.info]
España - Elche [elche.onroll.info]
España - Elx [www.bicielx.es]
España - Gandia [www.labici.gandia.org/bicicard]
España - Getxo [www.biziprest.com/getxobizi]
España - Granada [granada.onroll.info]
España - Jaén [jaen.onroll.info]
España - Lalín [lalin.onroll.info]
España - Las Palmas [laspalmas.onroll.info]
España - León [bicileon.com]
España - Leganés [enbicileganes.org]
España - Logroño [www.logrobici.es]
España - Mérida [www.bicimerida.es]
España - Miranda de Ebro [www.biciudadmiranda.es]
España - Montilla [montilla.onroll.info]
España - Mula [mula.onroll.info]
España - Novelda [novelda.onroll.info]
España - O Barco [obarco.onroll.info]
España - Ourense [bicis.ourense.es]
España - Paiporta [paiporta.onroll.info]
España - Palencia [palencia.onroll.info]
España - Paterna [www.bicipaterna.es]
España - Pinto [pinto.onroll.info]
España - Ponferrada [aplicaciones.ponferrada.org/BiciPonferrada]
España - Priego de Córdoba [priegodecordoba.onroll.info]
España - Puerto Lumbreras [puertolumbreras.onroll.info]
España - Puertollano [puertollano.onroll.info]
España - Quart de Poblet [www.hortasudenbici.es]
España - Redondela [redondela.onroll.info]
España - Salamanca [salamanca.onroll.info]
España - San Andrés del Rabanedo [www.sanandresteprestalabici.es]
España - San Javier [sanjavier.onroll.info]
España - San Pedro del Pinatar [sanpedrodelpinatar.onroll.info]
España - San Vicente del Raspeig [www.bicisanvi.es]
España - Santander [www.tusbic.es]
España - Segovia [segovia.onroll.info]
España - Sevilla [www.sevici.es]
España - Soria [soria.onroll.info]
España - Talavera de la Reina [talavera.onroll.info]
España - Torrent [www.torrentbici.es]
España - Totana [www.ayto-totana.net/bicito]
España - Universidad Granada [ugr.onroll.info]
España - Valdepeñas [www.valdebici.es:8080]
España - Valencia [www.valenbisi.es]
España - Vila-Real [www.bicivilat.es]
España - Villanueva Don Benito [villanuevadonbenito.onroll.info]
España - Villaquilambre [villaquilambre.onroll.info]
España - Villarreal [vilareal.onroll.info]España - Vinaros [vinaros.onroll.info]
España - Xirivella [www.hortasudenbici.es]
España - Zamora [www.zamorateprestalabici.es]
France - Aix-en-Provence [www.vhello.fr]
France - Amiens [www.velam.amiens.fr]
France - Besançon [www.velocite.besancon.fr]
France - Caen [www.veol.caen.fr]
France - Cergy Pontoise [www.velo2.cergypontoise.fr]
France - Créteil [www.cristolib.fr]
France - Grand Dijon [www.velodi.net]
France - Marseille [www.levelo-mpm.fr]
France - Mulhouse [www.velocite.mulhouse.fr]
France - Nancy [www.velostanlib.fr]
France - Nantes [www.bicloo.nantesmetropole.fr]
France - Paris [www.velib.paris.fr]
France - Rouen [cyclic.rouen.fr]
France - Toulouse [www.velo.toulouse.fr]
Ireland - Dublin [www.dublinbikes.ie]
Italia - Milano [www.bikemi.com]
Lëtzebuerg [www.veloh.lu]
Nippon-koku - Toyama [www.cyclocity.jp]
Norway - Oslo [www.adshel.no/js]
Österreich - Brisbane [www.citycycle.com.au]
Sverige - Göteborg [www.goteborgbikes.se]
MiBiciPublica_20110504_au3.zip
Código, iconos e includes
(72.74 KiB) Descargado 344 veces
Adjuntos
MiBiciPublica_Ver_1_02_4.zip
Version Beta 1.02.04:
[+] OnRoll: Añadidas varias ciudades: A Rúa, Antequera, Aranda de Duero, Badajoz, Benidorm, Blanca, Cieza, Ciudad Real, El Campello, Elche, Granada, Laín, Montilla, Mula, Novelda, O Barco, Paiporta, Puerto Lumbreras, Priego de Córdoba, San Pedro del Pinatar, Redondela, Soria, Talavera de la Reina, Úbeda, Villanueva Don Benito, Villarreal.
[*] ClearChannel Barcelona: Adaptado a la nueva ubicación de datos
(550.14 KiB) Descargado 285 veces
Última edición por jamaro el 24 Sep 2011, 20:59, editado 17 veces en total.
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 »

¡Muy buen trabajo! Lástima que las de Castellón no sean del mismo tipo ;-)
"¿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 Ximorro.

Gracias ;-) Acabo de entrar en la web http://www.bicicas.es y en el menú, "Estado On-line" nos lleva a este enlace:
http://www.bicicas.es/estado/EstadoActual.asp
donde se muestra de manera texto/gráfico las estaciones con sus distintas "bornetas" ocupadas y libres.

El programa MiBiciPublica, no sirve para Castellón, pero viendo el código de esa página podríamos sacar fácilmente el nombre de lo que llaman "APARCAMIENTO" y el ESTADO, y que viene en una tabla con formato.

APARCAMIENTO 03. Plaza de Pescadería - EN LÍNEA
POSICION 1 2 3 4 5 6 7 8 9 10 11 12 13 14
ESTADO - (5/14) No hay bicicleta No hay bicicleta No hay bicicleta No hay bicicleta No hay bicicleta No hay bicicleta No hay bicicleta 481 129 No hay bicicleta 061 No hay bicicleta 020 414


En la que además, parece que pone el número exacto de la bicicleta que está aparcada en cada borneta.

Buscando los textos entre las cadenas:
nowrap>APARCAMIENTO</td><td class=titulo colspan=100 nowrap>
y
</td></tr><td width=100 class=lat2 nowrap>POSICION</td>
tenemos el nombre de la estación/aparcamiento.

Y buscando entre:
<td width=100 class=lat2 nowrap>ESTADO - (
y
)</td><td width=65 align=center class=ico nowrap bgcolor=#E7FE68>

tenemos las bicicletas libres/totales.

Este es el código que acabo de adaptar (lo utilizaba para obtener datos de IDEALISTA). Sería necesario modificarlo para mostrar únicamente los de las estaciones elegidas (comparando con los primeros carácteres de la cadena de texto de $Aparcamiento).

Código: Seleccionar todo

#include <Array.au3>

$httpdir="http://www.bicicas.es/estado/EstadoActual.asp"

Global $sData = InetRead($httpdir)
Global $nBytesRead = @extended
Global $DatosLeidos=BinaryToString($sData)
;msgbox(0,"Aviso",$DatosLeidos)
Global $DatosAparcamiento[42][2]
Global $Aparcamiento

For $vez=1 to 42
	Local $cadini='nowrap>APARCAMIENTO</td><td class=titulo colspan=100 nowrap>'
	Local $cadfin='</td></tr><td width=100 class=lat2 nowrap>POSICION</td>'
	Local $Aparcamiento=BuscaCadena($DatosLeidos,$cadini,$cadfin,$vez)
	$Aparcamiento=stringreplace($Aparcamiento,@crlf,"")

	Local $cadini='<td width=100 class=lat2 nowrap>ESTADO - ('
	Local $cadfin=')</td><td width=65 align=center class=ico nowrap bgcolor='
	Local $Estado=BuscaCadena($DatosLeidos,$cadini,$cadfin,$vez)
	$Estado=stringreplace($Estado,@crlf,"")

	$DatosAparcamiento[$vez-1][0]=$Aparcamiento
	$DatosAparcamiento[$vez-1][1]=$Estado

	;msgbox(0,"Aviso",$Aparcamiento & @CRLF & "Bicicletas libres/totales: " &$Estado)

next

_ArrayDisplay($DatosAparcamiento)




Func BuscaCadena($datos,$cadini,$cadfin,$vez)

	; 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
Autoit tiene la función _StringBetween($s_String, $s_Start, $s_End [, $v_Case = -1]) de la UDF #Include <String.au3> que sustituiría a mi función BuscaCadena.

Ximorro, veré si le dedico un tiempo a incluir Castellón en MiBiciPublica.

¡Un saludo! :smt039
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 »

Jejejeje....como ya dije antes es buena la idea que has tenido :smt023 .

Te recomiendo que hagas una mejor interface gráfica (un simple control más) para poder poner las estaciones y no tener que estar cambiando el .ini cada vez que quieras ver otras. Además, queda mejor esto que te he dicho que te pregunte al principio una sola vez.

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 »

Vaya jamaro, si amplías el programa para que vaya con la web de Castellón te haré publicidad por aquí ;-)
Y como dice Chefito, ya que el programa se está haciendo popular ;-), es buena idea que puedas configurar algunas cositas desde el GUI (aunque igualmente esa configuración se escriba en el INI), queda más profesional que editar el INI a mano.

Lo comentamos con ánimo de mejorar. No te vayas a agobiar con las peticiones, tú ve haciendo según te vaya apeteciendo, que estas cosas se hacen por gusto.

¡Saludos!
"¿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 »

Chefito: El programa, actualmente, permite, con el botón derecho, editar las estaciones (y se modifica el .ini desde el programa, sin necesidad de editarlo externamente). Pensé en poner un control para tenerlo directamente en la misma pantalla, pero no sabía si al final estaría demasiado recargado. Quizás, como decís, sea más práctico tenerlo directamente en la pantalla, que editarlo con el botón derecho.

Ximorro: Respecto al .ini, ya lo he comentado a Chefito. Y sobre las bicicletas de Castellón, creo que no costará mucho adaptar el programa para utilizarlo con la web http://www.bicicas.es.

Haré esas modificaciones y subiré la nueva versión al primer mensaje.

¡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 »

Para no sobrecargar el GUI puedes poner un botón pequeño en una esquina con un icono de engranaje, el típico para configuraciones.
Puedes tomarlo directamente de los iconos de Shell32.dll, es el índice 166. Adjunto un PNG muy útil con los iconos e índices de esta dll.

por si no lo has hecho nunca para asignar un icono de una dll a un botón se hace así:
$btnConfig = GUICtrlCreateButton("", $x, $y, $ancho, $alto, $BS_ICON)
GUICtrlSetImage(-1, @WindowsDir & "\System32\shell32.dll", -166, 1)


$BS_ICON está en ButtonConstants.au3
Fíjate que en índice se pone en negativo, es la manera de indicar los iconos por orden, si se pone en positivo cree que es el nombre.
El 1 del final es para indicar icono de tamaño normal, puedes probar la versión pequeña poniendo un cero, aún será más discreto el botoncito ;-)

Taluec
Adjuntos
Shell32-DLL-Icon-Indexes.png
Shell32-DLL-Icon-Indexes.png (329.98 KiB) Visto 10802 veces
"¿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 a tod@s!

Adjunto la nueva versión de MiBiciPublica, con las siguientes novedades principales:

- GUI modificada. Ahora se muestra la lista de estaciones en una caja de texto, pudiendo editarse desde ahí las estaciones a monitorizar.
- El programa puede monitorizar también las bicicletas públicas de la ciudad de Castellón (a petición de Ximorro ;-))

Un saludo, y de nuevo muchas gracias por vuestros consejos.

(EDITADO 21/04/2011: Ver la última versión al final del primer mensaje)
Última edición por jamaro el 21 Abr 2011, 17:53, editado 1 vez en total.
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 »

Gracias por el aporte,
Si puedes añadirlo al post primero del hilo :)
Salu22:)
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 »

Uauuuuuuuuuu.

Va bien lo de Castellón, aunque ahora mismo no tiene utilidad porque en fiestas las han retirado, volveremos a probar la semana que viene.
¿No le pones el botoncito con icono? Quedará más discreto ;-)
"¿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 »

Basicos: Pongo la próxima versión que se está horneando en el primer mensaje.

Ximorro: La verdad es que me asusté cuando ví los resultados de Castellón, y efectivamente, entré en la página oficial y comentaban que estaban anuladas algunas estaciones (aunque el resto parece que han vaciado las bicicletas).
Por cierto, dado que la página de Castellón tiene todos los datos necesarios en la misma página, la lectura y presentación de los datos es mucho más rápida que para el sistema de las otras ciudades.

Ah, y venga... ahora mismo estoy poniendo el botoncito ;-) Estaba preparando una pantalla de configuración.

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

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por jamaro »

Hola a tod@s:

He subido al primer hilo la nueva versión del programa, con las modificaciones que me habéis ido diciendo.

He visto que en http://niwi-bicing.appspot.com/ nos indican cómo obtener los datos de las bicicletas de Barcelona, así que ya está incluida esta ciudad en el programa.

También, después de trabajar sobre las bicicletas de Castellón, he comprobado en algunas páginas, como http://www.enbicipormadrid.es/2010/06/s ... spana.html , que existen muchas ciudades con el mismo sistema del ITCL (Institulo Tecnológico de Castilla y León), como Zamora, Logroño, Getxo, Amorebieta, Burgos, Ponferrada, Leganés,... [s]que pronto estarán incorporadas en el programa[/s]. (Ver edición al final del mensaje)

Por otro lado he hecho algunas correcciones porque me dí cuenta que cada vez que cerraba el programa, al volver a abrirlo, la ventana era cada vez más grande, a pesar de guardar los datos de posición y tamaño de la ventana principal en el archivo .ini para luego recuperarlo. Leyendo en el foro http://www.autoitscript.com/forum/topic ... behaviour/ al final he modificado el código, viendo que siempre se incrementaba la misma cantidad de pixeles y le resto ese incremento al tamaño de ventana obtenido con WinGetPos.

Ahora, desde configuración, se puede modificar los valores de bicicletas mínimas, para que los muestre con distintos colores (también configurables).

Compañeros BasicOS, Chefito y Ximorro, me he permitido añadir vuestros apodos en la ventana de Información.

Un saludo y espero que os sea de utilidad (el programa en sí y/o el código)


EDITADO: He comprobado que no todas las ciudades ponen número a sus estaciones, algunas sólo ponen la dirección, con lo cual, de momento no es posible incorporar estas últimas ciudades en el programa.

Aquí van los cinco tipos distintos de datos que he visto de algunas ciudades que utilizan el sistema del ITCL.

- Estaciones numeradas y número de bicicletas/bornetas libres en línea ESTADO: http://www.bicicas.es/estado/EstadoActual.asp
- Estaciones numeradas y número de bicicletas/bornetas libres en la misma linea de APARCAMIENTO: http://www.zamorateprestalabici.es/esta ... Actual.asp
- Estaciones sin numerar, sólo dirección, y número de bicicletas/bornetas libres en línea ESTADO: http://www.bicitycartagena.es/estado/EstadoActual.asp
- Estaciones sin numerar, sólo dirección, y número de bicicletas/bornetas libres en la misma línea de APARCAMIENTO: http://www.biziprest.com/getxobizi/esta ... Actual.asp
- Estaciones sin numerar, sólo dirección, y sin número de bicicletas/bornetas libres: http://www.biciudadmiranda.es/estado/EstadoActual.asp

Las que tienen número de estación, será fácil incluirlas, las que no tienen número.... de momento no he pensado cómo se podrían incluir. Una primera idea que se me ocurre es guardar las estaciones, en lugar de por el número, por parte del texto de la dirección. Mmmm.... ya veremos. :smt017
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 »

No te ha quedado nada mal el programa :smt023 . Seguro que a alguno nos viene bien alguna vez el código que has utilizado :smt002 .
jamaro escribió:Compañeros BasicOS, Chefito y Ximorro, me he permitido añadir vuestros apodos en la ventana de Información.
Gracias por nombrarnos. Es todo un detalle :smt023 .
jamaro escribió:He comprobado que no todas las ciudades ponen número a sus estaciones, algunas sólo ponen la dirección, con lo cual, de momento no es posible incorporar estas últimas ciudades en el programa.
Te comento como reestructuraría algo el programa (es mi forma de verlo y mi opinión. Cada uno puede hacerlo como quiera). Pienso que a la gente le interesa saber más donde están las bicis por el nombre de la calle que por el número de estación. Lo suyo sería dar preferencia a este campo.
Yo haría dos listas (o listas desplegables). Una que contuviese los lugares que quieres consultar (como la que ya está hecha) y otra que contuviese todas las direcciones donde hay estaciones (puede ir junto a la dirección su número de estación, si lo posee). Cada vez que cambiases de lugar en la primera lista, la segunda lista se debería actualizar con las direcciones de ese lugar.
Se podría actualizar de distintas formas. Pienso que la mejor forma es accediendo a los datos a través de internet. Si lo ves muy lento, puedes generar tu las listas, con el problema de que pueden quedarse desactualizadas y es más laborioso, pero con la ventaja de que es más rápida la carga. La selección de las direcciones de la segunda lista puede ser múltiple para que te muestre el estado de varias estaciones a la vez.

Con el problema que tienes con que puede que en algunos sitios no tenga algún dato de los que has puesto en el listview, puedes tratar esto de distintas formas. Por ejemplo, poniendo algo en el lugar donde no hay datos que consignar (como por ejemplo un guión (-) o una frase como "No hay datos" ), u ocultando ese campo (columna).

La verdad, como porder hacer, se pueden hacer muchísimas cosas. Según lo que te quieras complicar :smt024 .

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 ;).
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por jamaro »

Gracias Chefito.

Efectivamente, ayer estuve pensando en hacer una lista con marcas de selección a la izquierda, con todas las estaciones de cada ciudad, y que el usuario marque las estaciones que quiere monitorizar.
Las estaciones se podrían listar por orden alfabético, con el inconveniente de que no siempre las direcciones empiezan por el propio nombre, sino por C/ o Avda.

El programa, aunque da la oportunidad de utilizarlo en varias ciudades distintas, su uso más común será en una única ciudad, y una vez el usuario configure sus estaciones más habituales, no lo modificará normalmente, sólo cuando desee modificar las que ya haya establecido previamente.

De todos modos, como tú dices, se puede hacer muchísimas cosas, y todo depende de lo que uno se quiera complicar. De momento da servicio a todas las ciudades con el sistema de JCDECAUX, además de Castellón (sistema BICICARD del ITCL) y Barcelona.

Las de sistema BICICARD son las más rápidas, ya que tienen todos los datos en una misma página web y su lectura y presentación es mucho más rápida.

El código está ahí para que cualquier usuario pueda modificarlo a su antojo y añadir las mejoras que crea oportunas. Seguramente haré modificaciones, porque probando, haciendo, leyendo y preguntando, se aprende muchísimas cosas, y siempre que se hace un programa se aplican partes de código que luego viene bien utilizar en otros programas que hacemos.

Un saludo (después del rollo),

Jamaro
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 »

Qué buen trabajo, jamaro.

¡Gracias por los créditos!
Voy a empezar a hacerte publicidad por Castellón ;-)

Muy bueno lo de los colores para el estado de las estaciones, ¡y son configurables! Buen trabajo.
Me parece muy acertada la sugerencia de mirar las estaciones por dirección desde el programa, para que no haya que ir a la web a buscar qué números te interesan. Tu idea de sacar la lista con las direcciones para que el usuario marque las que quiere creo que sería ideal.

Una sugerencia, mejor pon un botón "Aceptar" en la ventana de configuración, es que queda un poco raro que cuando acabas de cambiar la config te encuentras con que tienes que cerrar la ventana con el aspa de la barra de título, lo que normalmente es un "Cancelar". Un botón de "Aceptar" o "Aplicar" confunde menos.
Y además creo que sería buena idea hacer un "clic" automático al botón "Actualizar" (vaya, ejecutar BActualizar) al salir de la configuración para aplicarla inmediatamente, que seguramente es lo que quiere el usuario.

Ah, en la configuración, lo de "0 o menos bicicletas libres"... no creo que haya menos de 0 bicicletas libres ¿no?, ja, ja.

Ah, otra sugerencia más bien tonta, a riesgo de parecer pesado: a la hora de empaquetar el programa en el post original, si quieres el fuente tienes que buscar los includes en la versión anterior... yo los pondría en la versión final para que esté todo en uno. O como al fin y al cabo los fuentes no son necesarios para ejecutar el programa, también puedes poner por un lado el ejecutable y por otro los fuentes (pero junto con sus includes, para que quien quiera ver el código lo tenga todo junto). Supongo que es cosa de gustos pero se me ha hecho un poco raro tener que buscar algunos archivos de la versión anterior del programa.

Como digo buen trabajo, ¡y seguro que lo vas a seguir mejorando!
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
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 »

Por cierto, como el diálogo es "resizable", quizás te interese ponerle un tamaño mínimo, eso se hace registrando el mensaje WM_GETMINMAXINFO. Por ejemplo con el siguiente código hago que el tamaño mínimo de la ventana sea 400x300:

Código: Seleccionar todo

GUIRegisterMsg($WM_GETMINMAXINFO, "_WM_GETMINMAXINFO") ;Esto se pondría por ejemplo justo antes del GUISetState(@SW_SHOW)
...
...
Func _WM_GETMINMAXINFO($hWnd, $Msg, $wParam, $lParam)
	Local $tMINMAXINFO = DllStructCreate("int[2];" & _ ;La primera palabra está reservada, luego viene lo bueno...
			"int MaxSize[2];int MaxPosition[2];int MinTrackSize[2];int MaxTrackSize[2]", $lParam)
	DllStructSetData($tMINMAXINFO, "MinTrackSize", 400, 1) ;Mínimo ancho
	DllStructSetData($tMINMAXINFO, "MinTrackSize", 300, 2) ;Mínimo alto
	Return 0 ;No mandamos el mensaje a Windows, ya lo hemos procesado nosotros
EndFunc
Para afinar, como puedes ver la función recibe el handler de la ventana, con lo que podrías comprobar que estás en la principal. Ahora mismo no te hace falta porque las otras dos ventanas no son redimensionables, pero si en el futuro pones otra que sí lo sea recuerda que tienes eso ahí para saber en qué ventana estás trabajando.

Si fuerzas MaxTrackSize también puedes limitar el tamaño máximo (MaxSize y MaxPosition es para la ventana maximizada, eso mejor no tocarlo)

Si quisieras hacer algo MIENTRAS el usuario está cambiando el tamaño entonces puedes registrar el mensaje WM_SIZE. De eso tienes un ejemplo aquí:
http://www.emesn.com/autoitforum/viewto ... f=5&t=1847


Para la ayuda, si quieres usar formatos, como negritas, subrayados y tal, incluso hiperenlaces, puedes usar código html metiendo un IExplorer embebido. Puedes ver el mecanismo por ejemplo aquí:
http://www.emesn.com/autoitforum/viewto ... 04&start=0

Puedes ver un poco de la discusión sobre ello en el post en "Detalles técnicos" y "Un problema". También hablamos ahí y en los comentarios de otra posibilidad: un objeto RichEdit.

El código quizás hace un poco raro lo de coger el código de una función, lo hice para no usar un archivo externo, como tú al fin y al cabo usas necesariamente varios archivos (el ini) quizás te sea más cómodo simplemente tener uno más con el html.
Yo bloqueo el acceso al control poniendo delante una etiqueta transparente, si quieres poner hiperenlaces no pongas esa etiqueta, pero asegúrate de que abren una ventana nueva o se pondrán a navegar en la ventanita de tu ayuda ;-)
"¿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 »

Ximorro: Gracias de nuevo por tus aportes.

- Ahora si el tramo1 es 0 pone "Ninguna bicicleta libre" y sino "x o menos bicicletas libres"
- He añadido el botón aceptar en la ventana de configuración, pero debo depurar un poco para que al cerrar la ventana "reponga" los valores previos a las modificaciones que no se han aceptado.
- A la próxima subiré todos los .au3 :smt003

En cuanto a lo del tamaño máximo/mínimo de ventana, me interesa, pero ¿podrías explicarme la función _WM_GETMINMAXINFO que pones en tu mensaje? Desconozco el uso de la función DllStructCreate, y si la entiendo, seguro que le saco más partido.

Bueno, seguiré modificando. Por cierto, he llamado al programa MiBiciPublica Beta 1.0 (hasta que esté más depurado)
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 »

¿Qué quieres decir con "reponer los valores no aceptados"? ¿es que vas a poner un botón cancelar? ¿o lo dices por cerrar con el aspa?
Siempre puedes quitar el aspa para que no tenga más remedio que aceptar ;-)
Si quieres que se pueda cancelar, lo que no es mala idea, tienes que guardar todos los parámetros configurables en variables que no tocas mientras se manipula el formulario, al aceptar el formulario las rellenas con lo que ha dejado el usuario, si se cancela simplemente cierras sin hacer nada.
Si dejas cancelar pondría un botón al efecto, vaya, el típico par Aceptar-Cancelar.

Lo de los mensajes... es fácil de explicar pero es un mundo que requiere bastante investigación para usarlo eficientemente (por conocer qué mensajes hay y qué se puede hacer con ellos).

INTERACCIÓN CON WINDOWS: INTRODUCCIÓN
AutoIt como lenguaje hace algunas automatizaciones y manipulaciones de ventanas bastante interesantes, para lo que no puede hacer directamente ofrece mecanismos para que puedas entrar en las entrañas de Windows y hacerlo tú un poco más a mano. Es decir, hay muchas cosas que AutoIt no hace directamente pero te da mecanismos para que se lo pidas al propio Windows, y la verdad es que de una manera bastante fácil, si lo comparas con otros lenguajes.
Uno de esos mecanismos es hacer llamadas a la API de Windows, a base de ejecutar funciones dentro de DLLs del sistema, otra puede ser usar objetos COM del sistema (precisamente lo de la ayuda en html que te decía antes se hace así, para meter un control de Internet Explorer dentro de tu programa), y otra, que es el caso que nos ocupa, es el manejo de mensajes de Windows.
El problema de estas cosas es que escapan al ámbito directo de AutoIt, así que no están explicadas en su ayuda (aunque por ejemplo la UDF WinAPI.au3 mapea muchísimas funciones de Windows, y en la ayuda de la UDF las comentan). Generalmente tendrás que buscar por otros sitios, principalmente la MSDN... y en los foros :smt006

Mensajes
Todas las aplicaciones/tareas/ventanas/controles de Windows se comunican entre sí y con el sistema a base de mensajes. Comunican muchas cosas con mensajes y se les indica muchas cosas con mensajes. De hecho se mandan muchos mensajes incluso aunque nadie los esté escuchando :smt005 . Normalmente los mensajes son de lectura, con lo que puedes saber qué se está haciendo (por ejemplo que una ventana pierde el foco), a veces los puedes cancelar (puedes por ejemplo evitar que una ventana se cierre) y a veces también puedes modificarlos, como es este caso de WM_GETMINMAXINFO.

Ese es el nombre del mensaje que se envía a una ventana cuando va a cambiar de posición o tamaño, tal como explica la MSDN:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Ahí puedes ver que el mensaje incluye un puntero a la estructura MINMAXINFO, que está detallada aquí:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Puedes modificar los valores de esa estructura antes de que el mensaje llegue a la ventana, de tal manera que use tus valores para por ejemplo en este caso forzar el tamaño mínimo.

Una vez tienes esa información la usas en AutoiT. Para ello primero se registra el mensaje con GUIRegisterMsg, eso le dice a tu programa que escuche ese tipo de mensaje, y que cuando le llegue ejecute la función que le pasas como segundo parámetro (le puse _WM_GETMINMAXINFO para llamarla como el mensaje pero puedes poner cualquier nombre de función válido).

La función que maneja el mensaje debe tener como mucho 4 parámetros: la ventana a la que llega (aunque el mensaje sea por ejemplo de un control específico aquí te llega el handle de su ventana), el ID del mensaje, y los dos parámetros que de forma estándar tienen todos los mensajes (aunque algunos no los usen).
WM_GETMINMAXINFO no usa wparam, y en lparam recibe la estructura MINMAXINFO. Para poder acceder a estructuras tipo C formadas por bytes, palabras, etc. desde AutoIt se usa DllStructCreate. En la MSDN usa campos tipo POINT, pero eso no está definido para AutoIt, como un POINT está formado por dos campos enteros he creado para cada uno un array de dos enteros, también podría haber puesto cada entero por separado. Al primer "point" no le he puesto nombre porque no se usa. A los demás se lo he puesto para que sea más cómodo y claro acceder a ellos, aunque no es necesario porque puedes acceder por posición. Al poner $lparam como segundo parámetro de DllStructCreate, inicializo la estructura con sus datos, de lo contrario se crea vacía.

Para modificarla se usa DllStructSetData (si sólo quisiera leer campos se hace con DllStructGetData).
En DllStructSetData le dices qué campo quieres modificar (por posición o nombre, si se lo has dado), qué valor quieres poner, y cuando son arrays, como en este caso, en qué posición del array estás escribiendo (¡empezando en 1, no en 0 como los arrays normales!).

Una vez modificado, no hay que hacer nada más, el mensaje es procesado con esa modificación. Bueno, en este caso sí hago una cosa, al devolver un valor impido que el manejador interno de mensajes de AutoIT también procese el mensaje, en este caso ya lo manejo yo completamente así que no quiero que haga nada más. Si quisiera que el mensaje siga su curso hay que usar Return $GUI_RUNDEFMSG (variable definida en GUIConstantsEx.au3). Por ejemplo si estoy mirando si una ventana pierde el foco puedo impedirlo haciendo Return 0, pero a lo mejor no quiero impedir que se pierda el foco, sino hacer una tarea paralela como escribir un log, tocar un sonido o lo que sea, en ese caso haría esa tarea y acabaría con Return $GUI_RUNDEFMSG para que el sistema procese la pérdida de foco...

Espero no haber liado más la cosa, ya digo que este es otro mundo, y AutoIt te abre las puertas a él. Ojo que al principio parece que se pueda hacer TODO, y ciertamente esto de los mensajes o las llamadas a la API es fantástico y te encuentras con que puedes hacer cosas que creías que no se podían hacer. Pero ojo que también tiene limitaciones, por ejemplo con los mensajes no siempre te manda Windows los mensajes de todos, normalmente recibes los mensajes de tus ventanas, y algunos generales, por ejemplo no sé cómo limitar el tamaño de una ventana que no es tuya, bueno, se me ocurre monitorizándola de otra manera, pero no sé cómo se haría con mensajes, si se puede, pues no recibo los WM_GETMINMAXINFO de ventanas que no sean de mi programa.
Y no digo que no se pueda, a pesar del rollo que he soltado no creas que controlo tanto el tema, yo voy buscando según me va haciendo falta, y si no encuentro, pregunto en el foro que por aquí hay un tal Chefito que sabe un montón de las interioridades de Windows, como la API o los mensajes :smt003 :smt024 ;-)
"¿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 »

¿Qué quieres decir con "reponer los valores no aceptados"? ¿es que vas a poner un botón cancelar? ¿o lo dices por cerrar con el aspa?
Efectivamente, ya he puesto botones de aceptar y cancelar, así los cambios realizados en el cuadro sólo se guardan si se da aceptar; y se vuelve a los valores anteriores si se cancela o cierra la ventana con el aspa.

En cuanto a los mensajes... he leído tu explicación :smt023 y algo he entendido, pero tengo que verlo más detenidamente a ver si lo pillo bien. Veo que es algo complicadillo, al menos para los que no lo hemos utilizado (conscientemente) hasta la fecha.

Gracias
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!

Estoy haciendo modificaciones en el programa para utilizar las direcciones de las estaciones, en lugar de los números, ya que, como me comentasteis, es más fácil para el usuario buscar la dirección, que buscar el número de estación.
Eso me está suponiendo cambiar el sistema de monitorización de las estaciones, pero ya estoy llegando a los resultados deseados.

Por otro lado, Ximorro, me ha costado un poco entender los de WM_NOTIFY, pero releyendo tu explicación y algunas de la red, parece que lo he pillado, e incluso he modificado algunas que había sacado de otros foros para capturar el evento de DobleClick en un ListView, que utilizaba $wParam, y utilizarlo sólo con lo obtenido en $lParam. (Abro otro hilo para comentarlo)

Sigo con el proyecto ;-)
Responder