wttr.in — la bonne façon de vérifier la curl
!
wttr.in est un service de prévisions météorologiques orienté console qui prend en charge diverses méthodes de représentation d'informations telles que les séquences ANSI orientées terminal pour les clients HTTP de console (curl, httpie ou wget), HTML pour les navigateurs Web ou PNG pour les visionneuses graphiques.
Initialement lancé comme un petit projet, un wrapper pour wego, destiné à démontrer la puissance des services orientés console, wttr.in est devenu un service de bulletins météorologiques populaire, traitant quotidiennement des dizaines de millions de requêtes.
Vous pouvez le voir fonctionner ici : wttr.in.
Documents | Utilisation | Sortie sur une ligne | Format de sortie riche en données | Affichage de la carte | Formats de sortie | Phases de la lune | Internationalisation | Installation
Vous pouvez accéder au service depuis un shell ou depuis un navigateur Web comme ceci :
$ curl wttr.in
Weather for City: Paris, France
/ Clear
.-. 10 – 11 °C
― ( ) ― ↑ 11 km/h
`-’ 10 km
/ 0.0 mm
Voici un exemple de bulletin météo :
Ou en PowerShell :
Invoke-RestMethod https: // wttr.in
Vous souhaitez obtenir les informations météorologiques pour un endroit spécifique ? Vous pouvez ajouter l'emplacement souhaité à l'URL dans votre demande comme ceci :
$ curl wttr.in/London
$ curl wttr.in/Moscow
$ curl wttr.in/Salt+Lake+City
Si vous omettez le nom de l'emplacement, vous obtiendrez le rapport pour votre emplacement actuel en fonction de votre adresse IP.
Utilisez des codes d'aéroport à 3 lettres pour obtenir les informations météorologiques d'un aéroport donné :
$ curl wttr.in/muc # Weather for IATA: muc, Munich International Airport, Germany
$ curl wttr.in/ham # Weather for IATA: ham, Hamburg Airport, Germany
Supposons que vous souhaitiez obtenir la météo d'un emplacement géographique autre qu'une ville - peut-être une attraction dans une ville, le nom d'une montagne ou un endroit spécial. Ajoutez le caractère ~
avant le nom pour rechercher ce nom de lieu spécial avant que la météo ne soit ensuite récupérée :
$ curl wttr.in/~Vostok+Station
$ curl wttr.in/~Eiffel+Tower
$ curl wttr.in/~Kilimanjaro
Pour ces exemples, vous verrez une ligne sous la sortie des prévisions météorologiques qui affiche les résultats de géolocalisation de la recherche de l'emplacement :
Location: Vostok Station, станция Восток, AAT, Antarctica [-78.4642714,106.8364678]
Location: Tour Eiffel, 5, Avenue Anatole France, Gros-Caillou, 7e, Paris, Île-de-France, 75007, France [48.8582602,2.29449905432]
Location: Kilimanjaro, Northern, Tanzania [-3.4762789,37.3872648]
Vous pouvez également utiliser des adresses IP (directes) ou des noms de domaine (préfixés par @
) pour spécifier un emplacement :
$ curl wttr.in/@github.com
$ curl wttr.in/@msu.ru
Pour obtenir des informations détaillées en ligne, vous pouvez accéder à la page /:help :
$ curl wttr.in/:help
Par défaut, les unités USCS sont utilisées pour les requêtes provenant des États-Unis et le système métrique pour le reste du monde. Vous pouvez remplacer ce comportement en ajoutant ?u
, ?m
ou ?M
à une URL comme celle-ci :
$ curl wttr.in/Amsterdam?u # USCS (used by default in US)
$ curl wttr.in/Amsterdam?m # metric (SI) (used by default everywhere except US)
$ curl wttr.in/Amsterdam?M # metric (SI), but show wind speed in m/s
Si vous avez plusieurs options à transmettre, écrivez-les sans délimiteurs entre les deux pour les options à une lettre, et utilisez &
comme délimiteur pour les options longues avec des valeurs :
$ curl 'wttr.in/Amsterdam?m2&lang=nl'
Ce serait un équivalent approximatif de -m2 --lang nl
pour la syntaxe GNU CLI.
wttr.in prend actuellement en charge cinq formats de sortie :
Les formats ANSI et HTML sont sélectionnés en fonction de la chaîne User-Agent.
Pour forcer le texte brut, ce qui désactive les couleurs :
$ curl wttr.in/?T
Pour limiter la sortie aux glyphes disponibles dans les polices de console standard (par exemple Consolas et Lucida Console) :
$ curl wttr.in/?d
Le format PNG peut être forcé en ajoutant .png
à la fin de la requête :
$ wget wttr.in/Paris.png
Vous pouvez utiliser toutes les options au format PNG comme dans une URL, mais vous devez les séparer par _
au lieu de ?
et &
:
$ wget wttr.in/Paris_0tqp_lang=fr.png
Options utiles pour le format PNG :
t
pour la transparence ( transparency=150
);La transparence est une fonctionnalité utile lorsque les fichiers PNG météorologiques sont utilisés pour ajouter des données météorologiques aux images :
$ convert source.jpg <( curl wttr.in/Oymyakon_tqp0.png ) -geometry +50+50 -composite target.jpg
Dans cet exemple :
source.jpg
- fichier source ;target.jpg
- fichier cible ;Oymyakon
- nom du lieu ;tqp0
- options (recommandées).Vous pouvez intégrer un widget wttr.in spécial, qui affiche les conditions météorologiques pour l'emplacement actuel ou sélectionné, dans une page HTML à l'aide du wttr-switcher. Voilà à quoi cela ressemble : wttr-switcher-example ou sur un site Web réel : https://feuerwehr-eisolzried.de/.
Le format de sortie sur une ligne est pratique pour afficher les informations météo dans la barre d'état de différents programmes, tels que tmux , weechat , etc.
Pour le format de sortie sur une ligne, spécifiez format
de paramètre d'URL supplémentaire :
$ curl wttr.in/Nuremberg?format=3
Nuremberg: ? +11⁰C
Formats préconfigurés disponibles : 1, 2, 3, 4 et le format personnalisé utilisant la notation de pourcentage (voir ci-dessous).
Vous pouvez spécifier plusieurs emplacements séparés par :
(pour les requêtes répétitives) :
$ curl wttr.in/Nuremberg:Hamburg:Berlin?format=3
Nuremberg: ? +11⁰C
Ou pour traiter toutes ces requêtes en même temps :
$ curl -s 'wttr.in/{Nuremberg,Hamburg,Berlin}?format=3'
Nuremberg: ? +11⁰C
Hamburg: ? +8⁰C
Berlin: ? +8⁰C
Pour spécifier votre propre format de sortie personnalisé, utilisez la notation spéciale %
:
c Weather condition,
C Weather condition textual name,
x Weather condition, plain-text symbol,
h Humidity,
t Temperature (Actual),
f Temperature (Feels Like),
w Wind,
l Location,
m Moon phase ????????,
M Moon day,
p Precipitation (mm/3 hours),
P Pressure (hPa),
u UV index (1-12),
D Dawn*,
S Sunrise*,
z Zenith*,
s Sunset*,
d Dusk*,
T Current time*,
Z Local timezone.
(*times are shown in the local timezone)
Ainsi, ces deux appels sont identiques :
$ curl wttr.in/London?format=3
London: ⛅️ +7⁰C
$ curl wttr.in/London?format="%l:+%c+%tn"
London: ⛅️ +7⁰C
Lors de l'utilisation dans tmux.conf
, vous devez échapper %
avec %
, c'est-à-dire y écrire %%
au lieu de %
.
La sortie ne contient pas de nouvelle ligne par défaut, lorsque la notation % est utilisée, mais elle la contient lorsque le format préconfiguré ( 1
, 2
, 3
etc.) est utilisé. Pour avoir la nouvelle ligne dans la sortie lorsque la notation % est utilisée, utilisez 'n' et des guillemets simples lorsque vous effectuez une requête à partir du shell.
Dans les programmes qui interrogent automatiquement le service (tels que tmux), il est préférable d'utiliser un intervalle de mise à jour raisonnable. Dans tmux, vous pouvez le configurer avec status-interval
.
Si :
emplacements séparés sont spécifiés dans la requête, spécifiez la période de mise à jour comme paramètre de requête supplémentaire period=
:
set -g status-interval 60
WEATHER='#(curl -s wttr.in/London:Stockholm:Moscow?format="%%l:+%%c%%20%%t%%60%%w&period=60")'
set -g status-right "$WEATHER ..."
Pour intégrer la barre d'état existante d'un client IRC (WeeChat) :
/alias add wttr /exec -pipe "/mute /set plugins.var.wttr" url:wttr.in/Montreal?format=%l:+%c+%f+%h+%p+%P+%m+%w+%S+%s;/wait 3 /item refresh wttr
/trigger add wttr timer 60000;0;0 "" "" "/wttr"
/item add wttr "" "${plugins.var.wttr}"
/eval /set weechat.bar.status.items ${weechat.bar.status.items},spacer,wttr
/eval /set weechat.startup.command_after_plugins ${weechat.startup.command_after_plugins};/wttr
/wttr
Exemple d'utilisation de Conky :
${texeci 1800 curl wttr.in/kyiv_0pq_lang=uk.png
| convert - -transparent black $HOME/.config/conky/out.png}
${image $HOME/.config/conky/out.png -p 0,0}
Exemple d'intégration IRC :
Pour voir les emojis dans le terminal, vous avez besoin de :
Pour la police emoji, nous recommandons Noto Color Emoji , et une bonne option alternative serait la police Emoji One ; les deux prennent en charge tous les glyphes emoji nécessaires.
Configuration des polices :
$ cat ~/.config/fontconfig/fonts.conf
<? xml version = " 1.0 " encoding = " UTF-8 " ?>
<! DOCTYPE fontconfig SYSTEM "fonts.dtd">
< fontconfig >
< alias >
< family >serif</ family >
< prefer >
< family >Noto Color Emoji</ family >
</ prefer >
</ alias >
< alias >
< family >sans-serif</ family >
< prefer >
< family >Noto Color Emoji</ family >
</ prefer >
</ alias >
< alias >
< family >monospace</ family >
< prefer >
< family >Noto Color Emoji</ family >
</ prefer >
</ alias >
</ fontconfig >
(pour appliquer la configuration, exécutez fc-cache -f -v
).
Dans certains cas, tmux
et la compréhension du terminal de certains caractères emoji peuvent différer, ce qui peut provoquer des effets étranges similaires à ceux décrits dans #579.
Dans le format de sortie expérimental riche en données, disponible sous le code de vue v2
, de nombreuses informations météorologiques et astronomiques supplémentaires sont disponibles :
$ curl v2.wttr.in/München
ou
$ curl wttr.in/München?format=v2
ou, si vous préférez les polices Nerd au lieu d'Emoji, v2d
(jour) ou v2n
(nuit) :
$ curl v2d.wttr.in/München
(Le mode est expérimental et présente actuellement plusieurs limitations :
Actuellement, vous avez besoin de quelques ajustements pour certains terminaux, afin d'obtenir la meilleure visualisation possible.
En fonction de votre configuration, vous pouvez suivre toutes les étapes, ou seulement quelques-unes. URXVT ne prend actuellement pas en charge les polices liées aux emoji, mais nous pouvons obtenir presque le même effet en utilisant Font-Symbola . Ajoutez donc à votre fichier .Xresources
la ligne suivante :
xft:symbola:size=10:minspace=False
Vous pouvez l'ajouter après votre police préférée et elle n'apparaîtra qu'en cas de besoin. Ensuite, si vous constatez ou sentez que vous rencontrez des problèmes d'espacement, ajoutez ceci : URxvt.letterSpace: 0
Pour une raison quelconque, URXVT arrête parfois de décider correctement de l'espacement des mots et nous devons le forcer de cette façon.
Le résultat devrait ressembler à :
Dans la vue cartographique expérimentale, disponible sous le code de vue v3
, les informations météorologiques sur une région géographique sont disponibles :
$ curl v3.wttr.in/Bayern.sxl
ou directement dans le navigateur :
La vue cartographique prend actuellement en charge trois formats :
Terminal avec prise en charge des protocoles d'images en ligne :
⟶ Article détaillé : Images dans le terminal
Terminal | Environnement | Prise en charge des images | Protocole |
---|---|---|---|
uxterm | X11 | Oui | Sixel |
mlterm | X11 | Oui | Sixel |
minou | X11 | Oui | Minou |
Wezterm | X11 | Oui | PII |
Tuile sombre | X11 | Oui | Sixel |
Jexer | X11 | Oui | Sixel |
Terminal GNOME | X11 | en cours | Sixel |
empressement | X11 | en cours | Sixel |
pied | Wayland | Oui | Sixel |
DomTerm | Internet | Oui | Sixel |
Yaft | Oui | Sixel | |
iTerm2 | Mac OS X | Oui | PII |
mentholé | Fenêtres | Oui | Sixel |
Terminal Windows | Fenêtres | en cours | Sixel |
RConnexion | Fenêtres | Oui | Sixel |
Le format JSON est une fonctionnalité permettant d'accéder aux données wttr.in via un format facile à analyser, sans obliger l'utilisateur à créer un script complexe pour réinterpréter la sortie graphique de wttr.in.
Pour récupérer des informations au format JSON, utilisez la syntaxe suivante :
$ curl wttr.in/Detroit?format=j1
Cela récupérera des informations sur la région de Détroit au format JSON. Le code au format j1 est utilisé pour permettre l'utilisation d'autres mises en page pour la sortie JSON.
Le résultat ressemblera à ceci :
{
"current_condition" : [
{
"FeelsLikeC" : " 25 " ,
"FeelsLikeF" : " 76 " ,
"cloudcover" : " 100 " ,
"humidity" : " 76 " ,
"observation_time" : " 04:08 PM " ,
"precipMM" : " 0.2 " ,
"pressure" : " 1019 " ,
"temp_C" : " 22 " ,
"temp_F" : " 72 " ,
"uvIndex" : 5 ,
"visibility" : " 16 " ,
"weatherCode" : " 122 " ,
"weatherDesc" : [
{
"value" : " Overcast "
}
],
"weatherIconUrl" : [
{
"value" : " "
}
],
"winddir16Point" : " NNE " ,
"winddirDegree" : " 20 " ,
"windspeedKmph" : " 7 " ,
"windspeedMiles" : " 4 "
}
],
...
La plupart de ces valeurs sont explicites, à l'exception de weatherCode
. Le weatherCode
est une énumération que vous pouvez trouver soit sur le site Web WorldWeatherOnline, soit dans le code source de wttr.in.
Le format Prometheus Metrics est une fonctionnalité permettant d'accéder aux données wttr.in via un format facile à analyser pour les systèmes de surveillance, sans obliger l'utilisateur à créer un script complexe pour réinterpréter la sortie graphique de wttr.in.
Pour récupérer des informations au format Prometheus, utilisez la syntaxe suivante :
$ curl wttr.in/Detroit?format=p1
Cela récupérera des informations sur la région de Détroit au format Prometheus Metrics. Le code au format p1
est utilisé pour permettre l'utilisation d'autres présentations pour la sortie Prometheus Metrics.
Une configuration possible pour Prometheus pourrait ressembler à ceci :
- job_name : ' wttr_in_detroit '
static_configs :
- targets : ['wttr.in']
metrics_path : ' /Detroit '
params :
format : ['p1']
Le résultat ressemblera à ceci :
# HELP temperature_feels_like_celsius Feels Like Temperature in Celsius
temperature_feels_like_celsius{forecast="current"} 7
# HELP temperature_feels_like_fahrenheit Feels Like Temperature in Fahrenheit
temperature_feels_like_fahrenheit{forecast="current"} 45
[truncated]
...
wttr.in peut également être utilisé pour vérifier la phase de la Lune. Cet exemple montre comment voir la phase actuelle de la Lune en mode pleine puissance :
$ curl wttr.in/Moon
Obtenez la phase de lune pour une date particulière en ajoutant @YYYY-MM-DD
:
$ curl wttr.in/Moon@2016-12-25
Les informations sur les phases de lune utilisent Python comme backend.
Pour obtenir les informations sur les phases de lune en mode en ligne, utilisez %m
:
$ curl wttr.in/London?format=%m
?
Gardez à l’esprit que la représentation Unicode des phases de lune souffre de 2 mises en garde :
Avec certaines polices, la représentation ?
est ambigu, car il semble soit presque ombragé, soit presque éclairé, selon que votre terminal est en mode clair ou en mode sombre. S'appuyer sur des polices colorées comme noto-fonts
permet de contourner ce problème.
La représentation ?
est également ambigu, car il signifie « dernier quartier » dans l'hémisphère nord, mais « premier quartier » dans l'hémisphère sud. Cela ne signifie rien non plus dans les zones tropicales. Il s'agit d'une limitation dont Unicode est conscient. Mais cela n’a pas encore été résolu sur wttr.in
Voir #247, #364 pour les problèmes de suivi correspondants et pyphoon#1 pour pyphoon. Toute aide est la bienvenue.
wttr.in prend en charge les noms d'emplacements multilingues qui peuvent être spécifiés dans n'importe quelle langue du monde (cela peut paraître surprenant, mais de nombreux emplacements dans le monde n'ont pas de nom anglais).
La chaîne de requête doit être spécifiée en Unicode (codé en hexadécimal ou non). Les espaces dans la chaîne de requête doivent être remplacés par +
:
$ curl wttr.in/станция+Восток
Weather report: станция Восток
Overcast
.--. -65 – -47 °C
.-( ). ↑ 23 km/h
(___.__)__) 15 km
0.0 mm
La langue utilisée pour la sortie (à l'exception du nom de l'emplacement) ne dépend pas de la langue d'entrée et c'est soit l'anglais (par défaut), soit la langue préférée du navigateur (si la requête a été émise à partir d'un navigateur) qui est spécifiée dans le en-têtes de requête ( Accept-Language
).
La langue peut être définie explicitement lors de l'utilisation de clients de console en utilisant des options de ligne de commande comme celle-ci :
curl -H "Accept-Language: fr" wttr.in
http GET wttr.in Accept-Language:ru
La langue préférée peut être forcée à l'aide de l'option lang
:
$ curl wttr.in/Berlin?lang=de
La troisième option consiste à choisir la langue en utilisant le nom DNS utilisé dans la requête :
$ curl de.wttr.in/Berlin
wttr.in est actuellement traduit en 54 langues et le nombre de langues prises en charge ne cesse de croître.
Voir /:translation pour en savoir plus sur le processus de traduction, pour voir la liste des langues et des contributeurs pris en charge, ou pour savoir comment vous pouvez aider à traduire wttr.in dans votre langue.
Pour installer l'application :
wttr.in a les dépendances externes suivantes :
Après avoir installé golang, installez wego
:
go install github.com/schachmat/wego@latest
Exigences Python :
Si vous souhaitez obtenir des bulletins météo sous forme de fichiers PNG, vous devrez également installer :
Vous pouvez installer la plupart d’entre eux en utilisant pip
.
Certains packages Python utilisent LLVM, alors installez-le d'abord :
apt-get install llvm-7 llvm-7-dev
Si virtualenv
est utilisé :
virtualenv -p python3 ve
ve/bin/pip3 install -r requirements.txt
ve/bin/python3 bin/srv.py
Vous devez également installer la base de données geoip2. Vous pouvez utiliser une base de données gratuite GeoLite2 téléchargeable depuis (http://dev.maxmind.com/geoip/geoip2/geolite2/).
Si vous souhaitez utiliser le service IP2location pour les adresses IP qui ne sont pas couvertes par GeoLite2, vous devez obtenir une clé API de ce service, puis enregistrer dans le fichier ~/.ip2location.key
:
$ echo 'YOUR_IP2LOCATION_KEY' > ~/.ip2location.key
Si vous n'avez pas ce fichier, le service sera ignoré en silence (ce n'est pas un gros problème, car la base de données MaxMind est plutôt bonne).
/root/.wegorc
/root/.ip2location.key (optional)
/app/airports.dat
/app/GeoLite2-City.mmdb
Pour obtenir une clé API WorldWeatherOnline, vous devez vous inscrire ici :
https://developer.worldweatheronline.com/auth/register
Une fois que vous disposez d'une clé WorldWeatherOnline, vous pouvez l'enregistrer dans le fichier de clé WWO : ~/.wwo.key
De plus, vous devez spécifier la clé dans la configuration wego
:
$ cat ~/.wegorc
{
"APIKey" : " 00XXXXXXXXXXXXXXXXXXXXXXXXXXX " ,
"City" : " London " ,
"Numdays" : 3 ,
"Imperial" : false ,
"Lang" : " en "
}
Le paramètre City
dans ~/.wegorc
est ignoré.
Configurez les variables d'environnement suivantes qui définissent le chemin d'accès à l'installation locale wttr.in
, à la base de données GeoLite et à l'installation wego
. Par exemple:
export WTTR_MYDIR= " /home/igor/wttr.in "
export WTTR_GEOLITE= " /home/igor/wttr.in/GeoLite2-City.mmdb "
export WTTR_WEGO= " /home/igor/go/bin/wego "
export WTTR_LISTEN_HOST= " 0.0.0.0 "
export WTTR_LISTEN_PORT= " 8002 "
Il est recommandé de configurer également le serveur Web qui sera utilisé pour accéder au service :
server {
listen [::]:80;
server_name wttr.in *.wttr.in;
access_log /var/log/nginx/wttr.in-access.log main ;
error_log /var/log/nginx/wttr.in-error.log;
location / {
proxy_pass http://127.0.0.1:8002;
proxy_set_header Host $host ;
proxy_set_header X-Real-IP $remote_addr ;
proxy_set_header X-Forwarded-For $remote_addr ;
client_max_body_size 10m ;
client_body_buffer_size 128k ;
proxy_connect_timeout 90 ;
proxy_send_timeout 90 ;
proxy_read_timeout 90 ;
proxy_buffer_size 4k ;
proxy_buffers 4 32k ;
proxy_busy_buffers_size 64k ;
proxy_temp_file_write_size 64k ;
expires off ;
}
}