Remarques sur la mise en œuvre de l'API Google Books dans les versions java okhttp et gson et les versions okhttp et jackson

C'est un mémo lorsque j'ai créé une application de programme pour enregistrer ce que j'ai lu sur le Web avec un lecteur de code à barres

okhttp et version gson

Aperçu

java

à maven

gson est une bibliothèque de conversion entre des objets Java et des données au format JSON.

gson version 2.8.6 utilisée Site avec explication https://qiita.com/naoi/items/6b184700b2a41fb46356

OkHttp est un client HTTP efficace par défaut

Utilisez okhttp version 3.7.0 Site d'explication 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 Page Officielle https://developers.google.com/books/

Screenshot from Gyazo

Cette fois, le code lu par isbn avec le lecteur de code barre sera envoyé en tant que demande, donc le code ci-dessous sera utilisé.

https://www.googleapis.com/books/v1/volumes?q=isbn:Code Isbn à l'arrière
//Cela ressemble à ci-dessous
https://www.googleapis.com/books/v1/volumes?q=isbn:9784844336778


json est revenu après avoir envoyé une demande avec l'API google books

Je ne suis pas sûr d'être honnête S'il existe un moyen de comprendre la hiérarchie, veuillez la publier

// 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": "Une introduction rafraîchissante à Java Practical Edition 2nd Edition",
        "authors": [
          "Kiyotaka Nakayama"
        ],
        "publisher": "Impress Co., Ltd.",
        "publishedDate": "2014-09-22",
        "description": "Présentation d'une version révisée qui complète l'explication des fonctionnalités notables de Java 8 telles que l'expression lambda et l'API de date, et renforce complètement l'explication des modèles de conception et liés à l'agilité! Comme pour le livre soeur "Introduction à Java", l'explication se poursuivra en répondant "Pourquoi?" Fermement, donc des connaissances indispensables pour maîtriser Java au travail, telles que les expressions régulières, les collections, la liaison de bases de données, le refactoring, le traitement parallèle, etc. Cependant, il est rafraîchissant, amusant et facile à apprendre. Recommandé pour ceux qui ont compris la grammaire de base et les concepts orientés objet et qui souhaitent aller encore plus loin. Problème",
        "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": "Présentation d'une version révisée qui complète l'explication des fonctionnalités notables de Java 8 telles que l'expression lambda et l'API de date, et renforce complètement l'explication des modèles de conception et liés à l'agilité! Comme le livre jumeau "Introduction à Java", "Pourquoi?"..."
      }
    }
  ]
}

Générer une classe de modèle JSON (pojo)

https://qiita.com/riversun/items/cdd990e96c2bbf9cb043 Sur cette page, j'ai fait référence à la génération automatique d'une classe de modèle (pojo) à l'aide de jsonschema2pojo.

Fichier de classe généré

Screenshot from Gyazo

Le contenu de la classe Model

Screenshot from Gyazo

@SerializeName ("nom") @Expose nom de type public

Puisque les éléments sont des "éléments": [], ce sera List items = null;.

Screenshot from Gyazo

Mise en garde

La classe de modèle est générée automatiquement, mais elle peut être insuffisante, veuillez donc créer celle qui n'est pas générée par vous-même.

code principal java

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) {
        //code isbn
        Long isbn = 9784844336778L;

        //Tenez json
        String json = "";

        OkHttpClient okHttpClient;

        okHttpClient = new OkHttpClient();

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

        //Insérez l'adresse pour envoyer la demande avec l'url
        builder.url(url + isbn);

        Request request = builder.build();

        Response response = null;
        try {
            response = okHttpClient.newCall(request).execute();
            //J'ai les informations json renvoyées par l'API Web comme décrit ci-dessus sur json ici
            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;

        //Lorsque le titre est écrit à partir de la classe de modèle
        //la classe d'éléments est List<Item>Parce que c'est un type.get()Attacher
        System.out.println(models.items.get(0).volumeInfo.title);//title

        //Lorsque la classe de modèle est remplacée par la classe volumeinfo et affichée
        System.out.println("title: "    + volumeInfo.title);//title
        System.out.println("author: "   + volumeInfo.authors);//author
        System.out.println("Date de publication: "   + volumeInfo.publishedDate);//publishedDate
        System.out.println("l'éditeur: "   + volumeInfo.publisher);//publisher
        System.out.println("Liste des prix:"      + listPrice.amount);
        System.out.println("La description:"     + volumeInfo.description);//description
        System.out.println("nombre de pages:" + volumeInfo.pageCount);//pageCount
        System.out.println("Petite vignette:" + imageLinks.smallThumbnail);//smallThumbnail
        System.out.println("la vignette:"         + imageLinks.thumbnail);//thumbnail

    }
}

