[RUBY] [Rails] Buchsuche mit Amazon PA API

Ich habe mir eine Notiz gemacht, weil es mit der Amazon-Buchsuch-API etwas schwierig war. Ich konnte keine anderen Artikel auf Japanisch finden, daher hoffe ich, dass Sie darauf verweisen können.

Einführung

Sie können APIs wie Google und Amazon verwenden, um nach Büchern zu suchen. Ich habe mich jedoch für die PA-API (Product Advertising) von Amazon entschieden, da Google (Google Books API) nicht ausreicht.

Die Version der PA-API wurde jedoch ab April 2020 geändert, und die Methode mit dem Juwel von amazon-ecs funktioniert nicht ... (Ich habe auf die Methode von [diesem Artikel] verwiesen (https://qiita.com/tatsuki-m/items/043f14e7d4504277c947), aber ich konnte die Daten nicht erhalten ...)

Wenn ich mir amazon-ecs reference anschaue, heißt es, dass es besser ist, einen anderen Edelstein (paapi) zu verwenden, also habe ich beschlossen, ihn zu verwenden. .. Paapi-Referenz

Um diese API nutzen zu können, müssen Sie sich zunächst registrieren und bei Amazon Associate bewerben. Wenn Sie dies noch nicht getan haben, lesen Sie bitte diesen Artikel. Siehe. Die Hürden für die Beurteilung sind relativ hoch, daher denke ich, dass es für diejenigen, die es sofort nutzen möchten, schwierig ist. (Es hat ungefähr einen Monat gedauert)

Vollständiges Bild

Das fertige Bild der Suche sieht folgendermaßen aus. Sie können sehen, dass die Bilder und URLs ordnungsgemäß erfasst wurden. 85a1b44b0aecfa2b419158ec43da4af8.gif

Implementierungsrichtlinie

Dieses Mal werden wir die folgende Verarbeitung implementieren

  1. Geben Sie Schlüsselwörter in das Formular ein und senden Sie eine Anfrage
  2. Klicken Sie auf die API und suchen Sie nach dem eingegebenen Schlüsselwort
  3. Verarbeiten Sie die Antwort von der API und zeigen Sie die Daten an

Verschiedene Dateien

Gem

Gemfile


gem 'paapi'

Vergessen Sie nicht, die Installation zu bündeln. (Wenn der Server ausgeführt wird, vergessen Sie nicht, ihn neu zu starten.)

config Erstellen Sie paapi.rb direkt unter config / initializers und schreiben Sie die Schlüssel- und ID-Einstellungen. ・ Access_key: Zugriffsschlüssel ・ Secret_key: Geheimschlüssel ・ Partner_tag: Associate ID (Ihre ID endet mit 22)

config/initializers/paapi.rb


Paapi.configure do |config|
  config.access_key  = Rails.application.credentials[:pa_api][:access_key_id]
  config.secret_key  = Rails.application.credentials[:pa_api][:secret_key]
  config.partner_tag = Rails.application.credentials[:pa_api][:associate_tag]
end

In meinem Fall rufe ich es aus den Anmeldeinformationen auf und verwende es. (Weil ich es hasse, wenn es leckt) Wenn Sie nicht wissen, wie Sie Anmeldeinformationen verwenden sollen, lesen Sie bitte hier.

Regler

Da dies ein Beispiel ist, habe ich einen entsprechenden Suchcontroller erstellt. Eigentlich ist es besser, es im Buchverzeichnis zu erstellen, damit Sie leicht verstehen können, was die Suche ist.

Terminal


$ rails g controller searches

searches_controller


class SearchesController < ApplicationController
  before_action :call_client, only: :index
  
  def index
    si = @client.search_items(keywords: keyword_params, SearchIndex: "Books")
    @items = si.items
  end
  
  private
  
  def call_client
    require 'paapi'
    @client = Paapi::Client.new(access_key: Rails.application.credentials[:pa_api][:access_key_id],
                                secret_key: Rails.application.credentials[:pa_api][:secret_key],
                                market: :jp,
                                partner_tag: Rails.application.credentials[:pa_api][:associate_tag])
  end
  
  def keyword_params
    params.require(:keyword)
  end

end

Ich erstelle eine Instanz des Clients und wende eine Suchmethode darauf an, um Produktinformationen zu erhalten. Dieses Mal ist das Genre auf Bücher in der Produktsuche beschränkt. Sie können jedoch die Produktnummer angeben, um Informationen zu erhalten, oder ein anderes Genre angeben. Verwenden Sie es daher je nach Verwendungszweck ordnungsgemäß.

Wenn Sie nach einem Produkt suchen, werden Daten für 10 Artikel erfasst und als Antwortklassendaten verwendet. Da die Artikeldaten darin enthalten sind, können sie als Artikelklassendaten behandelt werden, indem sie mit ".items" extrahiert werden. (Die Item-Klasse wird von gem bereitgestellt, und Sie können bequeme Methoden verwenden. Ich werde es später erklären.)

Routing

Vergiss nicht, es einzustellen.

routes.rb


Rails.application.routes.draw do
  # (Abkürzung)
  resources :searches, only: [:index]
end

Datei ansehen

Bereiten Sie zunächst ein Suchformular vor.

Suchformular


.book-search
  = form_with url: {controller: 'searches', action: 'index' }, method: :get, local: true do |f|
    = f.text_field :keyword
    = f.submit "Suche"

Als nächstes wird die Seite angezeigt, auf der die durch die Suche erhaltenen Daten angezeigt werden. Dieses Mal wird es in "Suchen / Index" angezeigt.

views/searches/index


- @items.each do |item|
  .url
    = "url: #{item.detail_url}"
  .title
    = "title: #{item.title}"
  .author
    - authors = item.contributors.select { |e| e['RoleType'] == "author" }&.map { |e| e.dig('Name') }&.reject {|n| n.to_s.empty?}
    = "author: #{authors[0]}"
  .image
    = image_tag "#{item.image_url}", height: '170px', width: '120px'
  .asin
    = "asin: #{item.asin}"

Mithilfe der title-Methode, der detail_url-Methode und der image_url-Methode können Sie den Produkttitel, die URL, das Bild usw. auf einfache Weise aus den Daten der Item-Klasse abrufen.

Sie können viele andere Dinge bekommen, also denke ich, Sie sollten es versuchen, indem Sie auf Referenz schauen.

Übrigens haben die Autoren nicht gemäß der Referenz gearbeitet (mit der Autorenmethode), also habe ich sie selbst angepasst. (Ich muss denjenigen finden, dessen RoleType der Autor ist, aber die vorbereitete Methode sucht nach demjenigen, dessen Rolle der Autor ist.)

Referenz

・ Notizblock Auf dieser Seite können Sie versuchen, welche Art von Daten durch Klicken auf die API erfasst werden.  https://webservices.amazon.co.jp/paapi5/scratchpad/

・ API-Referenz Offizielle Referenz für Product Advertising API 5.0.  https://webservices.amazon.com/paapi5/documentation/api-reference.html

Recommended Posts

[Rails] Buchsuche mit Amazon PA API
[Rails] Buchsuche (asynchrone Kommunikation) mit Amazon PA API v5.0
Zeitlose Suche mit Rails + JavaScript (jQuery)
Rails API
[Java] Holen Sie sich Bilder mit der Google Custom Search API
Lassen Sie uns eine Suchfunktion mit Rails (Ransack) machen
So erstellen Sie eine API mit GraphQL und Rails
Implementieren Sie die Suchfunktion mit der Rakuten Books (DVD) API
Verwenden der PAY.JP-API mit Rails ~ Implementierungsvorbereitung ~ (payjp.js v2)
Build Rails (API) x MySQL x Nuxt.js Umgebung mit Docker
Verwenden der PAY.JP-API mit Rails ~ Kartenregistrierung ~ (payjp.js v2)
Kompatibel mit Android 10 (API 29)
Gerät mit Schienen handhaben
[Rails] Lernen mit Rails Tutorial
[Schienen] Test mit RSpec
[Rails] Entwicklung mit MySQL
Unterstützt Mehrsprachigkeit mit Rails!
Versuchen Sie, die Springcode-Such-API mit Spring Boot aufzurufen
[Rails] Suche aus mehreren Spalten + Bedingungen mit Gem und Ransack