--Erstellen Sie ein Beispielprogramm, das die Yahoo! Shopping Product Search (v3) -API mithilfe der von Java 11 offiziell eingeführten HTTP-Client-API aufruft (HttpClient-, HttpRequest-, HttpResponse-Klassen usw. des Pakets java.net.http).
├── 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 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 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;
/**
*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);
if (rs != null) {
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);
e.printStackTrace();
}
}
/**
*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 = baseurl +
"?query=" + URLEncoder.encode(query, StandardCharsets.UTF_8) + //Suchbegriff
"&results=2"; //Bis zu 2 Suchergebnisse
System.out.println("URL: " + url);
//Erstellen Sie HTTP-Anforderungsinformationen
HttpRequest req = HttpRequest.newBuilder(new URI(url))
.GET()
.setHeader("User-Agent", "Yahoo AppID: " + appid) //Anwendungs-ID
.timeout(Duration.ofSeconds(10))
.build();
//Rufen Sie die API auf, um das Ergebnis zu erhalten
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();
//Geben Sie den Statuscode der Antwort aus
int statusCode = res.statusCode();
System.out.println("statusCode: " + statusCode);
//Beurteilen Sie Erfolg / Misserfolg anhand des Statuscodes
switch (res.statusCode()) {
case 200:
//Ordnen Sie die HTTP-Antwort JSON der ResultSet-Klasse zu
return new ObjectMapper().readValue(body, ResultSet.class);
case 403:
//Ausgabefehlerinformationen
ErrorResponse errorResponse = new ObjectMapper().readValue(body, ErrorResponse.class);
System.out.println("Fehlermeldung: " + errorResponse.error.message);
return null;
default:
return null;
}
} catch (Exception e) {
throw e;
}
}
}
src/main/java/com/example/ResultSet.java
Eine Klasse, die die Antwort der Suchergebnisse darstellt.
package com.example;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import java.util.List;
/**
*Suchergebnisse.
*/
@JsonIgnoreProperties(ignoreUnknown = true) //Unbekannte JSON-Eigenschaft ignorieren
public class ResultSet {
public List<Hit> hits;
@JsonIgnoreProperties(ignoreUnknown = true) //Unbekannte JSON-Eigenschaft ignorieren
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.
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
statusCode: 200
**************************************************
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 einer größeren Katastrophe evakuiert werden müssen, wird dies dazu beitragen, die Flucht zu verhindern, sodass immer mehr Eigentümer es 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
**************************************************
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
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
statusCode: 403
Fehlermeldung: Your Request was Forbidden
Recommended Posts