Conseillers Fédéraux

Conseillers Fédéraux

Conseillers Fédéraux

Conseillers Fédéraux

Conseillers Féd.

Web-Service

Voici un web-service REST de démonstration permettant d'obtenir la liste des Conseillers Fédéraux et Présidents de la Confédération depuis qu'il y en a.

Vraiment très simple d'emploi, avec quelques paramètres optionnels permettant de limiter le volume de données retourné et un résultat formaté à choix en JSON ou XML.

Le code nécessaire pour appeler/consommer ces 2 web-services vous est donné pour les 3 languages communs Java, Javascript et PHP.

Démonstration et explications

Entrez les parties connues (insensible à la casse) ou laissez vide pour retourner toutes les données disponibles.

Nom
Prénom
Parti
Canton

Le résultat sera affiché dans les onglets ci-dessous. Les onglet AJAX, PHP et Java vous montreront comment facilement obtenir ces données depuis ces languages de programmation-là, et les onglets JSON et XML le format des données que vous obtiendrez en retour de l'appel des web-services concernés.

Cliquez sur une ligne du tableau pour voir le détail d'un Conseiller.


Aucun contenu. Veuillez effectuer une recherche

Aucun contenu. Veuillez effectuer une recherche

Voici le code Javascript nécessaire pour récupérer les Conseillers Fédéraux ainsi que les Présidents de la Confédération.


// ==============================================================================
// Pour récupérer les conseillers fédéraux et les présidents de la confédération.
// ==============================================================================
// 'ConseillersFederaux_List_JSON' retourne tout au format JSON
//     data.status        : 'OK' ou 'KO'
//     data.msg           : n'existe que si data.status === 'KO'
//     data.conseillers   : tous les conseillers fédéraux
//     data.présidents    : tous les présidents de la confédération
//
// 'ConseillersFederaux_List_XML' retourne les données au format XML (mais pas le status et message d'erreur)
//     data.status        : 'OK' ou 'KO'
//     data.msg           : n'existe que si data.status === 'KO'
//     data.confederation : tous les conseillers fédéraux et les présidents de la confédération au format XML
// ==============================================================================

$.ajax({
    type: 'POST',
    url: 'https://www.polosoft.ch/conseillers/ws/ws.php',
    data: JSON.stringify({
        'request': 'ConseillersFederaux_List_JSON',
        'nom': nom,         // optionnel
        'prenom': prenom,   // optionnel
        'parti': parti,     // optionnel
        'canton': canton    // optionnel
    }),
    dataType: 'json',
    contentType: 'application/json',
    timeout: 15 * 1000, // 15 secondes
    success: function (data) {
        if (data.status === 'OK') {
            // Tout s'est bien passé !
            // Dans le paramètre data il y a les données retournées
            // Elles sont représentées dans les onglets JSON (ou XML pour le web-service 'ConseillersFederaux_List_XML')
        } else if (data.status === 'KO') {
            // Oups, un souci !
            // Dans data.msg il y a le message d'erreur retourné par le web-service
        } else {
            // Oups, un souci !
            // Le web-service a retourné un code d'erreur inconnu 
        }
    },
    error: function (request, status, err) {
        // En cas de timeout : 
        if (status === "timeout") {
            // La requête interrompue a pris trop de temps...
        } else {
            // Autre erreur...
        }
    }
});
                        

Voici le code PHP nécessaire pour récupérer les Conseillers Fédéraux ainsi que les Présidents de la Confédération au format JSON (essayez ce script en cliquant dessus : https://www.polosoft.ch/conseillers/appel-php-json.php)


<?php
header( "Content-Type: text/html; charset=utf-8" );

// #################################################################################
// Utilisation de CURL pour consommer le web-service 'ConseillersFederaux_List_JSON'
// (Sans le code nécessaire pour correctement traiter toutes les erreurs éventuelles)
// #################################################################################

$webServiceCallParms     = array(
    'request' => 'ConseillersFederaux_List_JSON',
    'prenom'  => 'max', // optionnel
        // 'nom' => $nom,         // optionnel
        // 'parti' => $parti,     // optionnel
        // 'canton' => $canton    // optionnel
);
$jsonWebServiceCallParms = json_encode( $webServiceCallParms );

$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, 'https://www.polosoft.ch/conseillers/ws/ws.php' );
curl_setopt( $ch, CURLOPT_POST, 1 ); // POST
curl_setopt( $ch, CURLOPT_ENCODING, 'UTF-8' );
curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, 'POST' );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $jsonWebServiceCallParms );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen( $jsonWebServiceCallParms ) )
);

