Wyszukiwarka google w pylons
14 July 2008
Comments
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
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')
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() %>
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
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:

RkBlog
Comment article