cClaude.rocks ☕ Le blog

[Nouvelles technologies, sciences et coups de gueule…]

Menu

Le site WorldTimeAPI propose une API permettant de récupérer l’heure au format JSON.

Cet article vient compléter le post sur la mise à jour de la date et l’heure de sur Raspberry



L’API WorldTimeAPI par l’exemple

Je ne rentre pas dans la documentation de l’API, si vous souhaitez aller plus loin tout est présent sur le site WorldTimeAPI.

Pour récupérer l’heure UTC, il suffit de faire :

curl -s 'http://worldtimeapi.org/api/timezone/Etc/UTC' | jq .
  • Exemple de résultat
    {
      "abbreviation": "UTC",
      "client_ip": "dead:beef:dead:beef:2d8:61ff:fe05:adfc",
      "datetime": "2021-10-30T12:36:03.187637+00:00",
      "day_of_week": 6,
      "day_of_year": 303,
      "dst": false,
      "dst_from": null,
      "dst_offset": 0,
      "dst_until": null,
      "raw_offset": 0,
      "timezone": "Etc/UTC",
      "unixtime": 1635597363,
      "utc_datetime": "2021-10-30T12:36:03.187637+00:00",
      "utc_offset": "+00:00",
      "week_number": 43
    }
    

Pour obtenir une zone spécifique :

curl -s 'http://worldtimeapi.org/api/timezone/Europe/Paris' | jq .
  • Exemple de résultat
    {
      "abbreviation": "CEST",
      "client_ip": "dead:beef:dead:beef:2d8:61ff:fe05:adfc",
      "datetime": "2021-10-30T14:37:00.503095+02:00",
      "day_of_week": 6,
      "day_of_year": 303,
      "dst": true,
      "dst_from": "2021-03-28T01:00:00+00:00",
      "dst_offset": 3600,
      "dst_until": "2021-10-31T01:00:00+00:00",
      "raw_offset": 3600,
      "timezone": "Europe/Paris",
      "unixtime": 1635597420,
      "utc_datetime": "2021-10-30T12:37:00.503095+00:00",
      "utc_offset": "+02:00",
      "week_number": 43
    }
    


Contexte d’usage

Le site WorldTimeAPI ne doit être utilisé pour récupérer l’heure de manière régulière.

L’objectif est de décoincer rapidement une situation, la mise à jour de l’heure de votre système étant requise pour certaine opérations. Par ailleurs, l’heure ainsi obtenue n’est pas aussi précise que ce que donne le protocole ntp. Malgré cela la précision est largement suffisante pour avoir une heure raisonnable pour mettre à jour votre système à travers une solution sécurisée.



Base pour une automatisation

Le code proposé est prévu pour des Linux récents utilisant de timedatectl (et donc systemd) pour gérer l’heure, comme c’est le cas pour Raspbian et Raspberry PI OS.

La configuration par défaut attend que la synchronisation de l’heure se fasse au travers du protocole ntp (« Net Time Protocol »), mais l’implémentation de ntp au travers de systemd est minimaliste, et dans certain cas, c’est assez compliquer de l’initialiser.

Le code ci-dessous a pour but de débloquer la situation :

function update_datetime_from_WorldTimeAPI {
  local _timezone_=
  local _url_=
  local _datetime_=
  local _date_=
  local _time_=
  local _timedatectl_=

  _timezone_="$( cat /etc/timezone )" || return $?
  _url_="http://worldtimeapi.org/api/timezone/${_timezone_}"

cat <<EOF
_timezone_=${_timezone_}
_url_=${_url_}
EOF

  _datetime_="$( curl -s "${_url_}" | jq -r '.datetime' )" || return $?

  _date_="${_datetime_:0:10}" ; _date_="${_date_//:/-}"
  _time_="${_datetime_:11:8}"
  _timedatectl_="${_date_} ${_time_}"

cat <<EOF
_datetime_='${_datetime_}'
_date_='${_date_}'
_time_='${_time_}'
_timedatectl_='${_timedatectl_}'
EOF

  sudo timedatectl set-ntp False
  sudo timedatectl set-time "${_timedatectl_}"
  sudo timedatectl set-ntp True
}

Et cela devrait vous permettre de bricoler quelque chose d’adapter à l’heure en cours, au pire vous pouvez copier-coller le code ci-dessus et puis appeler update_datetime_from_WorldTimeAPI dans un terminal.



Pour aller un peu plus loin



ᦿ


ℹ 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog