--Erstellen Sie ein Beispielprogramm, das die Yahoo! Shopping Product Search (v3) -API mit dem von Spring bereitgestellten HTTP-Client RestTemplate aufruft.
├── 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;
}
}
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
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)]
Recommended Posts