Como hacer un módulo para Visuse

12
Desarrollar un módulo para Visuse José Luis López Pino http://visuse.wordpress.com

description

Más información sobre el proyecto en: http://visuse.wordpress.com

Transcript of Como hacer un módulo para Visuse

Page 1: Como hacer un módulo para Visuse

Desarrollar un módulo para Visuse

José Luis López Pino

http://visuse.wordpress.com

Page 2: Como hacer un módulo para Visuse

¿Qué necesitamos para trabajar?

Un editor para Python. Por ejemplo, Geany. Subversion: sistema de control de versiones. Python ~2.6.2. Elegir un buscador.

Page 3: Como hacer un módulo para Visuse

Empezamos

Instalamos Python Ubuntu: sudo apt-get install python2.6 Windows: descargar de python.org la 2.6.4.

Alta en la forja de rediris. Descargamos el proyecto:

svn checkout https://forja.rediris.es/svn/cusl4-visuse

Los módulos los tenemos en trunk/visuse/modulos Añadimos la clase a classes.py Escribimos el módulo en Modulo_Nombre.py

Page 4: Como hacer un módulo para Visuse

Lo que hace un módulo:

Obtenemos los datos del buscador (usando XML, JSON o lo que corresponda).

Creamos una instancia de la clase por cada resultado.

Creamos una lista de resultados. Mostramos la lista en pantalla para comprobar

que no hay problemas.

Page 5: Como hacer un módulo para Visuse

Creando el módulo

Creamos Modulo_NombreBuscador.py Contendrá la definición de dos clases:

Clase NombreBuscador Heredará de Result y posiblemente de otro tipo

(como ImageResult) Habrá una instancia por cada resultado. Almacena los atributos relevantes del resultado.

SearchNombreBuscador Heredará de SearchModule. Realiza todo el proceso de búsqueda.

La configuración se mantiene en config.py

Page 6: Como hacer un módulo para Visuse

Clase NombreBuscador (I)

Hereda de Result y posiblemente también de ImageResult:

class Result():def __init__(self, name, url):

self.name = nameself.url = url

def __str__(self):return self.name + "\n" + self.url + "\n"

class ImageResult():def __init__(self, name, url, thumbnail):

Result.__init__(self, name, url)self.thumbnail = thumbnail

def __str__(self):return "%s\n%s\n%s\n" % (self.name, self.url, self.thumbnail)

Page 7: Como hacer un módulo para Visuse

Clase NombreBuscador (II)

Únicamente tiene un ”constructor”, que inicializa los parámetros necesarios:

class Wikicommons(Result, ImageResult):def __init__(self, name, url, thumbnail):

ImageResult.__init__(self, name, url, thumbnail)

Page 8: Como hacer un módulo para Visuse

Clase SearchNombreBuscador (I)

Hereda de SearchModule:class SearchModule():

def __init__(self):self.resultList = []

def __str__(self):str = ""for n in range(0, len(self.resultList)):

str += "===== %d =====\n" % nstr += "%s" % self.resultList[n]

return str

def search(self, search_terms):return self.resultList

def add(self, entry):pass

Page 9: Como hacer un módulo para Visuse

Clase SearchNombreBuscador (II)

Obligatoriamente debe incluir un ”constructor”. En un principio basta con que éste llame al

”constructor” de la clase de la que hereda (ModuleSearch):

def __init__(self):SearchModule.__init__(self)

Page 10: Como hacer un módulo para Visuse

SearchNombreBuscador (III)

El método search se comunica con el buscador en el protocolo que corresponda (Json, XML, etc.) y obtiene el listado de resultados.

def search(self, search_terms):gd_client = gdata.photos.service.PhotosService()

photos = gd_client.SearchCommunityPhotos(search_terms, limit=config.picasa_limit)

for iterador in photos.entry:print "kkk"self.add(iterador)

return self.resultList

Page 11: Como hacer un módulo para Visuse

SearchNombreBuscador (IV)

El método add trata cada uno de los resultados llamando al constructor de la clase que creamos anteriormente:

def add(self, entry):

self.resultList.append(Picasa( \ entry.title.text, \

entry.content.src, \entry.media.thumbnail[-1].url \

))

Page 12: Como hacer un módulo para Visuse

Probando el módulo

En el diccionario modules_dictionary del fichero config.py debemos añadir un nuevo elemento para nuestro módulo.

Se puede ejecutar un simple test mediante: python manage.py test

Para probarlo visualmente, en el template inicial2.html añadimos la key del diccionario anterior al vector searchEngineList Acceder a http://127.0.0.1:8000/prueba/rock