Partez pour plus tard.
--Il y a peu de matériaux pour Python3
Pour les raisons ci-dessus, j'ai eu du mal dans un endroit gaspillé ...
«Puisqu'il s'agit d'une recherche sur le Web, j'ai pensé qu'il fallait l'implémenter en tant qu'application Web.
Consultez cet article pour obtenir un exemple de code pour effectuer une recherche à l'aide de l'API de recherche personnalisée. http://qiita.com/items/92febaf8bbea541b1e36
Cependant, l'exemple est le code de la série Python2, donc certaines modifications sont nécessaires.
Le processus de récupération du json du résultat de la recherche est défini comme une fonction appelée simple_search (requête) dans googlesearch.py.
googlesearch.py
import urllib
import urllib.request
import urllib.parse
import json
def simple_search(query):
QUERY = query
API_KEY = 'AIzaSyBdhBWUc5W3Aco3YGPwOlS_rYM0LENl_jo'
NUM = 1
url = 'https://www.googleapis.com/customsearch/v1?'
params = {
'key': API_KEY,
'q': QUERY,
'cx': '013036536707430787589:_pqjad5hr1a',
'alt': 'json',
'lr': 'lang_ja', }
start = 1
for i in range(0, NUM):
params['start'] = start
request_url = url + urllib.parse.urlencode(params)
try:
response = urllib.request.urlopen(request_url)
json_body = json.loads(response.read().decode('utf-8'))
items = json_body['items']
except:
print('Error')
return items
Placez ce fichier dans le même répertoire que app.py. De plus, ce code ne prend qu'une seule page, soit 10 résultats de recherche. Si vous voulez en prendre plus, changez la valeur de params ['start'] et tournez la boucle for.
Attention en Python3. Certaines bibliothèques standard ont changé depuis Python 2.
--urllib.urlopen (url) est maintenant urllib.request.urlopen (url). --urllib.urlencode (params) est maintenant urllib.parse.urlencode (params).
Utilisez également votre propre API_KEY. Vous pouvez obtenir la clé API de votre compte Google à l'adresse https://code.google.com/apis/console/.
Bottle écrit le traitement correspondant à l'URL et à la requête http, c'est-à-dire le code du contrôleur, dans app.py.
Cette fois, j'ai utilisé Mako comme modèle utilisé pour la partie vue. Placez les modèles utilisés par Mako dans le répertoire static / templates.
app.py
from bottle import Bottle, route, run, static_file, request
from mako.template import Template
import googlesearch
import pdb
template = Template(filename='static/templates/index.tmpl')
app = Bottle()
@route('/static/:path#.+#', name='static')
def static(path):
return static_file(path, root='static')
@route('/results')
def results_get():
return template.render(items='')
@route('/results', method='POST')
def results():
query = request.forms.decode().get('query')
items = googlesearch.simple_search(query)
return template.render(items=items)
@route('/')
def greet():
return template.render(items='')
run(host='localhost', port=1234, debug=True)
Le point est la fonction de @route ('/ results', method = 'POST').
query = request.forms.decode().get('query')
Être. Si vous souhaitez effectuer une recherche en japonais, vous avez besoin de decode (). Cette méthode est trouvée dans Stackoverflow, mais s'il y a peu de matériel japonais Il est triste que cela prenne beaucoup de temps et d'efforts pour lire le manuel en anglais et rechercher le débordement de pile lors de ce type de traitement. Les programmeurs anglophones ne pensent pas aux caractères multi-octets et c'est difficile.
Affichez les résultats de la recherche avec la fonction @route ('/ results', method = 'POST'). Je pense qu'il existe un moyen de rechercher avec la méthode GET au lieu de POST, mais je ne sais pas comment le faire et je pense que POST est correct. Et du côté vue.
static/templates/index.tmpl
#coding: utf-8
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Subtask Search</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Loading Bootstrap -->
<link href="static/css/bootstrap.css" rel="stylesheet">
<!-- Loading Flat UI -->
<link href="static/css/flat-ui.css" rel="stylesheet">
<link rel="shortcut icon" href="static/images/favicon.ico">
<!-- HTML5 shim, for IE6-8 support of HTML5 elements. All other JS at the end of file. -->
<!--[if lt IE 9]>
<script src="static/js/html5shiv.js"></script>
<![endif]-->
</head>
<body>
<div class="container">
<div class="demo-headline">
<a href="/">
<h1 class="demo-logo">
Subtask Search
</h1>
</a>
</div> <!-- /demo-headline -->
<div class="span4 offset4">
<form action="/results" method="post">
<input type="text" name="query" value placeholder="Input your task" class="span4 offset4" />
<input type="submit" value="Search" />
</form>
</div>
<div class="span8 offset2">
<ul class="unstyled">
% for item in items:
<li>
<a href= ${item['link']}>
${item['title']}
</a>
</li>
% endfor
</ul>
</div>
</div> <!-- /container -->
<!-- Load JS here for greater good =============================-->
<script src="static/js/jquery-1.8.2.min.js"></script>
<script src="static/js/jquery-ui-1.10.0.custom.min.js"></script>
<script src="static/js/jquery.dropkick-1.0.0.js"></script>
<script src="static/js/custom_checkbox_and_radio.js"></script>
<script src="static/js/custom_radio.js"></script>
<script src="static/js/jquery.tagsinput.js"></script>
<script src="static/js/bootstrap-tooltip.js"></script>
<script src="static/js/jquery.placeholder.js"></script>
<script src="http://vjs.zencdn.net/c/video.js"></script>
<script src="static/js/application.js"></script>
<!--[if lt IE 8]>
<script src="static/js/icon-font-ie7.js"></script>
<script src="static/js/icon-font-ie7-24.js"></script>
<![endif]-->
</body>
</html>
J'ai utilisé Flat UI pour cet index.tmpl pour le rendre joli. css et js sont téléchargés depuis Flat UI et placés dans le répertoire statique.
Mako travaille
% for item in items:
<li>
<a href= ${item['link']}>
${item['title']}
</a>
</li>
% endfor
Seule la partie de. app.py
return template.render(items=items)
Donc, j'ai mis les éléments avec le résultat de simple_search dans les éléments de Mako et rendu cette vue.
Tu peux le faire.
Il est difficile de gérer les caractères multi-octets. Cela aurait dû être plus facile avec Python3, mais c'est toujours difficile. C'est encore plus difficile car il n'y a pas beaucoup de matériaux japonais. Je veux que tout le monde partage plus de savoir-faire.
https://github.com/katryo/google_simple_search J'ai laissé l'application entière. S'il vous plaît, jetez un oeil.
Recommended Posts