[Java] Ich habe versucht, die Yahoo API-Produktsuche zu implementieren

Einführung

Ich habe versucht, mithilfe der Yahoo-API so etwas wie eine EC-Site zu erstellen, bin aber in eine Situation geraten, in der ich überhaupt nicht wusste, wie ich sie verwenden soll. Ich habe es nicht verstanden, auch wenn ich es nachgeschlagen habe, und es war ziemlich schwierig, deshalb werde ich es einschließlich der Bedeutung des Memos aufzeichnen.

Übrigens lerne ich seit ungefähr 3 Monaten Java.

Was Sie erreichen wollen

  1. Erhalten Sie Suchbegriffe aus dem HTML-Formular
  2. Übergeben Sie das Suchschlüsselwort in der Anforderung an die API
  3. Erhalten Sie als Antwort JSON mit Produktinformationen von der API
  4. Extrahieren Sie das Element aus JSON und legen Sie es in JavaBeans fest
  5. Speichern Sie JavaBeans in ArrayList
  6. Speichern Sie ArrayList im Anforderungsbereich und leiten Sie es zur Ergebnisausgabe an jsp weiter

Ich habe den Code geschrieben

Übergeben Sie Suchschlüsselwörter auf Anfrage an die API

Anscheinend besteht die Möglichkeit, eine Anfrage an die API zu senden, darin, eine Verbindung zur URL herzustellen. Dafür gab es eine Klasse. Das ist die ** HttpURLConnection-Klasse **.

Die grundlegenden Schritte sind

  1. Rufen Sie die URL für die API-Verbindung ab
  2. Stellen Sie eine Verbindung her
  3. Verbindungseinstellungen
  4. Verbindung

Es ist wie es ist.

  //Anwendungs-ID
  String appid = "Anwendungs-ID";
  //Empfängt Produktschlüsselwörter und speichert sie im String-Typ
  request.setCharacterEncoding("UTF-8");
  String query = request.getParameter("searchVal");
  //URL anfordern
  String url = "https://shopping.yahooapis.jp/ShoppingWebService/V1/json/itemSearch?appid="+appid+"&query="+query;
  //URL-Generierung für API-Verbindung
  URL url4conn = new URL(url);
  //Stellen Sie eine Verbindung zur URL für die API-Verbindung her
  HttpURLConnection conn = (HttpURLConnection)url4conn.openConnection();
  //Geben Sie die HTTP-Methode für GET an
  conn.setRequestMethod("GET");
  //Erlauben Sie nicht die Einreichung von Anfragen durch den Körper
  conn.setDoOutput(false);
  //Ermöglichen Sie die Übertragung der Reaktion durch den Körper
  conn.setDoInput(true);
  //Verbinden
  conn.connect();

Erhalten Sie als Antwort JSON mit Produktinformationen von der API

  //Da Sie jedoch beim Lesen ** JASON-Zeichenfolge ** erhalten können, müssen Sie diese mithilfe der Bibliothek in ** JASON-Knoten (Typ für JSON) ** konvertieren. Die grundlegenden Schritte sind: 1. Lesen Sie die Antwort. 2. Konvertieren Sie die JSON-Zeichenfolge in einen JSON-Knoten. Antwort lesen(Holen Sie sich JASON String)
  BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
  String json = br.readLine();
            
  //Lesen Sie die JSON-Zeichenfolge und konvertieren Sie sie in das JsonNode-Objekt
  ObjectMapper mapper = new ObjectMapper();
  JsonNode root = mapper.readTree(json);

Extrahieren Sie Elemente aus JSON und legen Sie sie in JavaBeans fest

Die grundlegenden Schritte sind

  1. ** Extrahieren Sie ein bestimmtes Element aus einem JSON-Knoten ** und speichern Sie es in einem String-Typ
  2. Stellen Sie es in JavaBeans ein

Es ist wie es ist.

Verwenden Sie ** JsonNode.get () **, um ein bestimmtes Element von einem JSON-Knoten abzurufen.

  //Generieren Sie eine ArrayList, in der Beans gespeichert sind, die Produktsuchergebnisse enthalten
            ArrayList<productDataBeans> pdbList = new ArrayList<productDataBeans>();
            
  //Extrahieren Sie 10 Elemente aus JSON und speichern Sie sie im String-Typ
  //Legen Sie es in Beans fest und speichern Sie Beans in 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();
                
        //Generieren Sie eine Instanz von Beans, um die Ergebnisse der Produktsuche zu speichern
        productDataBeans pdb = new productDataBeans();
        pdb.setImageURL(imageURL);
        pdb.setProductName(productName);
        pdb.setPrice(price);  
                
        pdb.setQuery(query);
        pdb.setSearchResultNum(SearchResultNum);
                
        pdbList.add(pdb);
   }
            
  //Speichern Sie ArrayList im Anforderungsbereich
  request.setAttribute("resultData", pdbList);

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

Ergänzung - Über die JSON-Bibliothek

Ich erwähnte, dass Sie die gelesene JSON-Zeichenfolge in einen JSON-Knoten konvertieren müssen, aber im Fall von Jackson benötigen Sie drei Bibliotheken.

Jackson-CoreJackson-AnmerkungenJackson-Datenbank

Sie können es herunterladen, indem Sie die verknüpfte Version auswählen und auf die Bundle-Schaltfläche klicken.

Recommended Posts

[Java] Ich habe versucht, die Yahoo API-Produktsuche zu implementieren
[Java] Neue Spezifikation Implementierung der Yahoo! -Produktsuch-API
Ich habe versucht, TCP / IP + BIO mit JAVA zu implementieren
Ich habe versucht, die Firebase-Push-Benachrichtigung in Java zu implementieren
Ich habe versucht, Sterling Sort mit Java Collector zu implementieren
Ich habe versucht, die Methode der gegenseitigen Teilung von Eugrid in Java zu implementieren
Ich habe versucht, mit Java zu interagieren
Ich habe versucht, die Java8 Stream API zu verwenden
Ich habe versucht, das Java-Lernen zusammenzufassen (1)
Ich habe jetzt versucht, Java 8 zusammenzufassen
Ich habe versucht, die Elasticsearch-API in Java zu verwenden
Ich habe versucht, Java-Lambda-Ausdrücke zusammenzufassen
Ich habe versucht, AOJs binäre Suche zu lösen
Ich habe versucht, das Iterator-Muster zu implementieren
Ich habe versucht, die Stream-API zusammenzufassen
Beispielcode zum Aufrufen der Yahoo! Local Search API in Java
Ich habe versucht, eine Standardauthentifizierung mit Java durchzuführen
Java Ich habe versucht, einen einfachen Block zu brechen
[Java] Erstellen Sie so etwas wie eine Produktsuch-API
Ich habe versucht, neunundneunzig in Java auszugeben
Ich habe versucht, Alexa-Fähigkeiten mit Java zu erstellen
Ich habe versucht, einen Server mit Netty zu implementieren
Ich habe versucht, den Block mit Java zu brechen (1)
Beispielcode zum Aufrufen der Yahoo! Shopping Product Search (v3) -API mit der offiziell von Java 11 eingeführten HTTP-Client-API
Rails-API-Modus Ich habe versucht, die Mehrfachsuchfunktion für Schlüsselwörter mithilfe von Arrays und iterativer Verarbeitung zu implementieren.
Beispielcode zum Aufrufen der Yahoo! Shopping Product Search (v3) -API mit Spring RestTemplate
Versuchte Mastodons Toot- und Streaming-API in Java
[Java 11] Ich habe versucht, Java auszuführen, ohne mit Javac zu kompilieren
[Java] Ich habe versucht, Paizas B-Rang-Problem zu lösen
Ich habe versucht, SQS mit AWS Java SDK zu betreiben
# 2 [Anmerkung] Ich habe versucht, neunundneunzig mit Java zu berechnen.
Ich habe versucht, eine Clova-Fähigkeit in Java zu erstellen
Ich habe versucht, eine Anmeldefunktion mit Java zu erstellen
Ich habe versucht, Animationen mit der Blazor + Canvas-API zu zeichnen
~ Ich habe jetzt versucht, funktionale Programmierung mit Java zu lernen ~
Ich habe versucht herauszufinden, was sich in Java 9 geändert hat
Ich habe Drools (Java, InputStream) ausprobiert.
[Java] Einführung in die Stream-API
Ich habe versucht, yum-cron zu verifizieren
[Java] So implementieren Sie Multithreading
Ich habe versucht, ein Tool zum Vergleichen von Amazon-Produktpreisen auf der ganzen Welt mit Java, der Amazon Product Advertising API und der Currency API (29.01.2017) zu erstellen.
Ich habe versucht, Metaprogrammierung mit Java
Ich habe versucht, die ähnliche Funktion durch asynchrone Kommunikation zu implementieren
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
Ich habe versucht, eine Java EE-Anwendung mit OpenShift zu modernisieren.
[JDBC] Ich habe versucht, von Java aus auf die SQLite3-Datenbank zuzugreifen.
Ich möchte eine Produktinformationsbearbeitungsfunktion ~ part1 ~ implementieren
Ich möchte die Java 8 DateTime-API (jetzt) langsam verwenden.
Ich habe versucht, Java Optional und Guard-Klausel koexistieren zu lassen
Ich habe versucht, den Chat mit dem Minecraft-Server mit der Discord-API zu verknüpfen
[Rails] Ich habe versucht, die Stapelverarbeitung mit der Rake-Task zu implementieren
Ich habe versucht, in Java von einer Zeichenfolge in einen LocalDate-Typ zu konvertieren
Ich habe versucht, Dapr in Java zu verwenden, um die Entwicklung von Mikroservices zu erleichtern
Ich habe versucht, eine Webanwendung voller Fehler mit Kotlin zu implementieren