$jsonAnswer = curl_exec( $ch );
curl_close( $ch );

$answer = json_decode( $jsonAnswer );

$status = $answer->{'status'};

if ( $status === 'OK' ) {
    echo "<p>L'appel de ConseillersFederaux_List_JSON() a réussi !</p>";
    $jsonConseillers = json_encode( $answer->{'conseillers'}, JSON_UNESCAPED_UNICODE );
    $jsonPresidents  = json_encode( $answer->{'presidents'}, JSON_UNESCAPED_UNICODE );
    echo "<p>Les Conseillers Fédéraux reçus en JSON se trouvent ci-dessous entre les lignes horizontales :<br/><hr/>" . $jsonConseillers. "<hr/></p>";
    echo "<p>Les Présidents de la Confédération reçus en JSON se trouvent ci-dessous entre les lignes horizontales :<br/><hr/>" . $jsonPresidents. "<hr/></p>";
} else {
    $msg = $answer->{'msg'};
    echo "<p>L'appel de ConseillersFederaux_List_JSON() a échoué ! L'erreur retournée est [" . $msg. "]</p>";
}
?>
                        

Voici le code PHP nécessaire pour récupérer les Conseillers Fédéraux ainsi que les Présidents de la Confédération au format XML (essayez ce script en cliquant dessus : https://www.polosoft.ch/conseillers/appel-php-xml.php)


<?php
header( "Content-Type: text/html; charset=utf-8" );

// #################################################################################
// Utilisation de CURL pour consommer le web-service 'ConseillersFederaux_List_XML'
// (Sans le code nécessaire pour correctement traiter toutes les erreurs éventuelles)
// #################################################################################

$webServiceCallParms     = array(
    'request' => 'ConseillersFederaux_List_XML',
    'prenom'  => 'max', // optionnel
        // 'nom' => $nom,         // optionnel
        // 'parti' => $parti,     // optionnel
        // 'canton' => $canton    // optionnel
);
$jsonWebServiceCallParms = json_encode( $webServiceCallParms );

$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, 'https://www.polosoft.ch/conseillers/ws/ws.php' );
curl_setopt( $ch, CURLOPT_POST, 1 ); // POST
curl_setopt( $ch, CURLOPT_ENCODING, 'UTF-8' );
curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, 'POST' );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $jsonWebServiceCallParms );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen( $jsonWebServiceCallParms ) )
);

$jsonAnswer = curl_exec( $ch );
curl_close( $ch );

$answer = json_decode( $jsonAnswer );

$status = $answer->{'status'};

if ( $status === 'OK' ) {
    echo "<p>L'appel de ConseillersFederaux_List_XML() a réussi !</p>";

    echo "<p>Les Conseillers Fédéraux et Présidents de la Confédération reçus en XML (dans du JSON) trouvent ci-dessous entre les lignes horizontales :<br/><hr/>";
    echo "<textarea rows='20' cols='60' style='border:none; background-color:#abcdef'>" . $answer->{'confederation'} . '</textarea>';
    echo "<hr/></p>";
} else {
    $msg = $answer->{'msg'};
    echo "<p>L'appel de ConseillersFederaux_List_XML() a échoué ! L'erreur retournée est [$msg]</p>";
}
?>
                        

Voici le code JAVA nécessaire pour récupérer les Conseillers Fédéraux ainsi que les Présidents de la Confédération.


package simplewscall;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.TrustAllStrategy;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.util.EntityUtils;

public class SimpleWSCall {

