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=大菠萝

相关阅读:

相关下载:

 

版权声明:本文为benbenx原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/benbenx/archive/2008/11/08/1329642.html