[JAVA] Exemple de code pour appeler l'API Yahoo! Shopping Product Search (v3) avec Spring RestTemplate

Aperçu

--Créez un exemple de programme qui appelle l'API Yahoo! Shopping Product Search (v3) à l'aide du client HTTP RestTemplate fourni par Spring.

Cet environnement

Code source

Liste des codes sources

├── build.gradle
└── src
    └── main
        └── java
            └── com
                └── example
                    ├── ErrorResponse.java
                    ├── ItemSearch.java
                    └── ResultSet.java

build.gradle

plugins {
  id 'application'
  id 'java'
}

group 'org.example'
version '0.0.1'
mainClassName = "com.example.ItemSearch"
sourceCompatibility = '11'

repositories {
  mavenCentral()
}

dependencies {

  //Requis pour utiliser RestTemplate
  // https://mvnrepository.com/artifact/org.springframework/spring-web
  implementation 'org.springframework:spring-web:5.2.7.RELEASE'

  //Requis pour JSON et le mappage de classe
  // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
  implementation 'com.fasterxml.jackson.core:jackson-databind:2.11.0'
}

src/main/java/com/example/ItemSearch.java

package com.example;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.http.HttpHeaders;
import org.springframework.http.RequestEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestClientResponseException;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;

import java.net.URI;

/**
 *achats:Recherche de produits (v3)- Yahoo!Réseau de développeurs
 * https://developer.yahoo.co.jp/webapi/shopping/shopping/v3/itemsearch.html
 */
public class ItemSearch {

  public static void main(String[] args) {

    try {
      String appid = args[0];
      String query = args[1];
      System.out.println("appid: " + appid); //ID d'application
      System.out.println("query: " + query); //Mot-clé de recherche

      //Rechercher des produits
      ResultSet rs = new ItemSearch().search(appid, query);
      for (ResultSet.Hit hit : rs.hits) {
        System.out.println("**************************************************");
        System.out.println("Nom du produit: " + hit.name);
        System.out.println("Description de l'article: " + hit.description);
        System.out.println("copie de capture: " + hit.headLine);
        System.out.println("URL d'image de taille 76 x 76: " + hit.image.small);
        System.out.println("URL d'image de taille 146 x 146: " + hit.image.medium);
        System.out.println("URL du produit: " + hit.url);
        System.out.println("prix: " + hit.price);
      }
    } catch (Exception e) {
      System.out.println("Erreur est survenue: " + e);
    }
  }

  /**
   *Recherchez des produits.
   * @ID d'application param appid
   * @mot-clé de recherche de requête de paramètre
   * @renvoyer les résultats de la recherche
   * @jette une exception lorsqu'une erreur se produit
   */
  public ResultSet search(String appid, String query) throws Exception {

    try {
      //Créer une URL pour les appels d'API
      String baseurl = "https://shopping.yahooapis.jp/ShoppingWebService/V3/itemSearch";
      String url = UriComponentsBuilder.fromUri(new URI(baseurl))
        .queryParam("query", query) //Mot-clé de recherche
        .queryParam("results", 2) //Jusqu'à 2 résultats de recherche
        .build(false)
        .encode()
        .toUriString();
      System.out.println("URL: " + url);

      //Créer des informations de requête HTTP
      HttpHeaders reqHeaders = new HttpHeaders();
      reqHeaders.set("User-Agent", "Yahoo AppID: " + appid); //ID d'application
      RequestEntity req = RequestEntity.get(new URI(url))
        .headers(reqHeaders)
        .build();

      //Appelez l'API pour obtenir le résultat
      RestTemplate restTemplate = new RestTemplate();
      ResponseEntity<ResultSet> res = restTemplate.exchange(req, ResultSet.class);
      return res.getBody();

    } catch (RestClientResponseException e) {

      //Informations sur l'état de la réponse en sortie
      int statusCode = e.getRawStatusCode();
      String statusText = e.getStatusText();
      System.out.println("RestClientResponseException.RawStatusCode: " + statusCode);
      System.out.println("RestClientResponseException.StatusText: " + statusText);

      //Informations d'erreur de sortie
      String body = e.getResponseBodyAsString();
      ObjectMapper mapper = new ObjectMapper();
      ErrorResponse errorResponse = mapper.readValue(body, ErrorResponse.class);
      System.out.println("Message d'erreur: " + errorResponse.error.message);

      throw e;

    } catch (Exception e) {
      throw e;
    }
  }
}