Résultat d'exécution Screenshot from Gyazo

J'ai pu aller au sentiment

versions okhttp et jackson

Aperçu

java

à maven

OkHttp est un client HTTP efficace par défaut

Utilisez okhttp version 3.7.0 Site d'explication https://square.github.io/okhttp/

jackson

version jackson-core: 2.10.0 version de jackson-annotations: 2.10.0 version jackson-databind: 2.10.0

Est mis en

  <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 talon de méthode généré automatiquement
        Long isbn = 9784295007807L;

        //Tenez json
        String json ="";

        //Titre de livre
        String title = "";
        //auteur
        String author = "";
        //Date de publication
        Date publishedDate = null;
        String day = "";
        //l'éditeur
        String publisher = "";
        //Liste des prix
        Integer listPrice = null;
        //Texte explicatif
        String description = "";
        //nombre de pages
        Integer pageCount = null;
        //petite vignette
        String smallThumbnail ="";
        //la vignette
        String thumbnail = "";


        OkHttpClient okHttpClient;

        okHttpClient = new OkHttpClient();

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

        //Insérez l'adresse pour envoyer la demande avec l'url
        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();
        }

        //Afficher le contenu de json
        System.out.println(json);

        //Traitement pour retirer le contenu de json d'ici et l'afficher
        ObjectMapper mapper = new ObjectMapper();
        try {
            JsonNode node = mapper.readTree(json);

             //get("value")La valeur est de json"title": "Une introduction rafraîchissante à Java Practical Edition 2nd Edition"
             //La partie titre sera la valeur
             //Puisque le titre est un type de chaîne, à la fin.asText();Attacher
             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();

             //Reçu sous forme de jour de chaîne pour convertir la date de publication en type Date
             day = node.get("items").get(0).get("volumeInfo").get("publishedDate").textValue();

             //Convertir la chaîne en type SQL Date
             publishedDate =  Date.valueOf(day);

             //listPrice est de type int, donc à la fin.asInt();Attacher
             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("l'éditeur: "+publisher);
        System.out.println("Date de publication: " + publishedDate);
        System.out.println("Liste des prix: " + listPrice + "Cercle");
        System.out.println("Texte explicatif: " + description);
        System.out.println("nombre de pages: " + pageCount);
        System.out.println("Petite vignette: " + smallThumbnail);
        System.out.println("la vignette: " +thumbnail);

    }

}

Screenshot from Gyazo

J'ai pu le faire comme ça

Recommended Posts

Remarques sur la mise en œuvre de l'API Google Books dans les versions java okhttp et gson et les versions okhttp et jackson
Créer une API à l'aide de Retrofit2, Okhttp3 et Gson (Java)
Télécharger et télécharger des notes en java sur S3
Remarques sur le contrôle du signal en Java
Remarques sur le chemin et le package Java
Remarques sur l'API Stream et SQL de Java
Essayé l'API Toot et Streaming de Mastodon en Java
[Java] Convertir JSON en Java et Java en JSON-Comment utiliser GSON et Jackson-
Remarques sur l'utilisation des expressions régulières en Java
API Zabbix en Java
JSON en Java et Jackson Partie 1 Renvoyer JSON à partir du serveur
Comment appeler et utiliser l'API en Java (Spring Boot)
Conseils d'utilisation de Salesforce SOAP et de l'API Bulk en Java
Générer AWS Signature V4 en Java et demander l'API