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.
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)
L'image terminée de la recherche ressemble à ceci. Vous pouvez voir que les images et les URL ont été acquises correctement.
Cette fois, nous mettrons en œuvre le traitement suivant
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.
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.)
N'oubliez pas de le définir.
routes.rb
Rails.application.routes.draw do
# (Abréviation)
resources :searches, only: [:index]
end
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)
・ 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