Comment lire un flux JSON d’un webservice en csharp

Vous devez avant tout créer un compte sur le site openweathermap et générer une clé API (automatique normalement) et attendre environ 10 minutes avant qu’elle ne soit active. Ansuite munide votre clé API, composez l’url suivante et collez al sur la barre d’adresse de votre navigateur web:

http://api.openweathermap.org/data/2.5/weather?q=Toulouse&APPID=ma-cle-api

Ensuite créez une application de type console dans Visual Studio, an vous assurant d’avoir installé la librairie NewtonSoft.JSON pour lire facilement un fichier texte JSON et le transformer en un objet JSON.

using System;
using System.IO;
using System.Net;
using Newtonsoft.Json;

namespace Playground
{
    class Program
    {
        static void Main(string[] args)
        {
            var url = "http://api.openweathermap.org/data/2.5/weather?q=Toulouse&APPID=ma-cle-api";
            var webrequest = (HttpWebRequest)System.Net.WebRequest.Create(url);

            using (var response = webrequest.GetResponse())
            using (var reader = new StreamReader(response.GetResponseStream()))
            {
                var result = reader.ReadToEnd();

                var jObject = Newtonsoft.Json.Linq.JObject.Parse(result);
                Console.WriteLine((string)jObject["weather"][0]["main"]);


                //var text = Convert.ToString(result);
                //Console.WriteLine(text);
                Console.ReadLine();
            }
        }
    }
}

Analysons maintenant le code en détail :

var url = "http://api.openweathermap.org/data/2.5/weather?q=Toulouse&APPID=ma-cle-api";
var webrequest = (HttpWebRequest)System.Net.WebRequest.Create(url);

On déclare une variable à la volée, et on y met une chaine qui est le point du service web (endpoint en anglais)

le mot clé var permet de déclarer une variable non typée, pour des raisons de pratique on le fait souvent.

La seconde ligne est la déclaration d’un objet de type HttpWebRequest, créé via la méthode statique Create de la classe System.Net.WebRequest.

using (var response = webrequest.GetResponse())

Cette ligne est sans doute la plus importante, c’est elle qui va chercher le flux en faisant une requête à travers el web.

Encore une fois on utilise le mot clé var parce que c’est pratiue, mais ce n’est pas le plus rigoureux, il faudrait mettre le type de retour de la méthode GetResponse qui retourne un objet de type WebResponse.

En C# ce n’est pas aussi direct qu’en PHP, vous devez transformer response en un flux avec la ligne suivante :

using (var reader = new StreamReader(response.GetResponseStream()))
{
    var result = reader.ReadToEnd();

    var jObject = Newtonsoft.Json.Linq.JObject.Parse(result);
    Console.WriteLine((string)jObject["weather"][0]["main"]);


    //var text = Convert.ToString(result);
    //Console.WriteLine(text);
    Console.ReadLine();
}

On instancie un StreamReader pour lire le flux retourné par le webservice. La méthode ReadToEnd retourne une chaine de caractère.

Enfin on parse cette chaine de caractère qui est un JSON en fait, et on en fait un objet JObject (survolez la variable pour avoir son type).

Enfin on accède facilement à la donnée qu’on veut en connaissant son chemin grâce au requêtage avec le browser (mais vous pouvez aussi faire un dump dans la console).

 

 

Retour en haut