Google自定义搜索打造站内搜索
Google自定义搜索可以创建根据自身需求量身定做的搜索。默认提供Google Search Ajax API,基于这个API可以创建自己的站内搜索。不过只能使用JavaScript,并且灵活性也比较差。另外还提供了返回json格式的api,可以使 用的地址有两个。
http://ajax.googleapis.com/ajax/services/search/web?v=1.0&cx=[cx]&q=[keyword]
和
http://www.google.com/uds/GwebSearch?cx=[cx]&key=[key]&v=1.0&rsz=large&q=[keyword]
官方只介绍了前者,我采用的为后者。
在GAE框架里,使用simplejson可以很简单的操作json数据,进行序列化和反序列化。
过程:
1.声明两个类
#保存每条搜索结果
class searchItem():
title=""
url=""
description=""
#保存整个搜索结果
class serachReslut():
items=[]
count=len(items)
start=0
sc=0
keyword=""
prev=False
next=False
2.声明getSearch()方法
def getSearch(q,start=0): # q为关键字;start为起始搜索结果
q=urllib.quote(q) #将关键字编码
url= searchurl.substitute(q=q,start=start) #拼接搜索url
url=url.encode('utf-8') #url编码
data=urlfetch.fetch(url).content #利用uflfetch抓取搜索结果
data=simplejson.loads(data) #绑定json数据到data
s=serachReslut() #实例一个serachReslut
if data['responseData']['results']==[]:
s.items=None #如果没有搜索结果,返回None。
else:
results=data['responseData']['results']
s.start=start
s.keyword=urllib.unquote(q)
s.items=[]
for result in results: #遍历结果将数据保存到 s.items列表
item=searchItem()
item.title=result['title']
item.url=result['url']
item.description=result['content']
s.items.append(item)
s.sc=data['responseData']['cursor']['estimatedResultCount']#获取搜索结果数
if start>=8: #下一页,上一页处理。
s.prev='/search/?q=%s&s=%d' %(q,start-8)
if start<int(s.sc)-8:
s.next='/search/?q=%s&s=%d' %(q,start+8)
return s
这里,为了简单,并没有进行容错处理,以后会慢慢完善。
3.调用
def get(self):
q=self.request.get('q').encode('utf-8')
start=int(getinput(self, 's','0'))
template_value = {'search':getSearch(q,start),'q':q}
self.render('themes/benben/search.html', template_value)
这样一个完美的站内搜索就OK了。演示可以见顶部的搜索,或者查看http://www.119797.com/search/?q=大菠萝
相关阅读:
相关下载:
- google-search-api.py (1.8 KB)