[JAVA] Beispielcode zum Aufrufen der Yahoo! Shopping Product Search (v3) -API mit Spring RestTemplate

Überblick

--Erstellen Sie ein Beispielprogramm, das die Yahoo! Shopping Product Search (v3) -API mit dem von Spring bereitgestellten HTTP-Client RestTemplate aufruft.

Diese Umgebung

Quellcode

Quellcodeliste

├── 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 {

  //Erforderlich, um RestTemplate zu verwenden
  // https://mvnrepository.com/artifact/org.springframework/spring-web
  implementation 'org.springframework:spring-web:5.2.7.RELEASE'

  //Erforderlich für JSON- und Klassenzuordnung
  // 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;

/**
 *Einkaufen:Produktsuche (v3)- Yahoo!Entwicklernetzwerk
 * 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); //Anwendungs-ID
      System.out.println("query: " + query); //Suchbegriff

      //Suche nach Produkten
      ResultSet rs = new ItemSearch().search(appid, query);
      for (ResultSet.Hit hit : rs.hits) {
        System.out.println("**************************************************");
        System.out.println("Produktname: " + hit.name);
        System.out.println("Beschreibung des Artikels: " + hit.description);
        System.out.println("Kopie fangen: " + hit.headLine);
        System.out.println("Bild-URL im Format 76 x 76: " + hit.image.small);
        System.out.println("Bild-URL mit einer Größe von 146 x 146: " + hit.image.medium);
        System.out.println("Produkt-URL: " + hit.url);
        System.out.println("Preis: " + hit.price);
      }
    } catch (Exception e) {
      System.out.println("Ein Fehler ist aufgetreten: " + e);
    }
  }

  /**
   *Suche nach Produkten.
   * @param appid Anwendungs-ID
   * @param query Suchwort
   * @Suchergebnisse zurückgeben
   * @löst eine Ausnahme aus, wenn ein Fehler auftritt
   */
  public ResultSet search(String appid, String query) throws Exception {

    try {
      //Erstellen Sie eine URL für API-Aufrufe
      String baseurl = "https://shopping.yahooapis.jp/ShoppingWebService/V3/itemSearch";
      String url = UriComponentsBuilder.fromUri(new URI(baseurl))
        .queryParam("query", query) //Suchbegriff
        .queryParam("results", 2) //Bis zu 2 Suchergebnisse
        .build(false)
        .encode()
        .toUriString();
      System.out.println("URL: " + url);

      //Erstellen Sie HTTP-Anforderungsinformationen
      HttpHeaders reqHeaders = new HttpHeaders();
      reqHeaders.set("User-Agent", "Yahoo AppID: " + appid); //Anwendungs-ID
      RequestEntity req = RequestEntity.get(new URI(url))
        .headers(reqHeaders)
        .build();

      //Rufen Sie die API auf, um das Ergebnis zu erhalten
      RestTemplate restTemplate = new RestTemplate();
      ResponseEntity<ResultSet> res = restTemplate.exchange(req, ResultSet.class);
      return res.getBody();

    } catch (RestClientResponseException e) {

      //Antwortstatusinformationen ausgeben
      int statusCode = e.getRawStatusCode();
      String statusText = e.getStatusText();
      System.out.println("RestClientResponseException.RawStatusCode: " + statusCode);
      System.out.println("RestClientResponseException.StatusText: " + statusText);

      //Ausgabefehlerinformationen
      String body = e.getResponseBodyAsString();
      ObjectMapper mapper = new ObjectMapper();
      ErrorResponse errorResponse = mapper.readValue(body, ErrorResponse.class);
      System.out.println("Fehlermeldung: " + errorResponse.error.message);

      throw e;

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

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

Eine Klasse, die die Antwort der Suchergebnisse darstellt.

package com.example;

import java.util.List;

/**
 *Suchergebnisse.
 */
public class ResultSet {

  public List<Hit> hits;

  public static class Hit {

    // hits/Namenszeichenfolge Produktname
    public String name;

    // hits/Beschreibungszeichenfolge Elementbeschreibung
    public String description;

    // hits/headLine string catch copy
    public String headLine;

    // hits/image
    public Image image;

    // hits/URL String Produkt URL
    public String url;

    // hits/Preis ganzzahliger Preis
    public int price;
  }

  public static class Image {

    // hits/image/kleine Zeichenfolge 76 × 76 Bild-URL
    public String small;

    // hits/image/mittlere Zeichenfolge Bild-URL mit einer Größe von 146 x 146
    public String medium;
  }
}

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

Eine Klasse, die Informationen zur Fehlerantwort darstellt.

package com.example;

import com.fasterxml.jackson.annotation.JsonProperty;

/**
 *Fehlerinformationen.
 */
public class ErrorResponse {

  @JsonProperty("Error")
  public Error error;

  public static class Error {

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

Ausführungsbeispiel

Geben Sie die verfügbare Anwendungs-ID und das Suchwort "cat" an.

Die Antwort des Suchergebnisses wird der ResultSet-Klasse zugeordnet und die Informationen ausgegeben.

$ gradle run -q --args="your_application_id cat"
appid: your_application_id
query:Katze
URL: https://shopping.yahooapis.jp/ShoppingWebService/V3/itemSearch?query=%E7%8C%AB&results=2
**************************************************
Produktname:Katzenspielzeug Fisch Roboter Katze Elektrisches Spielzeug Katze Automatisches Spielzeug Katzenspielzeug Automatisches Katzenspielzeug Elektrisches Katzenspielzeug Fisch
Beschreibung des Artikels:[Haustierspielzeug] Elektrischer Fischroboter Fischroboter Spielzeugkatze Elektrische Spielzeugkatze<br>[Automatische Schwimmfunktion] Wird vom Wassersensor automatisch eingeschaltet/Ausschalten. Entwickelt mit automatischen Roboterflossen<br>Es beginnt sich zu bewegen, sobald es ins Wasser gestellt wird, und schaltet sich automatisch aus, wenn es herausgenommen wird, wodurch Strom gespart wird.<br>[Mit LED-Licht] Da das LED-Licht eingebaut ist, leuchtet es im Dunkeln. Die leuchtenden und sich bewegenden Fische kitzeln den Tierjagdinstinkt<br>[Produktnutzungsszene] Automatisches Katzenspielzeug<br>[Anwendbare Haustiere] Scottish Fold Main Coon Rag Doll Russisches Blau Britisches Showhaar<br>Sibirische Kijitora Streunende Katze Amerikanische Carl Scottish Sabatra Hachiware Neko-chan<br>
Kopie fangen:Elektrischer Fischroboter, der den Jagdinstinkt von Katzen stimuliert
Bild-URL im Format 76 x 76: https://item-shopping.c.yimg.jp/i/c/himawaridifang-store_robo-fish1
Bild-URL mit einer Größe von 146 x 146: https://item-shopping.c.yimg.jp/i/g/himawaridifang-store_robo-fish1
Produkt-URL: https://store.shopping.yahoo.co.jp/himawaridifang-store/robo-fish1.html
Preis: 880
**************************************************
Produktname:Katzengeschirr, Katzenleine, Katzenbedarf, Haustierbedarf
Beschreibung des Artikels:Als Fluchtmaßnahme<br><br>Katzen geraten oft in Panik und versuchen zu fliehen oder zu toben, wenn sie ungewohnt bewegt werden, z. B. wenn sie ins Krankenhaus gehen oder umziehen. In einem solchen Fall ist es sehr sicher, es nicht nur in den Tierkäfig zu legen, sondern sich auch darauf vorzubereiten, es nach dem Anbringen des Gurtzeugs in den Tierkäfig zu legen. In dem unwahrscheinlichen Fall, dass Sie aufgrund des Schadens einer größeren Katastrophe evakuieren müssen, hilft dies auch, die Flucht zu verhindern, sodass immer mehr Eigentümer sie in ihren Katastrophenschutzgütern aufbewahren.<br><br>Für einen Spaziergang<br><br>脱走防止目的だけでなく、猫のFür einen Spaziergang使用するのもおすすめです。ハーネスは猫の身体の動きを邪魔しにくいので、のびのびと運動できて良いストレス発散になることでしょう。ただし、猫の性格によっては外に連れ出すことがかえってストレスとなる場合もありますので、お散歩はくれぐれも猫の様子をみつつ、交通状況などにも気を配りながら行ってください。<br><br>Es gibt vier Farbvarianten: Rot, Blau, Schwarz und Pink.<br>Aus Nylon<br><br>Halsumfang 16-26 cm<br>Taillenumfang 26-36 cm<br>Bleilänge 110 cm<br><br>Suchbegriffe: Katzenleine, Katzengeschirr, Blei für Katze, Punktverdauung, kostenloser Versand
Kopie fangen:Katzengeschirr Cat Lead Cat Lead Cat Collar
Bild-URL im Format 76 x 76: https://item-shopping.c.yimg.jp/i/c/sam-store_0030
Bild-URL mit einer Größe von 146 x 146: https://item-shopping.c.yimg.jp/i/g/sam-store_0030
Produkt-URL: https://store.shopping.yahoo.co.jp/sam-store/0030.html
Preis: 599

Geben Sie eine unbrauchbare Anwendungs-ID und das Suchwort "cat" an.

Die Fehlerantwort wird der ErrorResponse-Klasse zugeordnet und die Informationen werden ausgegeben.

$ gradle run -q --args="invalid_application_id cat"
appid: invalid_application_id
query:Katze
URL: https://shopping.yahooapis.jp/ShoppingWebService/V3/itemSearch?query=%E7%8C%AB&results=2
RestClientResponseException.RawStatusCode: 403
RestClientResponseException.StatusText: Forbidden
Fehlermeldung: Your Request was Forbidden
Ein Fehler ist aufgetreten: org.springframework.web.client.HttpClientErrorException$Forbidden: 403 Forbidden: [{
"Error" : {
"Message" : "Your Request was Forbidden"
}
} ... (512 bytes)]

Referenzmaterial

Recommended Posts

Beispielcode zum Aufrufen der Yahoo! Shopping Product Search (v3) -API mit Spring RestTemplate
Beispielcode zum Aufrufen der Yahoo! Shopping Product Search (v3) -API mit der offiziell von Java 11 eingeführten HTTP-Client-API
Beispielcode zum Aufrufen der Yahoo! Local Search API in Java
Rufen Sie die Amazon Product Advertising API 5.0 (PA-API v5) in Java auf
[Java] Ich habe versucht, die Yahoo API-Produktsuche zu implementieren
Aufrufen und Verwenden der API in Java (Spring Boot)
[Java] Neue Spezifikation Implementierung der Yahoo! -Produktsuch-API
Demo-Code, der Verzeichnisse mit Files.walkFileTree rekursiv durchsucht
Beispielcode zum Konvertieren von List in List <String> in Java Stream
RESTful API-Beispiel für mehrere Module mit IntelliJ + Jersey + Spring Framework
Führen Sie swagger-ui in die in Spring Boot implementierte REST-API ein
Beispiel für eine minimale RESTful-API-Konfiguration mit Jersey + Spring Framework
Versuchen Sie, die Springcode-Such-API mit Spring Boot aufzurufen
Erstellen Sie eine API zum Senden und Empfangen von Json-Daten mit Spring