src/main/java/com/example/ResultSet.java

Une classe qui représente la réponse des résultats de recherche.

package com.example;

import java.util.List;

/**
 *Résultats de recherche.
 */
public class ResultSet {

  public List<Hit> hits;

  public static class Hit {

    // hits/name string Nom du produit
    public String name;

    // hits/description string Description de l'article
    public String description;

    // hits/copie de capture de chaîne headLine
    public String headLine;

    // hits/image
    public Image image;

    // hits/chaîne URL URL du produit
    public String url;

    // hits/prix prix entier
    public int price;
  }

  public static class Image {

    // hits/image/petite chaîne URL de l'image de taille 76 × 76
    public String small;

    // hits/image/chaîne moyenne URL de l'image de taille 146 x 146
    public String medium;
  }
}

src/main/java/com/example/ErrorResponse.java

Une classe qui représente les informations de réponse d'erreur.

package com.example;

import com.fasterxml.jackson.annotation.JsonProperty;

/**
 *Informations d'erreur.
 */
public class ErrorResponse {

  @JsonProperty("Error")
  public Error error;

  public static class Error {

    @JsonProperty("Message")
    public String message;
  }
}

Exemple d'exécution

Spécifiez l'ID d'application disponible et le mot-clé de recherche "cat"

La réponse du résultat de la recherche est mappée à la classe ResultSet et les informations sont sorties.

