[RUBY] [Rails] Recherche de livres avec l'API Amazon PA

J'ai fait une note car c'était un peu difficile avec l'API de recherche de livres Amazon. Je n'ai trouvé aucun autre article en japonais, j'espère donc que vous pourrez vous y référer.

introduction

Vous pouvez utiliser des API telles que Google et Amazon pour rechercher des livres, mais j'ai décidé d'utiliser l'API PA (Product Advertising) d'Amazon car Google (Google Books API) n'était pas suffisant.

Cependant, la version de l'API PA a changé à partir d'avril 2020, et la méthode utilisant le gem d'Amazon-ecs ne fonctionne pas ... (J'ai fait référence à la méthode de cet article, mais je n'ai pas pu obtenir les données ...)

En regardant amazon-ecs reference, il est dit qu'il vaut mieux utiliser un autre joyau (paapi), j'ai donc décidé de l'utiliser. .. Référence Paapi

En passant, pour utiliser cette API, vous devez d'abord vous inscrire et postuler à Amazon Associate, donc si vous ne l'avez pas encore fait, veuillez lire cet article. Se il vous plaît se référer. Les obstacles pour juger sont relativement élevés, donc je pense que c'est difficile pour ceux qui veulent l'utiliser immédiatement. (Cela m'a pris environ un mois)

Image complète

L'image terminée de la recherche ressemble à ceci. Vous pouvez voir que les images et les URL ont été acquises correctement. 85a1b44b0aecfa2b419158ec43da4af8.gif

Politique de mise en œuvre

Cette fois, nous mettrons en œuvre le traitement suivant

  1. Entrez des mots clés dans le formulaire et envoyez une demande
  2. Accédez à l'API et recherchez par le mot-clé saisi
  3. Traitez la réponse de l'API et affichez les données

Divers fichiers

Gem

Gemfile


gem 'paapi'

N'oubliez pas de regrouper l'installation. (Si le serveur est en cours d'exécution, n'oubliez pas de le redémarrer)

config Créez paapi.rb directement sous config / initializers et écrivez les paramètres de clé et d'ID. ・ Access_key: clé d'accès ・ Secret_key: clé secrète ・ Partner_tag: identifiant d'associé (votre identifiant se terminant par 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

Dans mon cas, je l'appelle à partir des informations d'identification et je l'utilise. (Parce que je déteste quand ça fuit) Si vous ne savez pas comment utiliser les informations d'identification, veuillez consulter ici.

manette

Puisqu'il s'agit d'un exemple, j'ai créé un contrôleur de recherche de manière appropriée. En fait, il est préférable de le créer dans le répertoire du livre afin que vous puissiez facilement comprendre ce que vous recherchez.

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

Je crée une instance de client et j'y applique une méthode de recherche pour obtenir des informations sur le produit. Cette fois, le genre est limité aux livres dans la recherche de produits, mais vous pouvez spécifier le numéro de produit pour obtenir des informations ou spécifier un autre genre, veuillez donc l'utiliser correctement en fonction de l'objectif.

Lorsque vous recherchez un produit, les données de 10 articles sont acquises et utilisées comme données de classe de réponse. Étant donné que les données des éléments sont incluses, elles peuvent être traitées comme des données de classe d'éléments en les extrayant avec .items. (La classe Item est fournie par gem, et vous pouvez utiliser des méthodes pratiques. Je l'expliquerai plus tard.)

routage

N'oubliez pas de le définir.

routes.rb


Rails.application.routes.draw do
  # (Abréviation)
  resources :searches, only: [:index]
end

Voir la fiche

Tout d'abord, préparez un formulaire de recherche.

Formulaire de recherche


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

Vient ensuite la page qui affiche les données obtenues par la recherche. Cette fois, il sera affiché dans recherches / index.

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}"

Vous pouvez facilement obtenir le titre du produit, l'URL, l'image, etc. à partir des données de la classe Item en utilisant la méthode title, la méthode detail_url et la méthode image_url.

Vous pouvez obtenir beaucoup d'autres choses, donc je pense que vous devriez l'essayer en regardant Reference.

Au fait, les auteurs ne travaillaient pas selon la référence (en utilisant la méthode des auteurs), alors je l'ai ajustée moi-même. (Je dois trouver celui dont le RoleType est auteur, mais la méthode préparée recherche celui dont le rôle est Auteur)

référence

・ Bloc-notes C'est une page où vous pouvez essayer le type de données acquises en appuyant sur l'API.  https://webservices.amazon.co.jp/paapi5/scratchpad/

・ Référence API Référence officielle pour Product Advertising API 5.0.  https://webservices.amazon.com/paapi5/documentation/api-reference.html

Recommended Posts

[Rails] Recherche de livres avec l'API Amazon PA
[Rails] Recherche de livres (communication asynchrone) avec l'API Amazon PA v5.0
Recherche intemporelle avec Rails + JavaScript (jQuery)
API Rails
[Java] Obtenez des images avec l'API Google Custom Search
Faisons une fonction de recherche avec Rails (ransack)
Comment créer une API avec GraphQL et Rails
Mettre en œuvre la fonction de recherche avec l'API Rakuten Books (DVD)
Utilisation de l'API PAY.JP avec Rails ~ Préparation de l'implémentation ~ (payjp.js v2)
Environnement Build Rails (API) x MySQL x Nuxt.js avec Docker
Utilisation de l'API PAY.JP avec Rails ~ Enregistrement de la carte ~ (payjp.js v2)
Compatible avec Android 10 (API 29)
Manipuler le dispositif avec des rails
[Rails] Didacticiel Apprendre avec les rails
[Rails] Test avec RSpec
[Rails] Développement avec MySQL
Prend en charge la multilinguisme avec Rails!
Essayez d'utiliser l'API de recherche de code postal avec Spring Boot
[Rails] Recherche à partir de plusieurs colonnes + conditions avec Gem et ransack