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)