Créez une application qui recherche uniquement à l'aide de l'API de recherche personnalisée Google avec Python 3.3.1 dans Bottle

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

table des matières

  1. Raison de cette combinaison
  2. Exemple de recherche personnalisée
  3. La pièce à rechercher à l'aide de la recherche personnalisée
  4. La partie qui renvoie la réponse en tant qu'application Web
  5. Achèvement
  6. Impressions
  7. Code source

Raison de cette combinaison

Raisons de Python 3

Raison de la bouteille

«Puisqu'il s'agit d'une recherche sur le Web, j'ai pensé qu'il fallait l'implémenter en tant qu'application Web.

Exemple de recherche personnalisée

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.

La pièce à rechercher à l'aide de la recherche personnalisée

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.

point important

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

La partie qui renvoie la réponse en tant qu'application Web

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.

Achevée

Subtask Search.jpg Tu peux le faire.

Impressions

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.

Code source

https://github.com/katryo/google_simple_search J'ai laissé l'application entière. S'il vous plaît, jetez un oeil.

Recommended Posts

Créez une application qui recherche uniquement à l'aide de l'API de recherche personnalisée Google avec Python 3.3.1 dans Bottle
Créer une application à l'aide de l'API Spotify
Créez une application qui fonctionne bien avec les rapports des utilisateurs à l'aide de l'API COTOHA
Pour envoyer automatiquement des e-mails avec des pièces jointes à l'aide de l'API Gmail en Python
Utiliser l'API de recherche de la Bibliothèque du Parlement national en Python
J'ai créé une application avec Lambda qui notifie LINE de "j'aime" à l'aide de l'API Qiita.
Créer une API REST qui renvoie l'heure actuelle avec Python3 + Falcon
Essayez d'utiliser l'API Wunderlist en Python
Essayez d'utiliser l'API Kraken avec Python
Tweet à l'aide de l'API Twitter en Python
[Python] Créez rapidement une API avec Flask
Collection d'images à l'aide de l'API Google Custom Search
Créez une application avec une architecture propre tout en utilisant DI + mock en Python
Créer un enregistrement avec des pièces jointes dans KINTONE à l'aide du module de requêtes Python
Créez une application qui devine les étudiants avec Python
Essayez d'utiliser l'API BitFlyer Ligntning en Python
Créer une image avec des caractères avec python (japonais)
Créez rapidement un serveur API avec Python + Falcon
Essayez d'utiliser l'API DropBox Core avec Python
Je souhaite créer une API qui retourne un modèle avec une relation récursive dans Django REST Framework
Créez une application qui saisit, affiche et supprime des formulaires à l'aide de Python / Flask au lieu de DB.
Importez un fichier JPG à l'aide de l'API Google Drive en Python
Paramètres initiaux lors de l'utilisation de l'API foursquare avec python
Créez un fichier exe qui fonctionne dans un environnement Windows sans Python avec PyInstaller
Une histoire sur un débutant Python essayant d'obtenir des résultats de recherche Google à l'aide de l'API
Créez une carte thermique de tweet avec l'API Google Maps
Comment créer un téléchargeur d'image avec Bottle (Python)
Une histoire dont je voulais afficher le résultat de la division (%) sur HTML avec une application utilisant django [Débutant apprend python avec un livre de référence dans une main]
Création d'une API qui renvoie des résultats d'inférence négatifs-positifs à l'aide de BERT dans le framework Django REST
Lisez des phrases en anglais en accédant à l'API Google Translation avec Python sans utiliser le module distribué
Créons un script qui s'enregistre avec Ideone.com en Python.
Authentification de base avec mot de passe crypté (.htpasswd) avec bouteille en python
Créez un exemple de scène semblable à un jeu avec juste le script Blender 2.80
Scripts pouvant être utilisés lors de l'utilisation de Bottle en Python
Créez rapidement une API avec Python, lambda et API Gateway à l'aide d'AWS SAM
Google recherche la chaîne sur la dernière ligne du fichier en Python
Mettez en place le géocodage inversé en japonais avec l'API Python Google Maps
Jouez avec l'API de données YouTube v3 à l'aide du client Python de l'API Google
Créer une API avec Django
Appelez l'API avec python3.
Si vous pensez que la personne que vous mettez avec pip ne fonctionne pas → Utilisez-vous python3 par hasard?
Un moyen simple d'accéder à l'API produit Amazon en Python
Créer une API qui renvoie les données d'un modèle à l'aide de turicreate
Créez un alias pour Route53 vers CloudFront avec l'API AWS
[Python / Django] Créer une API Web qui répond au format JSON
[Ev3dev] Créez un programme qui capture LCD (écran) en utilisant python
[LINE Messaging API] Créez un BOT qui se connecte à quelqu'un avec Python
J'ai essayé de créer une application todo en utilisant une bouteille avec python
Résolvez les problèmes de somme partielle avec une recherche complète en Python
[SEO] Flux / exemple de code lors de l'utilisation de l'API Google Analytics en Python
Obtenir l'API arXiv en Python
Créer Awaitable avec l'API Python / C
Frappez l'API Sesami en Python
[Python] Accédez à l'API Google Translation
[Python3] Google translate google translation sans utiliser l'API
Accédez à l'API Etherpad-lite avec Python