Páginas

viernes, 10 de octubre de 2014

Desarrollo Online de un marcador de records para un juego (IV): En el cliente: Python


Desarrollo Online de un marcador de records para un juego (IV): En el cliente: Python 




Bien, una vez desarrollado el programa que estará en el servidor, hoy vamos a desarrollar el programa cliente. Este realmente estará incorporado como librería/módulo al juego.

¿con que lenguaje lo podemos hacer?
Con cualquiera que tenga la posibilidad de cargar páginas web y parsearla (ver nota 1), parsear es  obtener la información que nos interese. Lo voy a hacer con dos lenguajes: Python y Gambas3

En este artículo desarrollaré la forma de hacerlo con Python.

Datos del entorno de programación:
¿que versión de python he usado? 
Python2
¿que módulos/librerias necesitamos tener instalado? 
Tenemos que tener instalados los paquetes python-request y python-urllib3
Yo las he instalado usando el comando pip
$sudo apt-get install python-pip
$sudo pip install requests
(o  sudo pip install --upgrade requests, para actualizar la libreria)


El código que he realizado, lo he  programado y probado en la distribución gnu/linu  Linux Mint 17,  pero si tenéis los módulos instalado, lo podéis usar en cualquier sistema operativo, ya que Python es multiplataforma.

El código fuente lo podemos dividir varias zonas:
1) Importar los módulos necesarios



Nota: Si no tenemos instalados los módulos necesarios, saldrá este error cuando se intente ejecutar el programa:
import requests #hay que instalar el paquete.. python-request y python-urllib3
ImportError: No module named requests


2) Creamos una clase y el método leermarcador


3) Cargar el contenido de la página web en una lista:


Como veis uso la dirección http://www.marcadorjsbsan.hostinazo.com/marcador.php con la cual consigo los datos del marcador, si hay datos de los parametros usa la forma de pasar estos datos en la url: (http://www.marcadorjsbsan.hostinazo.com/marcador.php?jugador=DATOJUGADOR&pais=DATOPAIS&marcador=DATOPUNTUACION ) ,
lo que hacemos en enviar el nombre del jugador (DATOJUGADOR) , pais (DATOPAIS), y la puntuacion (DATOPUNTUACION).
Esta información la puedo poner usando  variables, para introducir los datos que el programa necesite.

La información que se devuelve (line) es una lista, con todo el contenido de la pagina web parseada.

4) Vamos a "limpiar" la lista de line


Limpiamos de los caracteres como los tabuladores y retornos de carro

5) Borrado de elementos extraídos no necesarios.
Si vemos la lista de elementos que se extrae de la página web, veremos (si se ha conectado correctamente) que el primer elemento es este: 'Connected successfully'
Este valor nos indica que la conexión se ha realizado correctamente y que podemos seguir leyendo los datos. En caso de que de error al borrarlo, querá decir que no se conecto. Para capturar este error, , usamos excepcciones (try.... excep..), y si ocurre paramos el programa.



6) Lectura de los datos, creando estructura de datos.


7) Muestra da datos.


En cada elemento de la lista "dato" se va almacenando el nombre del jugador, pais, y su puntuacion

Podemos hacer un pequeño código como ejemplo de uso:
En este codigo primero creamos un objeto marcador, luego llamamos al método leermarcador(), sin parametros para que nos muestre por consola el marcador Luego le pasamos los datos "pepe", pais "cub" y puntuacion "8", y los devuelve la variable "d" con los datos del marcador, que los escribirmos de nuevo en la consola.

Para ejecutarlo:
 $ python2 usandoleerweb.py
(tiene que estar en la misma carpeta el archivo leerweb.py)

Descarga de los archivos:

Salida por consola despues de ejecutar "usandoleerweb.py"
(Los resultados varian segun los datos almacenados en el servidor)



 Nota:
1) En linux tenemos la posibilidad de usar comandos del bash (por ejemplo, el wget), para descargarnos la pagina web, pasarlo a un archivo .html, y ya con el programa analizarlo. He preferido hacerlo con las herramientas o librerias propias que tenga el lenguaje de programación (Python y/o Gambas3)

Enlaces donde he encontrado la información:
http://python.majibu.org/preguntas/2699/extraccion-de-texto-plano-de-una-web-con-python-como


Nota: Enlace a indice del "Desarrollo Online": enlace