[Java] J'ai essayé de mettre en œuvre la recherche de produits de l'API Yahoo

introduction

J'ai essayé de créer quelque chose comme un site EC en utilisant l'API de Yahoo, mais je suis tombé dans une situation où je ne savais pas du tout comment l'utiliser. Je ne l'ai pas compris même si je l'ai recherché, et c'était assez difficile, alors je vais l'enregistrer avec la signification du mémo.

Au fait, j'apprends Java depuis environ 3 mois.

Ce que vous voulez réaliser

  1. Recevoir des mots-clés de recherche à partir du formulaire HTML
  2. Transmettez le mot-clé de recherche à l'API dans la requête
  3. Recevoir JSON des informations produit de l'API en réponse
  4. Extrayez l'élément de JSON et définissez-le dans JavaBeans
  5. Stocker les JavaBeans dans ArrayList
  6. Stockez ArrayList dans la portée de la requête et transférez-le à jsp pour la sortie des résultats

J'ai écrit le code

Transmettre les mots-clés de recherche à l'API dans la demande

Apparemment, la façon d'envoyer une requête à l'API est de se connecter à l'URL, Il y avait une classe pour ça. C'est la ** classe HttpURLConnection **.

Les étapes de base sont

  1. Obtenez l'URL de la connexion API
  2. Obtenez une connexion
  3. Paramètres de connexion
  4. Connexion

C'est comme ça.

  //ID d'application
  String appid = "ID d'application";
  //Reçoit les mots clés du produit et les stocke dans le type String
  request.setCharacterEncoding("UTF-8");
  String query = request.getParameter("searchVal");
  //URL de la demande
  String url = "https://shopping.yahooapis.jp/ShoppingWebService/V1/json/itemSearch?appid="+appid+"&query="+query;
  //Génération d'URL pour la connexion API
  URL url4conn = new URL(url);
  //Obtenir une connexion à l'URL pour la connexion à l'API
  HttpURLConnection conn = (HttpURLConnection)url4conn.openConnection();
  //Spécifiez la méthode HTTP pour GET
  conn.setRequestMethod("GET");
  //Ne pas autoriser la soumission d'une demande par l'organisme
  conn.setDoOutput(false);
  //Permettre la transmission corporelle de la réponse
  conn.setDoInput(true);
  //Lien
  conn.connect();

Recevoir JSON des informations produit de l'API en réponse

Apparemment, pour obtenir la réponse de l'API, utilisez BufferedReader pour lire la réponse. Cependant, comme vous pouvez obtenir la ** chaîne de caractères JASON ** au stade de la lecture, vous devez la convertir en ** nœud JASON (type pour JSON) ** à l'aide de la bibliothèque.

Les étapes de base sont

  1. Lire la réponse
  2. Convertissez la chaîne JSON en nœud JSON

C'est comme ça.

  //Lire la réponse(Obtenir la chaîne JASON)
  BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
  String json = br.readLine();
            
  //Lire la chaîne JSON et la convertir en objet JsonNode
  ObjectMapper mapper = new ObjectMapper();
  JsonNode root = mapper.readTree(json);

Extraire des éléments de JSON et les définir dans JavaBeans

Les étapes de base sont

  1. ** Extraire un élément spécifique d'un nœud JSON ** et le stocker dans un type String
  2. Définissez-le dans JavaBeans

C'est comme ça.

Utilisez ** JsonNode.get () ** pour récupérer un élément spécifique à partir d'un nœud JSON.

  //Générer une ArrayList qui stocke des Beans contenant des résultats de recherche de produits
            ArrayList<productDataBeans> pdbList = new ArrayList<productDataBeans>();
            
  //Extraire 10 éléments de JSON et stocker dans le type String
  //Définissez-le dans Beans et stockez Beans dans ArrayList
  for(int i = 0; i <= 9; i++) {
        String hitNum = String.valueOf(i);
        String imageURL = root.get("ResultSet").get("0").get("Result").get(hitNum).get("Image").get("Small").textValue();
        String productName = root.get("ResultSet").get("0").get("Result").get(hitNum).get("Name").textValue();
        String price = root.get("ResultSet").get("0").get("Result").get(hitNum).get("Price").get("_value").textValue();
        int SearchResultNum = root.get("ResultSet").get("totalResultsAvailable").asInt();
                
        //Générer une instance de Beans pour stocker les résultats de la recherche de produits
        productDataBeans pdb = new productDataBeans();
        pdb.setImageURL(imageURL);
        pdb.setProductName(productName);
        pdb.setPrice(price);  
                
        pdb.setQuery(query);
        pdb.setSearchResultNum(SearchResultNum);
                
        pdbList.add(pdb);
   }
            
  //Stocker ArrayList dans la portée de la requête
  request.setAttribute("resultData", pdbList);

  br.close();
            
  request.getRequestDispatcher("/search.jsp").forward(request, response);

Supplément - À propos de la bibliothèque JSON

J'ai mentionné que vous devez convertir la chaîne JSON lue en un nœud JSON, mais dans le cas de Jackson, vous avez besoin de trois bibliothèques.

Jackson-coreJackson-annotationsJackson-databind

Vous pouvez le télécharger en sélectionnant la version liée et en appuyant sur le bouton Bundle.

Recommended Posts

[Java] J'ai essayé de mettre en œuvre la recherche de produits de l'API Yahoo
[Java] Nouvelle spécification Implémentation de l'API de recherche de produits Yahoo!
J'ai essayé d'implémenter TCP / IP + BIO avec JAVA
J'ai essayé d'implémenter la notification push Firebase en Java
Essayez de mettre en œuvre à l'aide de l'API de recherche de produits Rakuten (facile)
J'ai essayé d'implémenter Sterling Sort avec Java Collector
J'ai essayé d'implémenter la méthode de division mutuelle d'Eugrid en Java
J'ai essayé d'interagir avec Java
J'ai essayé d'utiliser l'API Java8 Stream
J'ai essayé de résumer l'apprentissage Java (1)
J'ai essayé de résumer Java 8 maintenant
J'ai essayé d'utiliser l'API Elasticsearch en Java
J'ai essayé de résumer les expressions Java lambda
J'ai essayé de résoudre la recherche binaire d'AOJ
J'ai essayé d'implémenter le modèle Iterator
J'ai essayé de résumer l'API Stream
Exemple de code pour appeler l'API Yahoo! Local Search en Java
J'ai essayé de faire une authentification de base avec Java
java j'ai essayé de casser un simple bloc
[Java] Créez quelque chose comme une API de recherche de produits
J'ai essayé de sortir quatre-vingt-dix-neuf en Java
J'ai essayé de créer une compétence Alexa avec Java
J'ai essayé d'implémenter un serveur en utilisant Netty
J'ai essayé de casser le bloc avec java (1)
Exemple de code pour appeler l'API Yahoo! Shopping Product Search (v3) avec l'API client HTTP officiellement introduite à partir de Java 11
Mode API Rails J'ai essayé d'implémenter la fonction de recherche multiple par mot-clé à l'aide de tableaux et d'un traitement itératif.
Exemple de code pour appeler l'API Yahoo! Shopping Product Search (v3) avec Spring RestTemplate
Essayé l'API Toot et Streaming de Mastodon en Java
[Java 11] J'ai essayé d'exécuter Java sans compiler avec javac
[Java] J'ai essayé de résoudre le problème de rang B de Paiza
J'ai essayé de faire fonctionner SQS en utilisant AWS Java SDK
# 2 [Note] J'ai essayé de calculer quatre-vingt-dix-neuf avec Java.
J'ai essayé de créer une compétence Clova en Java
J'ai essayé de créer une fonction de connexion avec Java
J'ai essayé de dessiner une animation avec l'API Blazor + canvas
~ J'ai essayé d'apprendre la programmation fonctionnelle avec Java maintenant ~
J'ai essayé de découvrir ce qui avait changé dans Java 9
J'ai essayé Drools (Java, InputStream)
[Java] Introduction à l'API Stream
J'ai essayé de vérifier yum-cron
[Java] Comment implémenter le multithreading
J'ai essayé de créer un outil de comparaison des prix des produits Amazon dans le monde entier avec Java, l'API Amazon Product Advertising, l'API Currency (29/01/2017)
J'ai essayé la métaprogrammation avec Java
J'ai essayé d'implémenter la fonction similaire par communication asynchrone
J'ai essayé de créer un environnement de développement java8 avec Chocolatey
J'ai essayé de moderniser une application Java EE avec OpenShift.
[JDBC] J'ai essayé d'accéder à la base de données SQLite3 depuis Java.
Je souhaite implémenter une fonction d'édition des informations produit ~ part1 ~
Je souhaite utiliser l'API Java 8 DateTime lentement (maintenant)
J'ai essayé de faire coexister Java Optional et la clause de garde
J'ai essayé de lier le chat avec le serveur de Minecraft avec l'API Discord
[Rails] J'ai essayé d'implémenter le traitement par lots avec la tâche Rake
J'ai essayé de convertir une chaîne de caractères en un type LocalDate en Java
J'ai essayé d'utiliser Dapr en Java pour faciliter le développement de microservices
J'ai essayé d'implémenter une application web pleine de bugs avec Kotlin