RkBlog

Hardware, programming and astronomy tutorials and reviews.

Wyszukiwarka google w pylons

Opis prostej aplikacji we frameworku Pylons wykorzystującej moduł web_search do wyszukiwania danych w Google.

Naszym zadaniem będzie stworzenie prostej wyszukiwarki korzystającej z google i innych wyszukiwarek. Ze strony oregonstate.edu/~barnesc/web_search/ pobieramy plik web_search.py.
Stosowanie tego modułu jest bardzo proste. W tym samym katalogu, w którym znajduje się web_search.py stwórz plik o kodzie:
from web_search import google
for (name, url, desc) in google('python', 20):
	print name, url
I uruchom. W konsoli pojawią się nazwy stron i linki. Moduł obsługuje różne wyszukiwarki - 'ask', 'dmoz', 'excite', 'google', 'msn', 'yahoo'. Wykorzystamy go do stworzenia pylonsowej wyszukiwarki.
Notka: trzeba zmodyfikować moduł by dało się stosować polskie znaki. Znajdź w pliki:
return urllib.quote_plus(s.encode('utf-8'))
i zamień na
return urllib.quote_plus(s)


Stwórz nowy projekt:
paster create --template=pylons searchengine
I umieść web_search.py w katalogu lib. Utwórz kontroler (controllers/) o nazwie search.py o kodzie:
from searchengine.lib.base import *
from searchengine.lib.web_search import *

class SearchController(BaseController):

    def index(self):
        return render_response('/index.myt')
    def result(self):
        c.result = google(request.params['term'], 10)
	return render_response('/result.myt')
Na początku importujemy elementy frameworka:
from searchengine.lib.base import *
A następnie moduł web_search:
from searchengine.lib.web_search import *
Gdzie searchengine to nazwa projektu. Następnie definiujemy klasę:
class SearchController(BaseController):
Gdzie SearchController to [NAZWA_PLIKU]Controller - tj. nazwa pliku zaczynająca się z dużej litery (a u nas to search.py). Następnie definiujemy dwie metody - index na formularz i result na wyniki. Kod:
render_response('/index.myt')
Zwróci wykonany szablon. index.myt będzie szablonem zawierającym formularz wyszukiwania a result.myt szablonem wyświetlającym wyniki.
W metodzie result widzimy:
request.params['term']
request.params['nazwa pola'] zwróci wartość z podanego pola wysłanego formularza. Zmienn c.result (c.cośtam) to zmienna dostępna w szablonie, który jest wykonywany i wysyłany. Do szablonu trafia zmienna przechowująca listę wyników.
Szablon index.myt zawiera kod samego formularza:
<% h.form(h.url(action="result")) %>
<% h.text_field("term") %>
<% h.submit("Search") %>
<% h.end_form() %>
Pod zmienną h dostępne są webhelpers czyli pomocniki. My używamy h.url do robienia linków (dokumentacja) oraz zestawu tagów do generowania formularzy (dokumentacja)
Szablon result.myt wygląda tak:
<& index.myt &>
<hr>
%for (name, url, desc) in c.result:
%	m.write('<a href="' + url +'">' + name + '</a><br />'+ desc + ' [' + url +']<br /><br />')
% #end for
Wyświetla on wyniki wyszukiwania. Na samym początku korzystamy ze zdolności myghty do dołączania (dziedziczenia) szablonów. Dołączamy szablon index.myt by mieć na początku formularz umożliwiający dalsze wyszukiwanie. Następnie pętla for wyświetlająca wpisy. m.write to metoda szablonów myghty do wypisywania czegoś w szablonie w danym miejscu (jak print dla konsoli)

To by było na tyle. Uruchamiamy nasz serwer poleceniem:
paster serve --reload development.ini
I wchodzimy na stronę: http://localhost:5000/search - powinien pojawić się formularz, a po wpisaniu frazy i wysłaniu - również wyniki:
darmowy hosting obrazków
RkBlog

14 July 2008;

Comment article