$ gradle run -q --args="your_application_chat d'identité"
appid: your_application_id
query:Chat
URL: https://shopping.yahooapis.jp/ShoppingWebService/V3/itemSearch?query=%E7%8C%AB&results=2
**************************************************
Nom du produit:Jouet pour chat poisson Robot chat jouet électrique chat jouet automatique jouet pour chat automatique jouet pour chat électrique chat jouet poisson
Description de l'article:[Jouets pour animaux de compagnie] Robot de poisson électrique Robot de poisson Chat jouet Chat jouet électrique<br>[Fonction de nage automatique] Activé automatiquement par le capteur d'eau/Éteindre. Conçu avec des ailettes de robot automatiques<br>Il commence à bouger dès qu'il est placé dans l'eau et s'éteint automatiquement lorsqu'il est retiré, ce qui permet d'économiser de l'énergie.<br>[Avec lumière LED] Puisque la lumière LED est intégrée, elle brille dans l'obscurité. Les poissons brillants et mobiles chatouillent l'instinct de chasse aux animaux<br>[Scène d'utilisation du produit] Jouets automatiques pour chats<br>[Animaux concernés] Scottish Fold Main Coon Rag Doll Russian Blue British Show Hair<br>Siberian Kijitora Stray Cat American Carl Scottish Sabatra Hachiware Neko-chan<br>
copie de capture:Robot poisson électrique qui stimule l'instinct de chasse des chats
URL d'image de taille 76 x 76: https://item-shopping.c.yimg.jp/i/c/himawaridifang-store_robo-fish1
URL d'image de taille 146 x 146: https://item-shopping.c.yimg.jp/i/g/himawaridifang-store_robo-fish1
URL du produit: https://store.shopping.yahoo.co.jp/himawaridifang-store/robo-fish1.html
prix: 880
**************************************************
Nom du produit:Harnais pour chat, laisse pour chat, fournitures pour chats, fournitures pour animaux de compagnie
Description de l'article:Comme mesure d'évasion<br><br>Les chats paniquent souvent et essaient de s'échapper ou de se déchaîner lorsqu'ils sont déplacés de manière inconnue, par exemple lorsqu'ils vont à l'hôpital ou déménagent. Dans un tel cas, il est très sûr non seulement de le mettre dans la cage de l'animal, mais également de se préparer à le mettre dans la cage de l'animal après avoir attaché le harnais. De plus, dans le cas peu probable où vous deviez évacuer en raison des dommages causés par une catastrophe majeure, cela aidera à empêcher toute évasion, de sorte que le nombre de propriétaires qui le gardent dans des biens de prévention des catastrophes augmente.<br><br>Pour une promenade<br><br>脱走防止目的だけでなく、猫のPour une promenade使用するのもおすすめです。ハーネスは猫の身体の動きを邪魔しにくいので、のびのびと運動できて良いストレス発散になることでしょう。ただし、猫の性格によっては外に連れ出すことがかえってストレスとなる場合もありますので、お散歩はくれぐれも猫の様子をみつつ、交通状況などにも気を配りながら行ってください。<br><br>Il existe quatre variations de couleur: rouge, bleu, noir et rose.<br>Fait de nylon<br><br>Tour de cou 16-26 cm<br>Tour de taille 26-36 cm<br>Longueur du plomb 110 cm<br><br>Mots clés de recherche: laisse pour chat, harnais pour chat, laisse pour chat, digestion ponctuelle, livraison gratuite
copie de capture:Cat Harness Cat Lead Cat Collier Cat Lead
URL d'image de taille 76 x 76: https://item-shopping.c.yimg.jp/i/c/sam-store_0030
URL d'image de taille 146 x 146: https://item-shopping.c.yimg.jp/i/g/sam-store_0030
URL du produit: https://store.shopping.yahoo.co.jp/sam-store/0030.html
prix: 599

Spécifiez un ID d'application inutilisable et recherchez le mot-clé "cat"

La réponse d'erreur est mappée à la classe ErrorResponse et les informations sont sorties.

$ gradle run -q --args="invalid_application_chat d'identité"
appid: invalid_application_id
query:Chat
URL: https://shopping.yahooapis.jp/ShoppingWebService/V3/itemSearch?query=%E7%8C%AB&results=2
RestClientResponseException.RawStatusCode: 403
RestClientResponseException.StatusText: Forbidden
Message d'erreur: Your Request was Forbidden
Erreur est survenue: org.springframework.web.client.HttpClientErrorException$Forbidden: 403 Forbidden: [{
"Error" : {
"Message" : "Your Request was Forbidden"
}
} ... (512 bytes)]

Matériel de référence

Recommended Posts

Exemple de code pour appeler l'API Yahoo! Shopping Product Search (v3) avec Spring RestTemplate
Exemple de code pour appeler l'API Yahoo! Shopping Product Search (v3) avec l'API client HTTP officiellement introduite à partir de Java 11
Exemple de code pour appeler l'API Yahoo! Local Search en Java
Appelez l'API Amazon Product Advertising 5.0 (PA-API v5) en Java
[Java] J'ai essayé de mettre en œuvre la recherche de produits de l'API Yahoo
Comment appeler et utiliser l'API en Java (Spring Boot)
[Java] Nouvelle spécification Implémentation de l'API de recherche de produits Yahoo!
Code de démonstration qui recherche récursivement les répertoires avec Files.walkFileTree
Exemple de code pour convertir List en List <String> dans Java Stream
Exemple multi-module d'API RESTful avec IntelliJ + Jersey + Spring Framework
Essayez de mettre en œuvre à l'aide de l'API de recherche de produits Rakuten (facile)
Présentez swagger-ui à l'API REST implémentée dans Spring Boot
Exemple de configuration d'API RESTful minimum avec Jersey + Spring Framework
Essayez d'utiliser l'API de recherche de code postal avec Spring Boot
Créez une API pour envoyer et recevoir des données Json avec Spring