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

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por jamaro »

Aquí llega una versión diferente del programa.

Principales novedades:
- Ahora, siguiendo vuestros consejos, el usuario no debe seleccionar los números de estación que desea monitorizar, sino la dirección de la estación. Para ello debe seleccionar las estaciones deseadas en una lista en la pantalla de Configuración de Estaciones.
- Sustituida las búsquedas en archivos XML que utilizaba el include _XMLDomWrapper y la función XMLGet por la función StringRegExp, ya que viendo el funcionamiento y potencia de esta última función he visto que resulta más práctico buscar datos con ella en una página web.
- Monitorización de los sistemas de JcDecaux y BiciCard (del ITCL). De momento se ha suspendido el sistema de Bicing.cat, de Barcelona, porque se ha detectado que los datos de algunas estaciones que ofrece la página http://niwi-bicing.appspot.com/ no se actualizan constantemente, pudiendo haber pasado horas desde la última actualización.

Quedan cosas por depurar y mejorar, y con las pruebas que he realizado me surgen algunas preguntas que os lanzo a ver si podemos resolverlas:

1) Ahora estoy intentando utilizar _GUICtrlListView_AddArray en la función GUI_ConfiguraEstaciones_Filtrar() (Línea 1521) para mostrar los datos más rápidamente (sobretodo cuando hay muchas estaciones en una ciudad, como Valencia o París). Pero de momento me da el siguiente error en el propio include GuiListView.au3.
DllStructSetData($tBuffer, "Text", #aItems[$iI][0])
DllStructSetData($tBuffer, "Text", ^ERROR

2) Al probar en un portátil con un "tema de fondo" de Windows distinto al que tengo en el PC donde hago las pruebas, observo que las dimensiones de la ventana son distintas, y no caben bien los controles de las ventanas gráficas. Parece que los bordes y la barra de título tiene dimensiones distintas según el tema de fondo que tiene el usuario.

3) En las pruebas en el portátil, con conexión wi-fi, a veces, mientras actualiza la lista de la ventana principal, sale mensaje de que no hay conexión a internet, quizás deba hacer una espera mayor en la comprobación SiHayInternet()

4) En la pestaña de Configuración de Estaciones:
- A veces, al escribir en el cuadro de 'Buscar' el texto más rápido de lo que actualiza la lista, se rompe el programa.
- Al escribir en el cuadro de 'Buscar', tarda un poco en poderse hacer dobleclick en la lista de la izquierda para pasar a la lista de la derecha.
Esto último debe tener su razón en que en la función My_WM_COMMAND para $EN_CHANGE, tuve que poner un sleep(500) para evitar que al escribir muy rápido en el cuadro de texto no de tiempo a actualizar bien la $lw_direcciones_origen.

5) He detectado que, a veces, sin saber todavía por qué, el programa se rompe cuando se actualiza la lista de la ventana principal y a veces también en la función UnirMatriz(). Si se ejecuta de nuevo el programa, se muestra la lista correctamente.

6) En el proceso de limpieza del código que voy haciendo poco a poco, veo que se me quedan variables definidas y que al final no utilizo. En el foro inglés he leído que alguien utiliza un script externo que lista las variables utilizando StringRegExp. ¿Conocéis otra manera de detectar las variables que no se utilizan?

Por otro lado, hay cosas que mejorar como:
- Diseño de las pantallas
- Permitir que se cancele el relleno de lista de ventana principal
- Bloquear (disable) controles mientras se está haciendo alguna operación
- En la Configuración, advertir si se quiere salir de la ventana y no se ha guardado los cambios
- Dado que hay direcciones de estaciones que son muy largas, quizás se bueno cambiar el tamaño de $lw_direcciones_origen y $lw_direcciones_destino, haciéndolas más anchas y distribuyéndolas de forma horizontal.
- ...

Capturas de la última versión (EDITO 21/04/11: Las he puesto en el primer mensaje)

Cuando esté más depurado lo colgaré en el primer mensaje del hilo.

Gracias de nuevo por vuestras sugerencias, aportes y correcciones.

(EDITADO 21/04/2011: Ver última versión al final del primer mensaje)
Última edición por jamaro el 21 Abr 2011, 17:54, editado 2 veces 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 »

Probada, una aplicación PRO. Si lo deseas puedes compilarla con OPCIONES, y elegir un fichero icono ext .ico y le añades al exe un icono diferente al estandar. :smt041 :smt041
No se si puedes dar una lista de las ciudades donde lo tienes operativo este programa
Salu22:)
Edit:
Yo actualizaría el fichero en el primer post del tópico y lo indicaría que está allí desde el último post, eliminando las versiones anteriores, con el número de versión con subdígitos. :smt023
Edit:
el .ini lo puedes incluir dentro del exe con un fileinstall() que lo crearía si no existe
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 »

Creo que lo de las estaciones por nombre/dirección será muy interesante :smt023

Bueno, precisamente WM_NOTIFY es un poco puñetero porque es "el mensaje de los mensajes". Es un saco donde meten montones de mensajes, así que es algo más complicado de manejar. El ejemplo anterior de WM_GETMINMAXINFO es más directo, aunque ese tiene la complicación de la estructura, que también lo hace un poco especial.

Otro saco de mensajes muy usado es WM_COMMAND, para ese hay un ejemplo excelente en la ayuda de la función _GUICtrlEdit_Create (de la udf de usuario GuiEdit.au3). Maneja un montón de eventos del Edit gracias a ese mensaje de mensajes.
"¿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: Siguiendo tu idea, he puesto un icono distinto a la aplicación. En cuanto al .ini, el propio programa lo crea si no existe, así la primera vez que se tiene el programa simplemente es necesario el exe y lo iconos.

Ximorro: Algo voy entendiendo de los WM. Gracias.

He editado el primer mensaje en el que he incluido la última versión realizada, con estas novedades principales:

- Incluye Barcelona. Gracias a unos comentarios de BasicOS sobre el sistema OnRoll utilizado en Las Palmas, ahora he visto que es posible leer datos de algunos mapas de Google Maps. En el caso de Barcelona, se lee los datos desde el mapa de la página oficial de Bicing,cat (http://bicing.cat/localizaciones/localizaciones.php). Aunque al tener muchas estaciones, resulta algo lenta la lectura de sus datos.

- Modificado el filtro en la pantalla de configuración. Se ha mejorado el sistema de filtrado, evitando ocasionales "roturas" del programa, al escribir en el cuadro 'Buscar' más rápido de lo que se actualizaba la lista de estaciones de la ciudad.

Un saludo,

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

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por jamaro »

Editado el primer mensaje con la última versión.

- Incluye sistema OnRoll de DomoBlue (Gracias BasicOS por la propuesta y por indicarme cómo hacer el REFERRER)

Como siempre, agradezco la detección y reporte de errores.
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 a ti por tu fantástico programa y encima ecológico - sostenible. :smt038 :smt038
Salu22:)
Adjuntos
Bicis Lpa
Bicis Lpa
BICISLPA.jpg (34.83 KiB) Visto 5697 veces
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por jamaro »

Editado el primer mensaje con la última versión.

