Exemple de code pour appeler l'API Yahoo! Shopping Product Search (v3) avec l'API client HTTP officiellement introduite à partir de Java 11

Aperçu

--Créez un exemple de programme qui appelle l'API Yahoo! Shopping Product Search (v3) à l'aide de l'API client HTTP officiellement introduite à partir de Java 11 (classes HttpClient, HttpRequest, HttpResponse, etc. du package java.net.http).

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 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 java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.time.Duration;

/**
 *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);
      if (rs != null) {
        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);
      e.printStackTrace();
    }
  }

  /**
   *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 = baseurl +
        "?query=" + URLEncoder.encode(query, StandardCharsets.UTF_8) + //Mot-clé de recherche
        "&results=2"; //Jusqu'à 2 résultats de recherche
      System.out.println("URL: " + url);

      //Créer des informations de requête HTTP
      HttpRequest req = HttpRequest.newBuilder(new URI(url))
        .GET()
        .setHeader("User-Agent", "Yahoo AppID: " + appid) //ID d'application
        .timeout(Duration.ofSeconds(10))
        .build();

      //Appelez l'API pour obtenir le résultat
      HttpClient client = HttpClient.newBuilder()
        .version(HttpClient.Version.HTTP_1_1)
        .followRedirects(HttpClient.Redirect.NORMAL)
        .connectTimeout(Duration.ofSeconds(10))
        .build();
      HttpResponse<String> res = client.send(req, HttpResponse.BodyHandlers.ofString());
      String body = res.body();

      //Sortir le code d'état de la réponse
      int statusCode = res.statusCode();
      System.out.println("statusCode: " + statusCode);

      //Juger le succès / l'échec par code d'état
      switch (res.statusCode()) {
        case 200:
          //Mapper la réponse HTTP JSON à la classe ResultSet
          return new ObjectMapper().readValue(body, ResultSet.class);
        case 403:
          //Informations d'erreur de sortie
          ErrorResponse errorResponse = new ObjectMapper().readValue(body, ErrorResponse.class);
          System.out.println("Message d'erreur: " + errorResponse.error.message);
          return null;
        default:
          return null;
      }

    } 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 com.fasterxml.jackson.annotation.JsonIgnoreProperties;

import java.util.List;

/**
 *Résultats de recherche.
 */
@JsonIgnoreProperties(ignoreUnknown = true) //Ignorer la propriété JSON inconnue
public class ResultSet {

  public List<Hit> hits;

  @JsonIgnoreProperties(ignoreUnknown = true) //Ignorer la propriété JSON inconnue
  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.

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
statusCode: 200
**************************************************
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
**************************************************
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

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
statusCode: 403
Message d'erreur: Your Request was Forbidden

Matériel de référence

Recommended Posts

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! Shopping Product Search (v3) avec Spring RestTemplate
Exemple de code pour appeler l'API Yahoo! Local Search en Java
[Java] J'ai essayé de mettre en œuvre la recherche de produits de l'API Yahoo
Exemple d'utilisation de l'API Bulk de Salesforce à partir d'un client Java avec PK-chunking
Intégration API de Java avec Jersey Client
[Java] Nouvelle spécification Implémentation de l'API de recherche de produits Yahoo!
Appelez l'API Amazon Product Advertising 5.0 (PA-API v5) en Java
Exemple de code pour analyser la date et l'heure avec SimpleDateFormat de Java
Coder Java depuis Emacs avec Eclim
Paramètre de délai d'expiration de l'API du client HTTP Java
Appelez l'API Java de TensorFlow depuis Scala
Exemple de code utilisant Minio de Java
Exemple de configuration minimale pour publier automatiquement Lambda par Java avec un pipeline de code