    /**
     * Appelle un web-service en lui transmettant le paylod JSON fourni. Cette méthode utilise Apache HTTP Client
     * (http://hc.apache.org).
     *
     * @param wsURL       l'URL pour atteindre le web-service a appeler
     * @param jsonPayload le payload à fournir au web-service au format JSON
     *
     * @return l'ensemble de la réponse retournée par le web-service appelé ou null pour toute erreur rencontrée
     */
    public static String wsPostCall_UTF8( String wsURL, String jsonPayload ) {
        String result = null;

        try {
            StringEntity entity = new StringEntity( jsonPayload, ContentType.APPLICATION_FORM_URLENCODED );
            // Création du client HTTPS de manière à ce qu'il accepte aussi les certificats https auto-signés
            HttpClient httpClient = HttpClients
                    .custom()
                    .setSSLContext( new SSLContextBuilder().loadTrustMaterial( null, TrustAllStrategy.INSTANCE ).build() )
                    .setSSLHostnameVerifier( NoopHostnameVerifier.INSTANCE )
                    .build();

            HttpPost request = new HttpPost( wsURL );
            request.setEntity( entity );
            HttpResponse response = httpClient.execute( request );
            int statusCode = response.getStatusLine().getStatusCode();
            if ( statusCode == HttpStatus.SC_OK ) {    // 200/OK
                String json = EntityUtils.toString( response.getEntity() );
                result = json;
            }
        }
        catch ( Exception e ) {
        }

        return result;
    }

    public static void main( String[] args ) {
        String jsonConseillers = wsPostCall_UTF8( "https://www.polosoft.ch/conseillers/ws/ws.php", "{\"request\":\"ConseillersFederaux_List_JSON\", \"prenom\":\"max\"}" );
        System.out.println( jsonConseillers );
    }
}
                        

Le code JAVA ci-dessus retournera les Conseillers Fédéraux suivants (dont le prénom contient "max") au format JSON :


{"status":"OK","conseillers":[{"N":67,"Nom":"Weber","Prenom":"Max","Naissance":"1897-08-02","Parti":"PSS","Canton":"ZH","Origine":"Zurich","Election":"1951-12-13","Demission":"1953-12-08","Mort":"1974-12-02"},{"N":63,"Nom":"Petitpierre","Prenom":"Max","Naissance":"1899-02-26","Parti":"PRD","Canton":"NE","Origine":"Neuchâtel, Couvet","Election":"1944-12-14","Demission":"1961-06-30","Mort":"1994-03-25"}],"presidents":[{"Nom":"Petitpierre","Prenom":"Max","Annee":1950},{"Nom":"Petitpierre","Prenom":"Max","Annee":1955},{"Nom":"Petitpierre","Prenom":"Max","Annee":1960}]}
                        

Cette même longue chaîne de caractères JSON cette fois-ci mise en forme :


{
   "status":"OK",
   "conseillers":[
      {
         "N":67,
         "Nom":"Weber",
         "Prenom":"Max",
         "Naissance":"1897-08-02",
         "Parti":"PSS",
         "Canton":"ZH",
         "Origine":"Zurich",
         "Election":"1951-12-13",
         "Demission":"1953-12-08",
         "Mort":"1974-12-02"
      },
      {
         "N":63,
         "Nom":"Petitpierre",
         "Prenom":"Max",
         "Naissance":"1899-02-26",
         "Parti":"PRD",
         "Canton":"NE",
         "Origine":"Neuchâtel, Couvet",
         "Election":"1944-12-14",
         "Demission":"1961-06-30",
         "Mort":"1994-03-25"
      }
   ],
   "presidents":[
      {
         "Nom":"Petitpierre",
         "Prenom":"Max",
         "Annee":1950
      },
      {
         "Nom":"Petitpierre",
         "Prenom":"Max",
         "Annee":1955
      },
      {
         "Nom":"Petitpierre",
         "Prenom":"Max",
         "Annee":1960
      }
   ]
}                        

Aucun contenu. Veuillez effectuer une recherche

Aucun contenu. Veuillez effectuer une recherche

Objectifs

Je voulais tester diverses fonctionnalités de BOOSTRAP 4 comme ses tables qui savent se trier toutes seules et l'affichage différencié en fonction de la taille du navigateur (=responsive), mais aussi pour fournir à mes élèves un web-service simple d'emploi et des indications claires pour l'utiliser.

Sources

Ces données proviennent de Wikipédia.

POLOSOFTPOLOSOFT

Servez-vous !

Conseillers Fédérauxv1.0
Using BOOTSTRAP v4.3.1
Written by Paul Friedli
Released under the WTFPL
NO rights reserved
and NO copyright © 2021