[RUBY] Enregistrement facile des livres avec l'API et Rails de Google Livres

environnement

ruby 2.5.8 rails 5.2.4 Bootstrap 3.4

Dessin d'achèvement

image.png

Cliquez sur le titre

image.png

Les valeurs sont définies dans le formulaire et vous pouvez facilement enregistrer des livres.

la mise en oeuvre

On suppose que BooksController a été créé.

La première est la fonction de recherche de livre. Cette fois, j'utiliserai l'API Google Book pour enregistrer des livres. Je décrirai donc la fonction de recherche dans la nouvelle action.

books_controller


  def new
    @book = Book.new

    #Traitement de l'API de recherche de livres
    if params[:keyword].present?
      require 'net/http'
      url = 'https://www.googleapis.com/books/v1/volumes?q='
      request = url + params[:keyword]
      enc_str = URI.encode(request)
      uri = URI.parse(enc_str)
      json = Net::HTTP.get(uri)
      @bookjson = JSON.parse(json)

      count = 5 #Numéro à afficher dans les résultats de recherche
      @books = Array.new(count).map{Array.new(4)}
      count.times do |x|
        @books[x][0] = @bookjson.dig("items", x, "volumeInfo", "title")
        @books[x][1] = @bookjson.dig("items", x, "volumeInfo", "imageLinks", "thumbnail")
        @books[x][2] = @bookjson.dig("items", x, "volumeInfo", "authors")
        @books[x][2] = @books[x][2].join(',') if @books[x][2] #Séparez les auteurs par des virgules
        @books[x][3] = @bookjson.dig("items", x, "volumeInfo", "industryIdentifiers", 0, "identifier")
      end
    end
  end

L'API GoogleBook n'a pas besoin d'être enregistrée Si vous donnez un mot de recherche à https: //www.googleapis.com/books/v1/volumes? Q =, les résultats de la recherche seront renvoyés au format json.

Lors de la recherche avec Rails, cela ressemble à ceci ↓ https://www.googleapis.com/books/v1/volumes?q=rails

Le json acquis est converti en hachage à l'aide de JSON.parce, et la valeur souhaitée en est extraite.

Vous pouvez aussi l'obtenir avec @bookjson [" items "] [x] [volumeInfo] [title], mais si certaines données n'existent pas, NoMethodError se produira. La gestion des exceptions peut être effectuée par branchement conditionnel, mais c'est un peu redondant.

Je creuse donc le hachage en utilisant la méthode dig. S'il n'y a pas de valeur correspondant à la clé, elle renverra nil, donc c'est sûr.

Créez une fenêtre de recherche et un champ de résultats de recherche dans la vue.

ruby:new.html.erb


<h1>Nouvel enregistrement des livres</h1>
  <%= form_tag('/booksearch', method: :get) do %>
    <div class="input-group">
      <%= search_field_tag "keyword", params[:keyword], class: "form-control", placeholder: "Recherche par mot clé" %>
        <span class="input-group-btn">
          <%= submit_tag "Chercher", class: "btn btn-primary" %>
        </span>
    </div>
  <% end %>
<h2>Résultats de recherche</h2>
<% if @books.present? %>
  <% @books.each do |book| %>
     <img src="<%= book[1] %>" width="40" vspace="2">
     <%= book[0] %> |
     <%= book[2] %> | 
     <%= book[3] %> <br>
  <% end %>
<% end %>

Écrivons également le routage de la fenêtre de recherche

routes.rb


  resources :books
  get '/booksearch', to: 'books#new'

Ceci termine la fonction de recherche.

Ensuite, préparez le formulaire d'inscription du livre.

ruby:new.html.erb


<%= form_with scope: :book, url: books_path, local: true do |form| %>
  <%= render 'shared/error_messages' %>
  <%= form.label :title %>
  <%= form.text_field :title, class: 'form-control', value: "#{@title}" %>

  <%= form.label :author %>
  <%= form.text_field :author, class: 'form-control', value: "#{@author}" %>

  <%= form.label :code %>
  <%= form.text_field :code, class: 'form-control', value: "#{@code}" %>

  <%= form.hidden_field :img, class: 'form-control', value: "#{@img}" %

  <%= form.submit "Save Book", class: "btn btn-primary" %>
<% end %>

Le fait est qu'il s'agit de value:" # {@ title} ", et qu'il reçoit la valeur. L'URL de la vignette de l'image est reçue par hidden_field car elle n'a pas besoin d'être modifiée.

Créez un mécanisme pour soumettre des valeurs au formulaire.

ruby:new.html.erb


...
<img src="<%= book[1] %>" width="40" vspace="2">
<%= link_to book[0], controller: "books", action: "new", title: book[0], code: book[3], author: book[2], img: book[1] %>
<%= book[2] %> | 
...

Collez le lien avec la requête dans le livre [0](* titre du livre) affiché dans les résultats de recherche précédents. Cela enverra la valeur au contrôleur.

books_controller


  def new
    ...
    @title = params[:title] if params[:title].present?
    @code = params[:code] if params[:code].present?
    @author = params[:author] if params[:author].present?
    @img = params[:img] if params[:img].present?
  end

Ajout du processus de réception des paramètres de requête à la nouvelle action. Stocker dans les variables d'instance pour les vues (formulaires).

Ceci est complet. Si vous avez des questions, laissez un commentaire.

Recommended Posts

Enregistrement facile des livres avec l'API et Rails de Google Livres
Afficher l'API Google Maps avec Rails et affichage des broches
Présentation de l'API Google Map avec rails
Obtenez des conversions et des revenus avec l'API Google Analytics et faites un rapport à Slack
[Google Maps API] La carte n'est pas affichée et devient vide [Rails]
[Ruby on Rails] Affichage et épinglage de GoolgeMAP à l'aide de l'API Google
Jeton d'accès à l'API Google et jeton d'actualisation
[Rails] google maps api Comment publier et afficher des informations cartographiques
[Rails] Description de l'API Google Maps lorsque la latitude et la longitude ne peuvent pas être enregistrées
[Rails] Affichage de Google Maps à l'aide de l'API Google Maps et recherche d'itinéraires entre plusieurs points
Modifier la diapositive (Powerpo pour Google) avec Python (cas RPA à faible coût avec API Google et Python)
Reconnaissance vocale en streaming avec l'API Google Cloud Speech
Exécuter la traduction Google et la traduction DeepL avec l'interface graphique
Utilisez TPU et Keras avec Google Colaboratory
Crypter avec Ruby (Rails) et décrypter avec Python
Téléchargez facilement des mp3 / mp4 avec python et youtube-dl!
Obtenez des vacances avec l'API Google Agenda
[Rails] Comment calculer la latitude et la longitude avec une grande précision à l'aide de l'API Geocoding et l'afficher sur Google Map
[Rails 6 / API Google Map] Publiez une adresse et définissez plusieurs marqueurs sur la carte
Comment utiliser OAuth et API de compte de service avec le client API Google pour python
Programme de livre de mots anglais lié à des documents Google
Utiliser l'API Twitter (enregistrement de compte API et acquisition de tweet)
J'ai essayé "License OCR" avec l'API Google Vision
Transcription vocale automatique avec l'API Google Cloud Speech
J'ai essayé "Receipt OCR" avec l'API Google Vision
Obtenez l'objet et le corps de Gmail avec Python et l'API Gmail
Intégration de la banque de données Google App Engine et de l'API de recherche
Obtenez des étiquettes de données en les associant à l'API Google Cloud Vision lors de la prévisualisation d'images avec Rails