Einfache Buchregistrierung mit Google Books API und Rails

Umgebung

ruby 2.5.8 rails 5.2.4 Bootstrap 3.4

Abschlusszeichnung

image.png

Klicken Sie auf den Titel

image.png

Die Werte werden im Formular festgelegt, und Sie können Bücher einfach registrieren.

Implementierung

Es wird davon ausgegangen, dass BooksController erstellt wurde.

Erstens ist die Buchsuchfunktion. Dieses Mal werde ich die Google Buch-API verwenden, um Bücher zu registrieren, damit ich die Suchfunktion in der neuen Aktion beschreiben kann.

books_controller


  def new
    @book = Book.new

    #Verarbeitung der Buchsuch-API
    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 #Nummer, die in den Suchergebnissen angezeigt werden soll
      @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] #Trennen Sie mehrere Autoren durch Kommas
        @books[x][3] = @bookjson.dig("items", x, "volumeInfo", "industryIdentifiers", 0, "identifier")
      end
    end
  end

Die GoogleBook-API muss nicht registriert werden Wenn Sie "https: //www.googleapis.com/books/v1/volumes? Q =" ein Suchwort geben, werden die Suchergebnisse im JSON-Format zurückgegeben.

Bei der Suche mit Rails ↓ sieht es so aus https://www.googleapis.com/books/v1/volumes?q=rails

Der erfasste JSON wird mit JSON.parce in einen Hash konvertiert und der gewünschte Wert daraus extrahiert.

Sie können es auch mit "@bookjson [" items "] [x] [volumeInfo] [title]" abrufen. Wenn jedoch einige Daten nicht vorhanden sind, tritt NoMethodError auf. Die Ausnahmebehandlung kann durch bedingte Verzweigung erfolgen, ist jedoch etwas redundant.

Also grabe ich den Hash mit der Dig-Methode. Wenn dem Schlüssel kein Wert entspricht, wird null zurückgegeben, sodass er sicher ist.

Erstellen Sie ein Suchfenster und ein Suchergebnisfeld in der Ansicht.

ruby:new.html.erb


<h1>Neue Registrierung von Büchern</h1>
  <%= form_tag('/booksearch', method: :get) do %>
    <div class="input-group">
      <%= search_field_tag "keyword", params[:keyword], class: "form-control", placeholder: "Schlagwortsuche" %>
        <span class="input-group-btn">
          <%= submit_tag "Suche", class: "btn btn-primary" %>
        </span>
    </div>
  <% end %>
<h2>Suchergebnisse</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 %>

Schreiben wir auch das Routing für das Suchfenster

routes.rb


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

Damit ist die Suchfunktion abgeschlossen.

Bereiten Sie als Nächstes das Buchregistrierungsformular vor.

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 %>

Der Punkt ist, dass es value:" # {@ title} " ist und den Wert erhält. Die URL der Miniaturansicht des Bildes wird von "hidden_field" empfangen, da sie nicht geändert werden muss.

Erstellen Sie einen Mechanismus zum Senden von Werten an das Formular.

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] %> | 
...

Fügen Sie den Link mit der Abfrage in das Buch [0](* Titel des Buches) ein, das in den vorherigen Suchergebnissen angezeigt wurde. Dadurch wird der Wert an die Steuerung gesendet.

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

Der Prozess zum Empfangen von Abfrageparametern wurde zur neuen Aktion hinzugefügt. Speichern Sie in Instanzvariablen für Ansichten (Formulare).

Dies ist abgeschlossen. Wenn Sie Fragen haben, hinterlassen Sie bitte einen Kommentar.

Recommended Posts

Einfache Buchregistrierung mit Google Books API und Rails
Zeigen Sie die Google Maps-API mit Rails und Pin-Anzeige an
Einführung der Google Map API mit Schienen
Erhalten Sie Conversions und Einnahmen mit der Google Analytics-API und melden Sie sich bei Slack
[Google Maps API] Karte wird nicht angezeigt und wird leer [Rails]
[Ruby on Rails] Anzeigen und Fixieren von GoolgeMAP mithilfe der Google-API
Google API-Zugriffstoken und Aktualisierungstoken
[Rails] google maps api So posten und anzeigen Sie einschließlich Karteninformationen
[Rails] Google Maps API Beschreibung, wenn Breiten- und Längengrade nicht gespeichert werden können
[Schienen] Anzeigen von Google Maps mithilfe der Google Maps-API und Suchen von Routen zwischen mehreren Punkten
Folie bearbeiten (Powerpo für Google) mit Python (kostengünstiger RPA-Fall mit Google API und Python)
Streaming-Spracherkennung mit der Google Cloud Speech API
Führen Sie die Google-Übersetzung und die DeepL-Übersetzung mit der GUI aus
Verwenden Sie TPU und Keras mit Google Colaboratory
Mit Ruby (Rails) verschlüsseln und mit Python entschlüsseln
Laden Sie einfach mp3 / mp4 mit Python und youtube-dl herunter!
Holen Sie sich Urlaub mit der Google Kalender-API
[Rails] So berechnen Sie Breiten- und Längengrade mit hoher Genauigkeit mithilfe der Geocoding-API und zeigen sie auf Google Map an
[Rails 6 / Google Map API] Veröffentlichen Sie eine Adresse und setzen Sie mehrere Markierungen auf der Karte
Verwendung von OAuth und API für Dienstkonten mit Google API Client für Python
Englisches Wortbuchprogramm, das mit Google-Dokumenten verknüpft ist
Verwenden Sie die Twitter-API (API-Kontoregistrierung und Tweet-Erfassung).
Ich habe "License OCR" mit der Google Vision API ausprobiert
Automatische Sprachtranskription mit Google Cloud Speech API
Ich habe "Receipt OCR" mit der Google Vision API ausprobiert
Holen Sie sich den Betreff und den Text von Google Mail mit der Python- und Google Mail-API
Integration von Google App Engine-Datenspeicher und Such-API
Erhalten Sie Datenbeschriftungen, indem Sie bei der Vorschau von Bildern mit Rails eine Verknüpfung mit der Google Cloud Vision-API herstellen