Version Beta 1.02:
[+] Se implanta el sistema Alabici de Alicante [www.alabici.es]
[+] Se implanta el sistema BarclaysCycleHire (Londres) de Inglaterra [http://www.tfl.gov.uk/roadusers/cycling/14808.aspx]
[+] Se implanta el sistema OYBike (Cardif y Reading) de Inglaterra. [http://www.oybike.com/]
[*] ClearChannel: Se incluye las ciudades de Caen [www.veol.caen.fr] y Grand Dijon [www.velodi.net] de Francia y Milano [www.bikemi.com] de Italia
[*] OnRoll (DomoBlue): Se incluye la ciudad de Elx [www.bicielx.es] y San Javier [sanjavier.onroll.info]
Última edición por jamaro el 05 May 2011, 18:56, editado 1 vez en total.
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 »

Muy bueno el trabajo que estás haciendo :smt023 .

Por cierto, corregiste los errores que mencionas más arriba?? Te sigue fallando algo o crees que se podría mejorar algo?? Es para hacer de testeadores. Yo te lo puedo probar en varios ordenadores con varios S.O.

Otra cosa, creo que en mi ciudad, Albacete, también tienen un sistema de estos. Nunca lo he mirado, pero creo recordar que un día que iba caminando ponía una web con una dirección en un cartel situado encima de lo de las bicis :smt001 . Simplemente te lo comento por si te interesa.

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 »

Chefito escribió:Muy bueno el trabajo que estás haciendo :smt023 .

Por cierto, corregiste los errores que mencionas más arriba?? Te sigue fallando algo o crees que se podría mejorar algo?? Es para hacer de testeadores. Yo te lo puedo probar en varios ordenadores con varios S.O.

Otra cosa, creo que en mi ciudad, Albacete, también tienen un sistema de estos. Nunca lo he mirado, pero creo recordar que un día que iba caminando ponía una web con una dirección en un cartel situado encima de lo de las bicis :smt001 . Simplemente te lo comento por si te interesa.

Saludos.
¡Gracias Chefito!

Con la sugerencia de BasicOS, incluí el sistema OnRoll de DomoBlue, que está, entre otras ciudades, en Albacete, así que ya la tenemos :smt002

En cuanto a los errores, últimamente me va bastante bien, aunque a veces, cuando la página que ofrece los datos no está operativa o está "en mantenimiento" el programa se rompe, pero una cosa es que no esté disponible, y puedo detectar el error, y otras, como me pasó el otro día con ValenBisi, que el programa se rompía y fui con el navegador a la página y redireccionaba a otra diciendo que estaban "en mantenimiento.

Una cosilla estética es lo del tema que se utilice en Windows. Yo tengo el "clásico" y los botones y todo se ve bien, pero por ejemplo, con el que viene por defecto en Windows XP (con los bordes azules y redondeados) parece que "se come" parte del GUI.

Un saludo, y a testear si podéis :smt003
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por jamaro »

Publicada versión 1.02.3 que corrige un error producido al haber cambiado la URL oficial donde se encuentran los datos de las estaciones de JcDecaux.

De momento, de manera rápida, sólo se ha modificado para la ciudad de Valencia, pero estoy mirando si puedo "automatizarlo" para que utilice la página oficial para todas las ciudades de JcDecaux.

¡Un saludo!
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por jamaro »

Volviendo con el programa que hacía tiempo que lo tenía aparcado porque parecía que ya cumplía mis expectativas hasta el momento, y a raíz del error que he obtenido los últimos días y que han llevado a la nueva versión, os pregunto lo siguiente:

Hace unos días el programa me daba un error en la linea 13000 y pico (si no recuerdo mal). No le dí mucha importancia y pensaba que era porque no tenía acceso a la página oficial donde se ofrecen los datos, quizás porque esa página estaba caída,...

Pero al ver que pasados varios días seguia con el error, fui a buscar los datos manualmente y no los encontré, y viendo el código HTML de las páginas me dí cuenta que (hablo del sistema de bicicletas de JcDecaux):

Donde antes encontraba los datos en:
http://www.WEBSERVICIO/service/stationd ... m_estacion
Ahora los tenemos en:
http://WEBSERVICIO/service/stationdetai ... m_estacion

Aunque hoy he visto en una página que hablan sobre este servicio en Dublín y cómo obtener algunos datos, que también se puede leer el estado de las estaciones en:
https://abo-CIUDAD.cyclocity.fr/service ... m_estacion
Parece que esté centralizado en cyclocity.fr y quizás sea más práctico utilizarlo así en mi programa.
EDITO: Por cierto ¿influye de alguna manera en nuestro código de Autoit que la web sea https en lugar de http?

Cuando el programa llegaba a este punto se ve que no obtenía los datos y se rompía. En el programa, la función SiHayInternet() verifica si existe conexión a internet con un Ping.

Digamos que este es un error previsible y que podemos decirle al programa que haga una cosa u otra en función de que haya o no conexión, pero ¿hay alguna manera de que un error "que desconocemos" se registre, muestre un MsgBox con los datos del error (para saber en qué momento ha ocurrido) y siga corriendo el programa o salga de una manera controlada?

Una segunda cuestión que me planteo es reorganizar un poco el código que, cada vez ha ido haciéndose más grande y a veces me cuesta moverme por él hasta a mí, que lo he hecho. ¿Veis práctico sacar algunas funciones del código a otros archivos au3 e incluirlos con #include en el principal? ¿Sería tan simple como sacarlo o tendría problemas con las variables?

Gracias, como siempre por vuestras indicaciones.
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 »

La funcion adlib te puede servir para ello, o bien escribir una función que ejecute la rutina del error, tambien hay funciones específicas que te gestionan los errores en sí, depende si es un error previsible o no, y si es un error que te eche fuera del programa o no. Puedes especificar más?

Lo del ficheros au3 por fuera no lo veo (personalmente tan bien), aunque si puedes crear un funcMibicipublica.au3 especifico para las funciones o las libreriasmasgenerales.au3 que pueden servir para otros programas.
No obstante lo ideal siempre es modularizar en funciones que engloben procesos concretos, y luego dentro de esas funciones otras funciones con lo que el código principal se puede quedar con 10 o 20 funciones que son faciles de ver:

func1()
func2()
func3()
etc.......

Así ves más el código como un tipo arbol en que cada modulo tiene otro modulo(o función), y cuando vas a BUSCAR UN ERROR, puedes ir al modulo directamente donde está más facil y no por cientos de lineas,

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

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por jamaro »

BasicOs, echaré un vistazo a Adlib.

En cuanto a las funciones y estructura tipo árbol ¿te refieres a ...?

Func Func1()
....
Func Func2()
....
Func Func3()
.....
EndFunc
EndFunc
EndFunc

Si no me equivoco, creo que siempre he hecho Func...EndFunc sin meter por dentro otras funciones,.... :smt017
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 »

no solo me refería que en vez de hacer tanto código antes de las funciones, modularizar la primera parte, y luego dar caña realmente en las funciones. Se pueden poner variables globales o devolver valores entre muchas opciones para comunicar las funciones..
1---Main o algoritmo principal
funcion1
funcion2
funcion3

2----Luego debajo todas las funciones sub-algoritmos que tratan temas concretos del programa o por dividirlos y sea más manejable
Func
Endfun
etc...

3----Luego debajo las funciones generalistas o que son más de apoyo de las otras que son soluciones para simplicar las anteriores pero que no son del programa directametne (ejemplo una funcion para enviar un mail: SendMailGmail([email protected],xxx,xxx,,xx), o para ftp o cualquier cosa

O sea que la parte raiz de la lógica en sí (el algoritmo base de donde va a salir el resultado) del programa se reduzca a un máximo digamos de 50 lineas (aparte de las declaraciones de variables etc, que se pueden separar al principio), y luego 2000 lineas más en una subzona debajo del algoritmo principal con sub-algoritmos, que son las funciones en sí, y funciones que usan otras funciones

De todas maneras no hay reglas porque es untema muy personal, pero eso es lo que haría yo para evitar que un error me tenga horas buscandolo. Claro eso si hablamos de programas extensos!!!
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 »

Me temo que lo de errores genéricos no es muy posible. Se pueden hacer algunas cosas, como que si la web que descargas no es del formato esperado, pues sacar el código de la web que te ha llegado en una ventana de error, y el usuario viendo ese código igual puede ver el error.
Pero normalmente el tratamiento de errores es los más costoso de un programa, y cuando lidias con un usuario que está metiendo datos puede ser una pesadilla, los usuarios son listísimos cuando se empeñan en romperte el programa sin darse cuenta :smt005 )

Además están los errores fatales que hacen saltar el AutoIT, y los errores lógicos. AutoIT precisamente no comunica algunos errores y sigue como si nada, pero eso es malo, porque el error está ahí y se propaga, cuando lo cazas no hay manera de ver dónde se originó el problema.
Por ejemplo si recoges un número en una cadena (porque lo lees de un archivo html por ejemplo), y resulta que lees "a", que no es un número, Si luego haces
$res = 34 * $datoleido
Resulta que no da error, porque AutoIT con toda tranquilidad traduce "a" a 0 y hace la multiplicación. Igual media hora después usas $res para dividir algo y te da un error fatal de división por cero, pero el error estuvo mucho antes...

Conclusión, los errores hay que controlarlos, hay que pensar en todos los errores posibles, cosa que suele ser imposible, pero es la manera de atacarlo.
Para ayudarte a depurar un programa extenso quizás te convenga hacer un log de actividad. Puedes escribir a consola con ConsoleWrite, y depurar el máximo posible desde Scite, en el programa final no se verá ni aunque se ejecute desde una ventana DOS. Otra manera más elegante es hacer un archivo de log e ir escribiendo en él con una función específica. Puedes tener una variable global que indique si estás en desarrollo o en la versión final, y si es la final que las funciones de escribir en el log retornen enseguida y no hagan nada...

Respecto a la organización de código ciertamente puede ser muy interesante que bajes algunas tareas a funciones, aunque sólo se ejecuten una vez (por ejemplo una _Inicializar() y de ese estilo, e ir simplificando el cuerpo global de programa. Creo que esa es la idea que te está dando BasicOS.
Lo de hacerte librerías y hacer el programa en varios archivos sería parecido pero dando un paso más. Si crees que hay suficientes funciones para hacer una unidad funcional, por ejemplo con las funciones que tratan la descarga y análisis de las páginas html, pues las puedes sacar a otro au3, llevándose con ellas las variables que se usen sólo en ese módulo. Las variables globales se comparten entre todos los au3, el principal y los añadidos con #include, así que no hay problema con eso (bueno, hay problema si no lo sabes y usas el mismo nombre creyendo que no se ven entre ellas, pues no, estarías modificando la misma variable).

Respecto a lo de https, decirte que yo con web he trabajado poco pero mi experiencia es que no hay diferencia. Yo tuve problemas con una web segura que pedía certificado, pero realmente el problema no era del https, era que el navegador me estaba diciendo que no reconocía el certificado y yo no le estaba diciendo que lo aceptara. Así que si te falla un https mira ese tipo de cosas por si acaso, en principio InetGet no tiene problemas para tomar la página aunque sea segura.
"¿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 »

Gracias Ximorro. El tema de Consolewrite lo tengo metido por todo el código, porque me es muy útil mientras voy trabajando, luego, algunos los "comento" con un ; delante, pero siempre viene bien.

No había caído en el archivo log. Se podría llevar al log todo lo que ahora tengo en la consola. Además, seguramente no me será muy costoso, porque utilizo una función cw() que creé:

Código: Seleccionar todo

		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 otra similar para MsgBox, me resulta sencillo escribir: cw("Mensaje para la consola") y así me envía el mensaje con el número de línea.
Introduciendo lo necesario en esa función para que añada ese texto a un archivo log, puede servir para que el usuario que obtiene el error, me lo remita y saber, al menos, qué fué lo último que hizo y funcionó. Ya digo que tengo el programa plagado de cw que me sirve cuando voy desarrollándolo y haciendo pruebas.

Supongo que lo mejor es que el programa borre el log al cerrar el programa normalmente, ya que no será necesario, y lo cree nuevo al iniciar el programa. Lo que pasa (estoy pensando) es que si se cierra el programa repentinamente, por error, estará el log (ya que no se ha eliminado al cerrarse el programa de manera controlada), pero al abrir una nueva sesión, se creará encima el nuevo archivo,.... no sé si es la manera correcta.


Respecto a sacar las funciones, creo que de momento lo dejaré todo dentro, porque es probable que me lie con las variables e intente duplicarlas sin darme cuenta.

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 »

¡Entonces casi lo tienes! Incluso tienes la variable $DebugIt para saber si estás en modo depuración.
Lo que puedes hacer es que en modo debug mande al archivo, y si no haces el consolewrite que tienes, que sólo verás en Scite.
Para que no afecte al usuario lo que puedes hacer es que por defecto no esté activado el debug, y que cuando tenga problemas le dices que lo ponga, por ejemplo ejecutándolo desde un shell o un acceso directo con un parámetro que lo active, tipo:
MiBiciPublica /debug

La otra es que guardes varios archivos de debug, por ejemplo, al empezar si existe copias "MiBiciPublica_2.log" a "MiBiciPublica_3.log", y si existe copias "MiBiciPublica_1.log" a "MiBiciPublica_2.log". Y en el programa reseteas "MiBiciPublica_1.log" y escribes en él. De esta manera por ejemplo tendrías siempre los 3 últimos logs.

Y vaya, hay otras maneras, como añadir fecha y hora al nombre de log, con lo que no sobreescribes, pero entonces hay que limpiarlos periódicamente. Esto puede ser útil junto con el parámetro /debug, así los log no se machacan cuando usas el debug.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
barjola
Mensajes: 16
Registrado: 13 Ago 2008, 18:53

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por barjola »

Hola, estaba intentando modificar el programa para agregar la ciudad de badajoz, pero no me deja compilar... me da este error:

Código: Seleccionar todo

C:\Users\Win7\Desktop\BadaBicis\includes\WinHttp.au3(1929,63) : ERROR: StringToASCIIArray(): undefined function.
	Local $aData = StringToASCIIArray($sData, Default, Default, 2)
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Users\Win7\Desktop\BadaBicis\MiBiciPublica.au3(801,90) : ERROR: InetRead(): undefined function.
				$sFile=InetRead("http://"&$webServicioBicisLeida&"/localizaciones/localizaciones.php")
				~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Users\WinServer7\Desktop\BadaBicis\MiBiciPublica.au3 - 2 error(s), 0 warning(s)

y nose porque es... ¿alguien me puede ayudar?
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por jamaro »

Hola Barjola:

Lo principal es saber cómo se ofrecen los datos de bicicletas de la ciudad de Badajoz. El programa, actualmente, cubre ciudades con distintos sistemas de préstamo de bicicletas, y cada uno de ellos funciona de una manera diferente. Incluso dentro de un mismo sistema, alguna ciudad ha optado por una manera de proporcionar los datos, distinta al resto, como puede ser el caso de Barcelona, dentro del sistema de ClearChannel.

En el programa se utiliza una manera de recoger los datos según el sistema de préstamos y, por prueba-error, se ha ido adaptando la recogida de datos para las ciudades que no siguen el estándar de su sistema o empresa que lo facilita.

Con lo de prueba-error me refiero a que después de "descubrir" cómo ofrece los datos una determinada empresa, al probar con una ciudad en concreto (de ese mismo servicio/empresa) se han obtenido errores (como el que comentas en tu mensaje) y ha habido que adaptar el modo de recoger los datos a esa ciudad en concreto.

Por ejemplo, hay ciudades que tienen el número de estación incluido en el nombre: 345 - Calle de Colón; otras que ofrecen el número de bicicletas libres y el número de bornetas libres, otros sólo el número de bicicletas libres,....

Todas esas diferencias de datos hace que el programa si está buscando bicicletas y bornetas libres de un error al encontrar bicicletas, pero no bornetas,...

Este programa nació para controlar las bicicletas libres de una única estación (cerca de casa) y poco a poco se ha ido ampliando su cobertura, pero hay cosas que sólo se pueden modificar manualmente desde el código.

Tengo pendiente hacer (que me servirá para mí para el futuro) una especie de "manual" describiendo cómo se obtienen los datos de cada una de las páginas.

Barjola, si te parece, vemos cómo funciona la página de préstamo de bicicletas de Badajoz e intentamos incluirla. Empecemos por conocer el enlace a la web oficial del sistema de préstamo de bicicletas de Badajoz y saber qué datos ofrecen y cómo los ofrecen.

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

Re: MiBiciPublica (monitorizador de bicicletas públicas)

Mensaje por jamaro »

Barjola, hola de nuevo:

Hemos tenido suerte, no sé cómo has modificado el programa y dónde te daba el error, pero he visto que el sistema de préstamo de bicicletas de Badajoz es de OnRoll y sigue la misma metodología que el resto de ciudades de este sistema.

Se ha añadido fácilmente la ciudad de Badajoz al programa simplemente añadiendo a la variable

Global $webServic_OnRoll=

el texto siguiente:

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

Cuidando que quede entre símbolos | que son los que se utiliza para crear luego una matriz con los nombre de las ciudades y permitirá, entre otras cosas, mostrarlas en los desplegables.

Espero que te sea de utilidad y aprovecho para subir la versión modificada al primer mensaje.

Salu2

-------------------------
EDITO: Viendo que hay más ciudades de un mismo sistema de las incluidas en el programa y que éstas se introducen actualmente de manera manual, sería interesante saber si hay alguna página donde se listen las ciudades de un determinado sistema y así hacer que el programa cargue todas las ciudades.

Intento explicarme:
Como podéis ver, algunos sistemas como el de OnRoll ofrecen los datos siempre de la misma manera y la URL de la página principal es del mismo formato:

CIUDAD.onroll.info

Si hubiera alguna página donde se indique las ciudades de ese sistema, en lugar de introducirlas manualmente en el código del programa (o en un archivo de texto externo), se podría hacer una función dentro del programa que lo primero que hiciera fuera actualizar su lista de ciudades comprobando ésta en la web.

Se me ocurre, tomando como ejemplo el sistema de JcDecaux: http://www.jcdecaux.com/en/Innovation-D ... yclocity-R

Como podéis ver, hay una lista con las ciudades y el enlace a su página principal, y si vemos nuestro programa, hemos metido hasta el momento las ciudades y URL manualmente en la variable correspondiente $webServic_JcDecaux utilizamos esos mismos nombres y URL:

Código: Seleccionar todo

Global $webServic_JcDecaux="España - Valencia [www.valenbisi.es]|España - Sevilla [www.sevici.es]|España - Santander [www.tusbic.es]|France - Paris [www.velib.paris.fr]|France - Amiens [www.velam.amiens.fr]|France - Aix-en-Provence [www.vhello.fr]|France - Besançon [www.velocite.besancon.fr]|France - Nancy [www.velostanlib.fr]|France - Marseille [www.levelo-mpm.fr]|... ... ..."
(Ahora me acabo de dar cuenta de que han incluido Viena, pero, al contrario que Onroll, JcDecaux no sigue el mismo patrón para todas las ciudades.)

Volviendo a la razón de este "EDITO", sería interesante conocer la lista de ciudades de un sistema para que se actualizara en el programa automáticamente,sin necesidad de estar pendiente de las novedades y de tener que introducirlo manualmente. Cosa que en el caso de OnRoll sería suficiente con saber la ciudad, ya que es la que forma la URL principal.

(No se si me he explicado, o lo he liado más) :smt003

EDITO 2: Buscando en Google de esta manera:

site:onroll.info

Salen muchas entradas. Después de haber estado añadiendo al programa a mano unas cuantas ciudades, en la tercera o cuarta página de resultados me he encontrado este bonito enlace:

http://mapa.onroll.info/

y pulsando sobre "ver mapa más grande" nos lleva a:

http://maps.google.es/maps/ms?hl=es&ie= ... urce=embed

Donde podemos obtener muy fácilmente todas CIUDAD.onroll.info que comentaba en el EDITO anterior :smt026
Responder