2. ¿Qué necesitamos para trabajar?
Un editor para Python. Por ejemplo, Geany.
Subversion: sistema de control de versiones.
Python ~2.6.2.
Elegir un buscador.
3. 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
4. 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.
5. 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
6. Clase NombreBuscador (I)
Hereda de Result y posiblemente también de
ImageResult:
class Result():
def __init__(self, name, url):
self.name = name
self.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 "%sn%sn%sn" % (self.name, self.url, self.thumbnail)
7. 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)
8. 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" % n
str += "%s" % self.resultList[n]
return str
def search(self, search_terms):
return self.resultList
def add(self, entry):
pass
9. 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)
10. 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
11. 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
))
12. 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