Erstellen Sie eine Anwendung, die nur mit der Google Custom Search-API mit Python 3.3.1 in Bottle sucht

Geh für spätere Leute.

Aus den oben genannten Gründen hatte ich es schwer an einem verschwenderischen Ort ...

Inhaltsverzeichnis

  1. Grund für diese Kombination
  2. Beispiel für eine benutzerdefinierte Suche
  3. Das zu durchsuchende Teil mit der benutzerdefinierten Suche
  4. Der Teil, der die Antwort als Webanwendung zurückgibt
  5. Fertigstellung
  6. Impressionen
  7. Quellcode

Grund für diese Kombination

Gründe für Python 3

Grund für die Flasche

―― Da es sich um eine Recherche im Web handelt, dachte ich, dass es als Webanwendung implementiert werden sollte.

Beispiel für eine benutzerdefinierte Suche

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 Teil, der mit der benutzerdefinierten Suche gesucht werden soll

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.

wichtiger Punkt

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/.

Der Teil, der die Antwort als Webanwendung zurückgibt

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.

Komplett

Subtask Search.jpg Du kannst das.

Impressionen

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.

Quellcode

https://github.com/katryo/google_simple_search Ich habe die gesamte Bewerbung in belassen. Bitte schau es dir an.

Recommended Posts

Erstellen Sie eine Anwendung, die nur mit der Google Custom Search-API mit Python 3.3.1 in Bottle sucht
Erstellen Sie eine Anwendung mit der Spotify-API
Erstellen Sie mithilfe der COTOHA-API eine App, die gut mit Berichten von Personen funktioniert
So senden Sie automatisch E-Mails mit Anhängen mithilfe der Google Mail-API in Python
Verwenden Sie die Such-API der National Parliament Library in Python
Ich habe mit Lambda eine App erstellt, die LINE über die Qiita-API über "Likes" informiert.
Erstellen Sie mit Python3 + Falcon eine REST-API, die die aktuelle Uhrzeit zurückgibt
Versuchen Sie es mit der Wunderlist-API in Python
Versuchen Sie, die Kraken-API mit Python zu verwenden
Tweet mit der Twitter-API in Python
[Python] Erstellen Sie schnell eine API mit Flask
Bildersammlung mit der benutzerdefinierten Such-API von Google
Erstellen Sie eine Anwendung mit Clean Architecture, während Sie DI + mock in Python verwenden
Erstellen Sie mit dem Python-Anforderungsmodul einen Datensatz mit Anhängen in KINTONE
Erstellen Sie eine App, die Schüler mit Python errät
Versuchen Sie es mit der BitFlyer Ligntning API in Python
Erstellen Sie ein Bild mit Zeichen mit Python (Japanisch)
Erstellen Sie schnell einen API-Server mit Python + Falcon
Versuchen Sie, die DropBox Core-API mit Python zu verwenden
Ich möchte eine API erstellen, die ein Modell mit einer rekursiven Beziehung im Django REST Framework zurückgibt
Erstellen Sie eine Anwendung, die Formulare mithilfe von Python / Flask anstelle von DB eingibt, anzeigt und löscht.
Laden Sie eine JPG-Datei mit der Google Drive-API in Python hoch
Grundeinstellungen bei Verwendung der foursquare-API mit Python
Erstellen Sie mit PyInstaller eine exe-Datei, die in einer Windows-Umgebung ohne Python funktioniert
Eine Geschichte über einen Python-Anfänger, der versucht, Google-Suchergebnisse mithilfe der API abzurufen
Erstellen Sie eine Tweet-Heatmap mit der Google Maps-API
So erstellen Sie einen Bild-Uploader mit Bottle (Python)
Eine Geschichte, bei der ich das Teilungsergebnis (%) in HTML mit einer Anwendung mit Django anzeigen wollte [Anfänger lernt Python mit einem Nachschlagewerk in einer Hand]
Erstellen einer API, die mit BERT im Django REST-Framework negativ-positive Inferenzergebnisse zurückgibt
Lesen Sie englische Sätze, indem Sie mit Python auf die Google Übersetzungs-API klicken, ohne das verteilte Modul zu verwenden
Erstellen wir ein Skript, das sich bei Ideone.com in Python registriert.
Grundlegende Authentifizierung mit verschlüsseltem Passwort (.htpasswd) mit Flasche in Python
Erstellen Sie mit dem Blender 2.80-Skript eine beispielhafte spielähnliche Phase
Skripte, die bei der Verwendung von Bottle in Python verwendet werden können
Erstellen Sie mit AWS SAM schnell eine API mit Python, Lambda und API Gateway
Google sucht mit Python nach der Zeichenfolge in der letzten Zeile der Datei
Stellen Sie die umgekehrte Geokodierung auf Japanisch mit der Python Google Maps-API bereit
Spielen Sie mit der YouTube Data API v3 mit dem Google API Python Client
Erstellen Sie eine API mit Django
Rufen Sie die API mit python3 auf.
Wenn Sie der Meinung sind, dass die Person, die Sie mit pip eingegeben haben, nicht funktioniert → Verwenden Sie python3 zufällig?
Eine einfache Möglichkeit, die Amazon-Produkt-API in Python aufzurufen
Erstellen Sie mit turicreate eine API, die Daten aus einem Modell zurückgibt
Erstellen Sie mit der AWS-API einen Alias für Route53 zu CloudFront
[Python / Django] Erstellen Sie eine Web-API, die im JSON-Format antwortet
[Ev3dev] Erstellen Sie ein Programm, das das LCD (Bildschirm) mit Python erfasst
[LINE Messaging API] Erstellen Sie einen BOT, der eine Verbindung zu jemandem mit Python herstellt
Ich habe versucht, eine ToDo-App mit einer Flasche mit Python zu erstellen
Lösen Sie Teilsummenprobleme mit der vollständigen Suche in Python
[SEO] Flow / Beispielcode bei Verwendung der Google Analytics-API in Python
Abrufen der arXiv-API in Python
Erstellen Sie Awaitable mit der Python / C-API
Klicken Sie in Python auf die Sesami-API
[Python] Klicken Sie auf die Google Übersetzungs-API
[Python3] Google übersetzt Google Übersetzung ohne Verwendung von API
Klicken Sie mit Python auf die Etherpad-Lite-API