Le WordPress d'aujourd'hui, décodé pour les développeurs

Blocs Gutenberg

Météo du jour en bloc, pour un titre de presse locale sans service payant

Comment afficher la météo du jour dans un bloc dynamique WordPress en s'appuyant sur une API publique gratuite, sans abonnement, pour un titre de presse locale au budget serré.

Par WordPress Développement • 5 octobre 2022 • 4 min de lecture • Aucun commentaire
Météo du jour en bloc, pour un titre de presse locale sans service payant

Un rédacteur en chef de titre local qui demande « peut-on afficher la météo du jour sans payer un service tiers ? » obtient en général la même réponse : oui, à condition d’accepter une donnée simple et de la mettre à jour à un rythme raisonnable. C’est exactement le cahier des charges qu’on va suivre ici, avec un bloc dynamique qui interroge une API météo publique et gratuite, sans clé payante ni abonnement mensuel.

Le choix se porte sur Open-Meteo, une API ouverte qui ne nécessite pas de clé d’authentification pour une consultation raisonnable, ce qui convient parfaitement à un usage éditorial : quelques dizaines d’affichages par jour, pas un service de prévision professionnel.

Créer le bloc dynamique

Le bloc s’enregistre classiquement via son fichier block.json, avec un rendu confié à PHP plutôt qu’à un rendu React côté client, pour éviter tout scintillement à l’affichage :

{
  "apiVersion": 3,
  "name": "titre-local/meteo-du-jour",
  "title": "Météo du jour",
  "category": "widgets",
  "attributes": {
    "latitude": { "type": "number", "default": 48.117 },
    "longitude": { "type": "number", "default": -1.677 },
    "villeAffichee": { "type": "string", "default": "Rennes" }
  },
  "render": "file:./render.php"
}

Le fichier render.php reçoit les attributs du bloc et se charge d’appeler l’API, puis de construire le balisage final. Rien n’est envoyé au navigateur avant que la donnée ne soit prête.

Interroger l’API sans clé et sans dépendance

La fonction wp_remote_get du cœur de WordPress suffit largement, sans bibliothèque tierce à installer :

function titre_local_recuperer_meteo( $latitude, $longitude ) {
    $transient_key = 'titre_local_meteo_' . md5( $latitude . $longitude );
    $donnees = get_transient( $transient_key );

    if ( false !== $donnees ) {
        return $donnees;
    }

    $url = add_query_arg(
        array(
            'latitude'       => $latitude,
            'longitude'      => $longitude,
            'current_weather' => 'true',
        ),
        'https://api.open-meteo.com/v1/forecast'
    );

    $reponse = wp_remote_get( $url, array( 'timeout' => 5 ) );

    if ( is_wp_error( $reponse ) ) {
        return null;
    }

    $corps = json_decode( wp_remote_retrieve_body( $reponse ), true );
    set_transient( $transient_key, $corps, 30 * MINUTE_IN_SECONDS );

    return $corps;
}
L'essentiel à retenir : Une API météo publique suffit pour un affichage quotidien simple ; Le rendu se fait côté serveur pour éviter tout scintillement ; Un transient limite les appels sans dépendre d'un service payant

Construire le rendu côté serveur

Le fichier render.php exploite ensuite ce résultat pour composer un balisage minimal, sans dépendance à une bibliothèque graphique externe :

<?php
$attributs = $attributes;
$meteo = titre_local_recuperer_meteo( $attributs['latitude'], $attributs['longitude'] );

if ( ! $meteo || empty( $meteo['current_weather'] ) ) {
    return;
}

$temperature = round( $meteo['current_weather']['temperature'] );
?>
<div <?php echo get_block_wrapper_attributes(); ?>>
    <p>Météo à <?php echo esc_html( $attributs['villeAffichee'] ); ?> : <?php echo esc_html( $temperature ); ?> °C</p>
</div>

La fonction get_block_wrapper_attributes() garantit que les classes et l’identifiant attendus par l’éditeur sont bien présents, sans avoir à les recopier à la main.

Limiter les appels sans service payant

Le set_transient posé plus haut joue un rôle précis : il évite qu’une page consultée plusieurs centaines de fois par jour ne déclenche autant d’appels vers l’API externe. Une durée de trente minutes est largement suffisante pour une météo affichée en page d’accueil d’un site d’actualités locales, la donnée n’ayant pas besoin d’être mise à jour à la minute près.

  • Un appel toutes les trente minutes maximum, quel que soit le trafic du site ;
  • Aucune clé d’API à renouveler ni à surveiller ;
  • Un comportement dégradé propre : si l’API ne répond pas, le bloc ne s’affiche simplement pas, plutôt que d’afficher une erreur visible des lecteurs.

Les limites à connaître avant de généraliser

Ce montage convient à un affichage éditorial ponctuel, pas à un service météo à part entière. Open-Meteo reste une API à vocation ouverte et ne garantit pas de niveau de service contractuel ; pour un usage à fort trafic ou une exigence de disponibilité stricte, il faudrait revoir la question d’un abonnement payant, ce qui sort du périmètre d’un simple bloc éditorial pour un titre local.

Le budget d’un titre de presse locale ne justifie pas toujours un abonnement API : une donnée simple, mise en cache intelligemment, répond souvent à l’attente réelle du lecteur.

Pour aller plus loin

Ce bloc peut évoluer vers un affichage à plusieurs villes, ou vers une icône représentant les conditions du jour à partir du code retourné par l’API. L’essentiel reste la même discipline : un appel espacé dans le temps, un rendu côté serveur, et une dégradation silencieuse en cas d’indisponibilité du service externe.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi