Hinweise zur Implementierung der Google Books-API in den Versionen Java Okhttp und Gson sowie Okhttp und Jackson

Es ist ein Memo, als ich eine Programmanwendung erstellt habe, um zu registrieren, was ich im Internet mit einem Barcodeleser gelesen habe

okhttp und gson version

Überblick

java

in maven

gson ist eine Bibliothek zum Konvertieren zwischen Java-Objekten und Daten im JSON-Format.

gson version 2.8.6 verwendet Seite mit Erklärung https://qiita.com/naoi/items/6b184700b2a41fb46356

OkHttp ist standardmäßig ein effizienter HTTP-Client

Verwenden Sie okhttp Version 3.7.0 Erklärungsseite https://square.github.io/okhttp/

   <dependency>
  		<groupId>com.google.code.gson</groupId>
  		<artifactId>gson</artifactId>
  		<version>2.8.6</version>
  	</dependency> 
    <dependency>
  		<groupId>com.squareup.okhttp3</groupId>
  		<artifactId>okhttp</artifactId>
  		<version>3.7.0</version>
  	</dependency>

google books api Offizielle Seite https://developers.google.com/books/

Screenshot from Gyazo

Dieses Mal wird der von isbn mit dem Barcodeleser gelesene Code als Anfrage gesendet, sodass der folgende Code verwendet wird.

https://www.googleapis.com/books/v1/volumes?q=isbn:Isbn-Code auf der Rückseite
//Es sieht aus wie unten
https://www.googleapis.com/books/v1/volumes?q=isbn:9784844336778


json kehrte zurück, nachdem er eine Anfrage mit Google Books API gesendet hatte

Ich bin mir nicht sicher, ob ich ehrlich bin Wenn es eine Möglichkeit gibt, die Hierarchie zu verstehen, posten Sie sie bitte

// 20200101165936
// https://www.googleapis.com/books/v1/volumes?q=isbn:9784844336778

{
  "kind": "books#volumes",
  "totalItems": 1,
  "items": [
    {
      "kind": "books#volume",
      "id": "FQKOBAAAQBAJ",
      "etag": "YZLyBEypyf4",
      "selfLink": "https://www.googleapis.com/books/v1/volumes/FQKOBAAAQBAJ",
      "volumeInfo": {
        "title": "Eine erfrischende Einführung in Java Practical Edition 2nd Edition",
        "authors": [
          "Kiyotaka Nakayama"
        ],
        "publisher": "Impress Co., Ltd.",
        "publishedDate": "2014-09-22",
        "description": "Einführung einer überarbeiteten Version, die die Erklärung der bemerkenswerten Funktionen von Java 8 wie Lambda-Ausdruck und Datums-API ergänzt und die Erklärung von agilen verwandten Mustern und Designmustern gründlich stärkt! Wie beim Schwesterbuch "Einführung in Java" wird die Erklärung fortgesetzt, während "Warum?" Fest beantwortet wird. Daher sind Kenntnisse, die für die Beherrschung von Java bei der Arbeit unerlässlich sind, wie reguläre Ausdrücke, Sammlungen, Datenbankverknüpfungen, Refactoring, Parallelverarbeitung usw. Es ist jedoch erfrischend, macht Spaß und ist leicht zu erlernen. Empfohlen für diejenigen, die die grundlegenden grammatikalischen und objektorientierten Konzepte verstanden haben und noch weiter gehen möchten. Problem",
        "industryIdentifiers": [
          {
            "type": "ISBN_13",
            "identifier": "9784844336778"
          },
          {
            "type": "ISBN_10",
            "identifier": "4844336770"
          }
        ],
        "readingModes": {
          "text": false,
          "image": true
        },
        "pageCount": 628,
        "printType": "BOOK",
        "categories": [
          "Computers"
        ],
        "maturityRating": "NOT_MATURE",
        "allowAnonLogging": true,
        "contentVersion": "2.3.0.0.preview.1",
        "panelizationSummary": {
          "containsEpubBubbles": false,
          "containsImageBubbles": false
        },
        "imageLinks": {
          "smallThumbnail": "http://books.google.com/books/content?id=FQKOBAAAQBAJ&printsec=frontcover&img=1&zoom=5&edge=curl&source=gbs_api",
          "thumbnail": "http://books.google.com/books/content?id=FQKOBAAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api"
        },
        "language": "ja",
        "previewLink": "http://books.google.co.jp/books?id=FQKOBAAAQBAJ&printsec=frontcover&dq=isbn:9784844336778&hl=&cd=1&source=gbs_api",
        "infoLink": "https://play.google.com/store/books/details?id=FQKOBAAAQBAJ&source=gbs_api",
        "canonicalVolumeLink": "https://play.google.com/store/books/details?id=FQKOBAAAQBAJ"
      },
      "saleInfo": {
        "country": "JP",
        "saleability": "FOR_SALE",
        "isEbook": true,
        "listPrice": {
          "amount": 2596.0,
          "currencyCode": "JPY"
        },
        "retailPrice": {
          "amount": 2336.0,
          "currencyCode": "JPY"
        },
        "buyLink": "https://play.google.com/store/books/details?id=FQKOBAAAQBAJ&rdid=book-FQKOBAAAQBAJ&rdot=1&source=gbs_api",
        "offers": [
          {
            "finskyOfferType": 1,
            "listPrice": {
              "amountInMicros": 2596000000,
              "currencyCode": "JPY"
            },
            "retailPrice": {
              "amountInMicros": 2336000000,
              "currencyCode": "JPY"
            }
          }
        ]
      },
      "accessInfo": {
        "country": "JP",
        "viewability": "PARTIAL",
        "embeddable": true,
        "publicDomain": false,
        "textToSpeechPermission": "ALLOWED",
        "epub": {
          "isAvailable": false
        },
        "pdf": {
          "isAvailable": true,
          "acsTokenLink": "http://books.google.co.jp/books/download/%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8BJava%E5%85%A5%E9%96%80_%E5%AE%9F%E8%B7%B5-sample-pdf.acsm?id=FQKOBAAAQBAJ&format=pdf&output=acs4_fulfillment_token&dl_type=sample&source=gbs_api"
        },
        "webReaderLink": "http://play.google.com/books/reader?id=FQKOBAAAQBAJ&hl=&printsec=frontcover&source=gbs_api",
        "accessViewStatus": "SAMPLE",
        "quoteSharingAllowed": false
      },
      "searchInfo": {
        "textSnippet": "Einführung einer überarbeiteten Version, die die Erklärung der bemerkenswerten Funktionen von Java 8 wie Lambda-Ausdruck und Datums-API ergänzt und die Erklärung von agilen verwandten Mustern und Designmustern gründlich stärkt! Wie das Schwesterbuch "Einführung in Java", "Warum?"..."
      }
    }
  ]
}

Generieren Sie eine JSON-Modellklasse (pojo)

https://qiita.com/riversun/items/cdd990e96c2bbf9cb043 Auf dieser Seite habe ich auf das automatische Generieren einer Modellklasse (pojo) mit jsonschema2pojo verwiesen.

Generierte Klassendatei

Screenshot from Gyazo

Der Inhalt der Model-Klasse

Screenshot from Gyazo

@SerializeName ("Name") @Expose öffentlicher Typname

Da items "items": [] ist, ist es List items = null;

Screenshot from Gyazo

Hinweis

Die Modellklasse wird automatisch generiert, ist jedoch möglicherweise nicht ausreichend. Erstellen Sie daher diejenige, die nicht von Ihnen selbst generiert wurde.

Java-Hauptcode

package main;

import java.io.IOException;
import java.util.List;

import com.example.qson.Item;
import com.example.qson.ListPrice;
import com.example.qson.Model;
import com.example.qson.SaleInfo;
import com.example.qson.VolumeInfo;
import com.google.gson.Gson;

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class main {

    public static final String url = "https://www.googleapis.com/books/v1/volumes?q=isbn:";

    public static void main(String[] args) {
        //isbn code
        Long isbn = 9784844336778L;

        //Halten Sie json
        String json = "";

        OkHttpClient okHttpClient;

        okHttpClient = new OkHttpClient();

        Request.Builder builder = new Request.Builder();

        //Geben Sie die Adresse ein, um die Anfrage mit URL zu senden
        builder.url(url + isbn);

        Request request = builder.build();

        Response response = null;
        try {
            response = okHttpClient.newCall(request).execute();
            //Ich habe die JSON-Informationen von der Web-API zurückgegeben, wie oben auf JSON hier beschrieben
            json = response.body().string();
        } catch (IOException e) {
            e.printStackTrace();
        }

        Gson gson = new Gson();

        Model models = gson.fromJson(json, Model.class);
        List<Item> items2 = models.items;
        VolumeInfo  volumeInfo = items2.get(0).volumeInfo;
        ImageLinks imageLinks = volumeInfo.imageLinks;

        SaleInfo saleInfo = items2.get(0).saleInfo;
        ListPrice listPrice = saleInfo.listPrice;

        //Wenn der Titel aus der Modellklasse geschrieben wird
        //Die Elementklasse ist Liste<Item>Weil es ein Typ ist.get()Anfügen
        System.out.println(models.items.get(0).volumeInfo.title);//title

        //Wenn die Modellklasse in die volumeinfo-Klasse geändert und angezeigt wird
        System.out.println("title: "    + volumeInfo.title);//title
        System.out.println("author: "   + volumeInfo.authors);//author
        System.out.println("Veröffentlichungsdatum: "   + volumeInfo.publishedDate);//publishedDate
        System.out.println("der Herausgeber: "   + volumeInfo.publisher);//publisher
        System.out.println("Listenpreis:"      + listPrice.amount);
        System.out.println("Erläuterung:"     + volumeInfo.description);//description
        System.out.println("Seitenzahl:" + volumeInfo.pageCount);//pageCount
        System.out.println("Kleines Vorschaubild:" + imageLinks.smallThumbnail);//smallThumbnail
        System.out.println("Miniaturansicht:"         + imageLinks.thumbnail);//thumbnail

    }
}

Ausführungsergebnis Screenshot from Gyazo

Ich konnte zu dem Gefühl gehen

okhttp und jackson versionen

Überblick

java

in maven

OkHttp ist standardmäßig ein effizienter HTTP-Client

Verwenden Sie okhttp Version 3.7.0 Erklärungsseite https://square.github.io/okhttp/

jackson

Jackson-Core-Version: 2.10.0 jackson-annotations version: 2.10.0 Jackson-Databind-Version: 2.10.0

Wird eingesetzt

  <dependency>
  		<groupId>com.fasterxml.jackson.core</groupId>
  		<artifactId>jackson-core</artifactId>
  		<version>2.10.0</version>
  	</dependency>
  	<dependency>
  		<groupId>com.fasterxml.jackson.core</groupId>
  		<artifactId>jackson-annotations</artifactId>
  		<version>2.10.0</version>
  	</dependency>
  	<dependency>
  		<groupId>com.fasterxml.jackson.core</groupId>
  		<artifactId>jackson-databind</artifactId>
  		<version>2.10.0</version>
  	</dependency>
    <dependency>
  		<groupId>com.squareup.okhttp3</groupId>
  		<artifactId>okhttp</artifactId>
  		<version>3.7.0</version>
  	</dependency>

Java Main

import java.io.IOException;
import java.sql.Date;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class main {
    public static final String url = "https://www.googleapis.com/books/v1/volumes?q=isbn:";

    public static void main(String[] args) {
        //TODO automatisch generierter Methodenstub
        Long isbn = 9784295007807L;

        //Halten Sie json
        String json ="";

        //Buchtitel
        String title = "";
        //Autor
        String author = "";
        //Veröffentlichungsdatum
        Date publishedDate = null;
        String day = "";
        //der Herausgeber
        String publisher = "";
        //Listenpreis
        Integer listPrice = null;
        //Erläuterungstext
        String description = "";
        //Seitenzahl
        Integer pageCount = null;
        //kleines Vorschaubild
        String smallThumbnail ="";
        //Miniaturansicht
        String thumbnail = "";


        OkHttpClient okHttpClient;

        okHttpClient = new OkHttpClient();

        Request.Builder builder = new Request.Builder();

        //Geben Sie die Adresse ein, um die Anfrage mit URL zu senden
        builder.url(url + isbn);

        Request request = builder.build();

        Response response = null;
        try {
            response = okHttpClient.newCall(request).execute();
            json = response.body().string();
        } catch (IOException e) {
            e.printStackTrace();
        }

        //Zeigen Sie den Inhalt von json an
        System.out.println(json);

        //Verarbeitung, um den Inhalt von json von hier zu extrahieren und anzuzeigen
        ObjectMapper mapper = new ObjectMapper();
        try {
            JsonNode node = mapper.readTree(json);

             //get("value")Wert ist von json"title": "Eine erfrischende Einführung in Java Practical Edition 2nd Edition"
             //Der Titelteil ist der Wert
             //Da title am Ende ein String-Typ ist.asText();Anfügen
             title =          node.get("items").get(0).get("volumeInfo").get("title").asText();
             author =         node.get("items").get(0).get("volumeInfo").get("authors").get(0).asText();
             publisher =      node.get("items").get(0).get("volumeInfo").get("publisher").asText();

             //Als String-Tag empfangen, um das Veröffentlichungsdatum in den Datumstyp umzuwandeln
             day = node.get("items").get(0).get("volumeInfo").get("publishedDate").textValue();

             //Konvertieren Sie die Zeichenfolge in den SQL-Typ Datum
             publishedDate =  Date.valueOf(day);

             //listPrice ist vom Typ int, also am Ende.asInt();Anfügen
             listPrice =      node.get("items").get(0).get("saleInfo").get("listPrice").get("amount").asInt();
             description =    node.get("items").get(0).get("volumeInfo").get("description").asText();
             pageCount =      node.get("items").get(0).get("volumeInfo").get("pageCount").asInt();
             smallThumbnail = node.get("items").get(0).get("volumeInfo").get("imageLinks").get("smallThumbnail").asText();
             thumbnail =      node.get("items").get(0).get("volumeInfo").get("imageLinks").get("thumbnail").asText();

        } catch (IOException e) {
            e.printStackTrace();

        }

        System.out.println("title: " +title);
        System.out.println("author: " +author);
        System.out.println("der Herausgeber: "+publisher);
        System.out.println("Veröffentlichungsdatum: " + publishedDate);
        System.out.println("Listenpreis: " + listPrice + "Kreis");
        System.out.println("Erläuterungstext: " + description);
        System.out.println("Seitenzahl: " + pageCount);
        System.out.println("Kleines Vorschaubild: " + smallThumbnail);
        System.out.println("Miniaturansicht: " +thumbnail);

    }

}

Screenshot from Gyazo

Ich konnte es so machen

Recommended Posts

Hinweise zur Implementierung der Google Books-API in den Versionen Java Okhttp und Gson sowie Okhttp und Jackson
Erstellen Sie eine API mit Retrofit2, Okhttp3 und Gson (Java).
Laden Sie Notizen in Java auf S3 hoch und laden Sie sie herunter
Hinweise zur Signalsteuerung in Java
Hinweise zum Java-Pfad und -Paket
Hinweise zur Stream-API und zu SQL von Java
Versuchte Mastodons Toot- und Streaming-API in Java
[Java] Konvertieren Sie JSON in Java und Java in JSON-How to use GSON and Jackson-
Hinweise zur Verwendung regulärer Ausdrücke in Java
Zabbix API in Java
JSON in Java und Jackson Teil 1 Gibt JSON vom Server zurück
Aufrufen und Verwenden der API in Java (Spring Boot)
Tipps zur Verwendung von Salesforce SOAP und Bulk API in Java
Generieren Sie AWS Signature V4 in Java und fordern Sie die API an