--Créez un exemple de programme qui appelle l'API Yahoo! Shopping Product Search (v3) à l'aide du client HTTP RestTemplate fourni par Spring.
├── 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;
}
}
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
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)]
Recommended Posts