Google自定义搜索打造站内搜索

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)