Geh für spätere Leute.
Aus den oben genannten Gründen hatte ich es schwer an einem verschwenderischen Ort ...
―― Da es sich um eine Recherche im Web handelt, dachte ich, dass es als Webanwendung implementiert werden sollte.
In diesem Artikel finden Sie Beispielcode für die Suche mit der benutzerdefinierten Such-API. http://qiita.com/items/92febaf8bbea541b1e36
Das Beispiel ist jedoch Code der Python2-Serie, sodass einige Änderungen erforderlich sind.
Der Vorgang des tatsächlichen Abrufs des JSON des Suchergebnisses wird als Funktion namens simple_search (Abfrage) in googlesearch.py definiert.
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
Legen Sie diese Datei im selben Verzeichnis wie app.py ab. Außerdem nimmt dieser Code nur eine Seite ein, dh 10 Suchergebnisse. Wenn Sie mehr nehmen möchten, ändern Sie den Wert von params ['start'] und drehen Sie die for-Schleife.
Achtung in Python3. Einige Standardbibliotheken wurden von Python 2 geändert.
--urllib.urlopen (url) ist jetzt urllib.request.urlopen (url). --urllib.urlencode (params) ist jetzt urllib.parse.urlencode (params).
Verwenden Sie auch Ihr eigenes API_KEY. Den API-Schlüssel für Ihr Google-Konto erhalten Sie unter https://code.google.com/apis/console/.
Bottle schreibt die Verarbeitung entsprechend der URL- und http-Anforderung, dh dem Code des Controllers, in app.py.
Dieses Mal habe ich Mako als Vorlage für den Ansichtsteil verwendet. Legen Sie die von Mako verwendeten Vorlagen im Verzeichnis static / templates ab.
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)
Der Punkt ist die Funktion von @route ('/ results', method = 'POST'),
query = request.forms.decode().get('query')
Sein. Wenn Sie auf Japanisch suchen möchten, benötigen Sie decode (). Diese Methode ist in Stackoverflow gefunden, aber wenn es nur wenige japanische Materialien gibt Es ist traurig, dass es viel Zeit und Mühe kostet, das englische Handbuch zu lesen und nach einem Stapelüberlauf zu suchen, wenn diese Art der Verarbeitung durchgeführt wird. Englisch sprechende Programmierer denken nicht an Multi-Byte-Zeichen und es ist schwierig.
Zeigen Sie Suchergebnisse mit der Funktion @route ('/ results', method = 'POST') an. Ich denke, es gibt eine Möglichkeit, mit der GET-Methode anstelle von POST zu suchen, aber ich weiß nicht, wie es geht, und ich denke, dass POST in Ordnung ist. Und auf der Ansichtsseite.
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>
Ich habe Flat UI für diese index.tmpl verwendet, damit sie gut aussieht. CSS und JS werden von Flat UI heruntergeladen und in das statische Verzeichnis gestellt.
Mako arbeitet
% for item in items:
<li>
<a href= ${item['link']}>
${item['title']}
</a>
</li>
% endfor
Nur der Teil von. app.py.
return template.render(items=items)
Also habe ich die Elemente mit dem Ergebnis von simple_search in Makos Elemente eingefügt und diese Ansicht gerendert.
Du kannst das.
Es ist schwierig, mit Multi-Byte-Zeichen umzugehen. Mit Python3 hätte es einfacher sein sollen, aber es ist immer noch schwierig. Es ist noch schwieriger, weil es nicht viele japanische Materialien gibt. Ich möchte, dass jeder mehr Know-how teilt.
https://github.com/katryo/google_simple_search Ich habe die gesamte Bewerbung in belassen. Bitte schau es dir an.