python discuz搜索api_Python + Bottle + 谷歌搜索Api 实现简单搜索引擎

1.运行环境

python3

centos7

2.Bottle的使用

使用bottle主要是因为它仅用python自带的库即可实现对web的搭建。

bottle源码分析

bottle使用教程

3.代码

#app.py

from bottle import route, run ,Bottle ,error ,static_file ,request

from bottle import view , template

from app import search

from data import db

import json

#import views

#实例化一个app

app = Bottle()

#读取api数据

data = db.data()

data.read()

@app.route('/')

@view("home")

def index():

"""

首页

"""

return #template('home')

@app.route('/')

@view("search")

def query(query):

"""

执行查询操作:/关键词

"""

global data

key = data.touch()

res = search.query(query,key)

res = json.loads(res)

return res

@app.route('/api/')

def apiQuery(query):

"""

查询接口的api,返回json数据

"""

global data

key = data.touch()

res = search.apiQuery(query,key)

#res = json.loads(res)

return res

@app.route('/man/getall')

def manGetall():

"""

获取所有api信息

"""

global data

#res = json.loads(res)

list = data.getAll()

res = ''

for i in list:

res = res + i[0] + " " + i[1] + "
"

print(res)

return res

@app.route('/search')

@view("search")

def query2():

"""

另一种搜索传参方式:q=关键词

"""

global data

key = data.touch()

q = request.query.q

#print(q)

res = search.query(q,key)

res = json.loads(res)

return res

@error(404)

def error404(error):

"""

404

"""

return 'Nothing here, sorry'

@app.route('/static/')

def server_static(filename):

"""

静态文件返回数据

"""

#print("***")

#filename = filename + ".ico"

return static_file(filename, root='./static')

app.run(host='localhost', port=9090)

#search.py

import urllib

import urllib.request

from urllib import parse

import json

#指定站点搜索:siteSearch

def query(q,key):

url = 'https://www.googleapis.com/customsearch/v1?cx=012564558536199079522:s1cewzl004i&safe=active&key='

q = parse.quote(q)

url = url + key + "&q=" + q

resB = urllib.request.urlopen(url)

res = resB.read().decode('utf-8')

return res

def apiQuery(q,key):

url = 'https://www.googleapis.com/customsearch/v1?cx=012564558536199079522:s1cewzl004i&safe=active&key='

q = parse.quote(q)

url = url + key + "&q=" + q

resB = urllib.request.urlopen(url)

res = resB.read().decode('utf-8')

return res

#db.py

class data:

def read(self):

fp = open("data//data.txt",encoding="utf-8")

'''

#方法一

line = fp.readline()

print(line)

key = []

i = 0

while(line):

str = line.split()

#print("***")

#print(str)

key.append(str)

line = fp.readline()

i = i + 1

self.key = key

fp.close()'''

#方法二

key = []

str = fp.read()

tmp = str.split("\n")

for i in range(len(tmp)):

key.append(tmp[i].split())

self.key = key

fp.close()

#print(key)

def write(self):

"""

保存api key

"""

key = self.key

fp = open("data//data.txt","w+")

for i in range(len(key)):

fp.writelines(key[i][0]+" "+key[i][1])

fp.close()

def touch(self):

"""

随机获取一个api key

"""

key = self.key

k = 0

for i in range(len(key)):

if(key[k][1]>key[i][1]):

k = i

x = key[k][1]

key[k][1] = (str)(1 + (int)(x))

#key[k][i] += 1

return key[k][0]

def getAll(self):

"""

获取所有api key

"""

return self.key

def add(self,list):

"""

添加api key

"""

self.key.append(list)

def delOne(self,index):

"""

删除一个 api key

"""

self.key.pop(index)

#home.tpl

冒号--www.mho.cx

#search.tpl

冒号:搜索->

{{queries['request'][0]['searchTerms']}}

%if queries['request'][0]['totalResults']!="0":

%for i in items:

{{i['title']}}

{{i['snippet']}}

{{i['displayLink']}}

%end

%else:

Sorry , no found

%end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值