IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Pascal Discussion :

Interroger un web service JSON


Sujet :

Contribuez Pascal

  1. #1
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    3 825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 3 825
    Points : 13 668
    Points
    13 668
    Billets dans le blog
    8
    Par défaut Interroger un web service JSON
    Bonjour !

    Je vous propose d'apprendre à interroger un web service JSON et à analyser les données reçues.

    Le web service que j'ai choisi pour cet exemple fournit des informations sur le calendrier liturgique catholique. La documentation de l'API se trouve à l'adresse suivante :

    http://calapi.inadiutorium.cz/api-doc

    Je souhaite consulter la date du jour dans le calendrier. Voici comment interroger le web service :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    uses
      fphttpclient;
     
    const
      URL = 'http://calapi.inadiutorium.cz/api/v0/fr/calendars/general-fr/today';
     
    var
      vJSONText: string;
     
    begin
      vJSONText := TFPCustomHTTPClient.SimpleGet(URL);
    Afin de bien comprendre ce qui se passe (et afin de pouvoir éventuellement travailler sans connexion), je colle directement dans mon code la chaîne de caractères renvoyée précédemment par la méthode SimpleGet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      vJSONText := '{"date":"2018-04-01","season":"easter","season_week":1,"celebrations":[{"title":"Dimanche de Pâques de la Résurrection du Seigneur","colour":"white","rank":"Triduum Pascal","rank_num":1.1}],"weekday":"sunday"}';
    Voici comment convertir cette chaîne de caractères en données JSON sous la forme du type TJSONData :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    uses
      fpjson, jsonparser;
     
    { ... }
     
    var
      { ... }
      vJSONData: TJSONData;
     
    begin
      { ... }
     
      vJSONData := GetJSON(vJSONText);
    Le premier avantage de cette conversion est de pouvoir reformater la chaîne de caractères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      WriteLn(vJSONData.FormatJSON());
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    {
      "date" : "2018-04-01",
      "season" : "easter",
      "season_week" : 1,
      "celebrations" : [
        {
          "title" : "Dimanche de Pâques de la Résurrection du Seigneur",
          "colour" : "white",
          "rank" : "Triduum Pascal",
          "rank_num" : 1.1000000000000001E+000
        }
      ],
      "weekday" : "sunday"
    }

    Le principal avantage est de pouvoir accéder à la donnée de son choix :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      WriteLn(vJSONData.FindPath('celebrations').Items[0].FindPath('title').AsString);
    Non seulement ça fonctionne, mais à présent les accents s'affichent correctement (dans la console de Notepad++).

    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    Dimanche de Pâques de la Résurrection du Seigneur

    Comme vous le voyez, on accède à une table associative ({}) par la méthode FindPath, et on accède à un tableau ([]) par la variable Items.

    Vous trouverez ci-joint le code source complet de l'exemple.

    Joyeuses Pâques !
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    3 825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 3 825
    Points : 13 668
    Points
    13 668
    Billets dans le blog
    8
    Par défaut
    Pour vous exercer, voici d'autres web services que j'ai essayés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    const
      URL: array[1..9] of string = (
        // Obtenir votre adresse IP
        'http://checkip.dyndns.org',
        // Savoir dans quel pays se trouve une adresse IP
        'https://api.ip2country.info/ip?41.83.38.206',
        // Calendrier liturgique catholique
        'http://calapi.inadiutorium.cz/api/v0/la/calendars/general-la/today', // latin
        'http://calapi.inadiutorium.cz/api/v0/fr/calendars/general-fr/today', // français
        // Nom d'utilisateur aléatoire
        'https://randomuser.me/api/',
        // Informations sur un livre à partir de son ISBN
        'https://www.googleapis.com/books/v1/volumes?q=isbn:2070394565',
        // Chercher dans le catalogue d'un marchand de disque
        'https://itunes.apple.com/search?term=elisabeth+schwarzkopf',
        // Tournois en cours sur le site lichess.org
        'https://lichess.org/api/tournament',
        // Recherche sur le site de la BNF
        'http://gallica.bnf.fr/services/Categories?SRU=gallica%20all%20%22lamartine%22'
      );

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    3 825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 3 825
    Points : 13 668
    Points
    13 668
    Billets dans le blog
    8
    Par défaut
    Connaissez-vous d'autres web services envoyant des données au format JSON ?

    Concernant Gallica, je crois comprendre en lisant cette page que le service le plus utile est celui qui renvoie du XML. Quelqu'un aurait-il un exemple simple de lecture d'un fichier XML avec les unités standard de Free Pascal ?

    P.-S.
    Apparemment il y a tout ce qu'il faut . En plus c'est en français. Merci au traducteur.
    Il y a aussi ce tutoriel.

Discussions similaires

  1. Interroger un web service
    Par wisiweb dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 06/12/2013, 18h26
  2. [Web Service] Web service JSON inaccessible depuis domaine distant
    Par flashnet dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 25/02/2013, 00h31
  3. [1.x] web services json
    Par Willy55 dans le forum Symfony
    Réponses: 10
    Dernier message: 16/05/2012, 15h48
  4. Comment interroger un Web Service en PL/SQL
    Par squallJ dans le forum Oracle
    Réponses: 2
    Dernier message: 19/08/2009, 11h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo