wttr.in – der richtige Weg, um das curl
zu überprüfen !
wttr.in ist ein konsolenorientierter Wettervorhersagedienst, der verschiedene Informationsdarstellungsmethoden unterstützt, wie terminalorientierte ANSI-Sequenzen für Konsolen-HTTP-Clients (curl, httpie oder wget), HTML für Webbrowser oder PNG für grafische Viewer.
Ursprünglich als kleines Projekt gestartet, ein Wrapper für Wego, der die Leistungsfähigkeit der konsolenorientierten Dienste demonstrieren sollte, entwickelte sich wttr.in zu einem beliebten Wetterberichtsdienst, der täglich zig Millionen Anfragen bearbeitet.
Sie können es hier sehen: wttr.in.
Dokumentation | Verwendung | Einzeilige Ausgabe | Datenreiches Ausgabeformat | Kartenansicht | Ausgabeformate | Mondphasen | Internationalisierung | Installation
Sie können über eine Shell oder einen Webbrowser wie folgt auf den Dienst zugreifen:
$ curl wttr.in
Weather for City: Paris, France
/ Clear
.-. 10 – 11 °C
― ( ) ― ↑ 11 km/h
`-’ 10 km
/ 0.0 mm
Hier ist ein Beispiel für einen Wetterbericht:
Oder in PowerShell:
Invoke-RestMethod https: // wttr.in
Möchten Sie die Wetterinformationen für einen bestimmten Ort erhalten? Sie können der URL in Ihrer Anfrage den gewünschten Standort wie folgt hinzufügen:
$ curl wttr.in/London
$ curl wttr.in/Moscow
$ curl wttr.in/Salt+Lake+City
Wenn Sie den Standortnamen weglassen, erhalten Sie den Bericht für Ihren aktuellen Standort basierend auf Ihrer IP-Adresse.
Verwenden Sie dreibuchstabige Flughafencodes, um die Wetterinformationen an einem bestimmten Flughafen zu erhalten:
$ curl wttr.in/muc # Weather for IATA: muc, Munich International Airport, Germany
$ curl wttr.in/ham # Weather for IATA: ham, Hamburg Airport, Germany
Nehmen wir an, Sie möchten das Wetter für einen anderen geografischen Ort als eine Stadt abrufen – vielleicht eine Sehenswürdigkeit in einer Stadt, einen Bergnamen oder einen besonderen Ort. Fügen Sie das Zeichen ~
vor dem Namen hinzu, um nach dem Namen dieses speziellen Ortes zu suchen, bevor dann das Wetter abgerufen wird:
$ curl wttr.in/~Vostok+Station
$ curl wttr.in/~Eiffel+Tower
$ curl wttr.in/~Kilimanjaro
In diesen Beispielen sehen Sie unterhalb der Wettervorhersageausgabe eine Zeile, die die Geolokalisierungsergebnisse der Standortsuche anzeigt:
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]
Sie können auch IP-Adressen (direkt) oder Domänennamen (mit dem Präfix @
) verwenden, um einen Standort anzugeben:
$ curl wttr.in/@github.com
$ curl wttr.in/@msu.ru
Um detaillierte Informationen online zu erhalten, können Sie auf die Seite /:help zugreifen:
$ curl wttr.in/:help
Standardmäßig werden für die Abfragen aus den USA die USCS-Einheiten und für den Rest der Welt das metrische System verwendet. Sie können dieses Verhalten überschreiben, indem Sie ?u
, ?m
oder ?M
zu einer URL wie dieser hinzufügen:
$ 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
Wenn Sie mehrere Optionen übergeben müssen, schreiben Sie diese ohne Trennzeichen dazwischen für die Ein-Buchstaben-Optionen und verwenden Sie &
als Trennzeichen für die langen Optionen mit Werten:
$ curl 'wttr.in/Amsterdam?m2&lang=nl'
Es wäre eine ungefähre Entsprechung von -m2 --lang nl
für die GNU-CLI-Syntax.
wttr.in unterstützt derzeit fünf Ausgabeformate:
Die ANSI- und HTML-Formate werden basierend auf der User-Agent-Zeichenfolge ausgewählt.
So erzwingen Sie einfachen Text, der Farben deaktiviert:
$ curl wttr.in/?T
So beschränken Sie die Ausgabe auf Glyphen, die in Standard-Konsolenschriftarten verfügbar sind (z. B. Consolas und Lucida Console):
$ curl wttr.in/?d
Das PNG-Format kann erzwungen werden, indem .png
am Ende der Abfrage hinzugefügt wird:
$ wget wttr.in/Paris.png
Sie können alle Optionen im PNG-Format wie in einer URL verwenden, müssen diese jedoch durch _
statt ?
trennen. Und &
:
$ wget wttr.in/Paris_0tqp_lang=fr.png
Nützliche Optionen für das PNG-Format:
t
für Transparenz ( transparency=150
);Transparenz ist eine nützliche Funktion, wenn Wetter-PNGs verwendet werden, um Wetterdaten zu Bildern hinzuzufügen:
$ convert source.jpg <( curl wttr.in/Oymyakon_tqp0.png ) -geometry +50+50 -composite target.jpg
In diesem Beispiel:
source.jpg
– Quelldatei;target.jpg
– Zieldatei;Oymyakon
– Name des Ortes;tqp0
– Optionen (empfohlen).Mit dem wttr-switcher können Sie ein spezielles wttr.in-Widget, das die Wetterbedingungen für den aktuellen oder einen ausgewählten Standort anzeigt, in eine HTML-Seite einbetten. So sieht es aus: wttr-switcher-example oder auf einer realen Website: https://feuerwehr-eisolzried.de/.
Das einzeilige Ausgabeformat ist praktisch, um Wetterinformationen in der Statusleiste verschiedener Programme wie tmux , weechat usw. anzuzeigen.
Geben Sie für ein einzeiliges Ausgabeformat ein zusätzliches URL- format
an:
$ curl wttr.in/Nuremberg?format=3
Nuremberg: ? +11⁰C
Verfügbare vorkonfigurierte Formate: 1, 2, 3, 4 und das benutzerdefinierte Format mit der Prozentnotation (siehe unten).
Sie können mehrere Standorte angeben, getrennt durch :
(für sich wiederholende Abfragen):
$ curl wttr.in/Nuremberg:Hamburg:Berlin?format=3
Nuremberg: ? +11⁰C
Oder um alle diese Abfragen auf einmal zu bearbeiten:
$ curl -s 'wttr.in/{Nuremberg,Hamburg,Berlin}?format=3'
Nuremberg: ? +11⁰C
Hamburg: ? +8⁰C
Berlin: ? +8⁰C
Um Ihr eigenes benutzerdefiniertes Ausgabeformat anzugeben, verwenden Sie die spezielle %
-Notation:
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)
Diese beiden Aufrufe sind also identisch:
$ curl wttr.in/London?format=3
London: ⛅️ +7⁰C
$ curl wttr.in/London?format="%l:+%c+%tn"
London: ⛅️ +7⁰C
Bei Verwendung in tmux.conf
müssen Sie %
mit %
maskieren, also dort %%
statt %
schreiben.
Die Ausgabe enthält standardmäßig keine neue Zeile, wenn die %-Notation verwendet wird, wohl aber, wenn vorkonfigurierte Formate ( 1
, 2
, 3
usw.) verwendet werden. Um die neue Zeile in der Ausgabe zu haben, wenn die %-Notation verwendet wird, verwenden Sie „n“ und einfache Anführungszeichen, wenn Sie eine Abfrage über die Shell durchführen.
In Programmen, die den Dienst automatisch abfragen (z. B. tmux), ist es besser, ein angemessenes Aktualisierungsintervall zu verwenden. In tmux können Sie es mit status-interval
konfigurieren.
Wenn in der Abfrage mehrere, :
getrennte Standorte angegeben sind, geben Sie als zusätzlichen Abfrageparameter den Aktualisierungszeitraum 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 ..."
Zum Einbetten in die bestehende Statusleiste eines IRC-Clients (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
Beispiel für die Verwendung von 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}
Beispiel für die IRC-Integration:
Um Emojis im Terminal anzuzeigen, benötigen Sie:
Als Emoji-Schriftart empfehlen wir Noto Color Emoji . Eine gute Alternative wäre die Schriftart Emoji One . Beide unterstützen alle notwendigen Emoji-Glyphen.
Schriftartkonfiguration:
$ 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 >
(Um die Konfiguration anzuwenden, führen Sie fc-cache -f -v
aus).
In einigen Fällen können tmux
und das Terminalverständnis einiger Emoji-Zeichen unterschiedlich sein, was zu seltsamen Effekten führen kann, die den in #579 beschriebenen ähneln.
Im experimentellen datenreichen Ausgabeformat, das unter dem Ansichtscode v2
verfügbar ist, sind viele zusätzliche Wetter- und astronomische Informationen verfügbar:
$ curl v2.wttr.in/München
oder
$ curl wttr.in/München?format=v2
oder, wenn Sie Nerd-Schriftarten anstelle von Emoji bevorzugen, v2d
(Tag) oder v2n
(Nacht):
$ curl v2d.wttr.in/München
(Der Modus ist experimentell und weist derzeit mehrere Einschränkungen auf:
Derzeit sind für einige Terminals einige Anpassungen erforderlich, um die bestmögliche Visualisierung zu erhalten.
Abhängig von Ihrer Konfiguration führen Sie möglicherweise alle oder nur einige Schritte aus. URXVT unterstützt derzeit keine Emoji-bezogenen Schriftarten, aber wir können mit Font-Symbola fast den gleichen Effekt erzielen. Fügen Sie also Ihrer .Xresources
Datei die folgende Zeile hinzu:
xft:symbola:size=10:minspace=False
Sie können es nach Ihrer bevorzugten Schriftart hinzufügen und es wird nur bei Bedarf angezeigt. Wenn Sie dann sehen oder das Gefühl haben, dass Sie Probleme mit dem Wortabstand haben, fügen Sie Folgendes hinzu: URxvt.letterSpace: 0
Aus irgendeinem Grund entscheidet URXVT manchmal nicht mehr über den richtigen Wortabstand und wir müssen es auf diese Weise erzwingen.
Das Ergebnis sollte wie folgt aussehen:
In der experimentellen Kartenansicht, die unter dem Ansichtscode v3
verfügbar ist, sind Wetterinformationen zu einer geografischen Region verfügbar:
$ curl v3.wttr.in/Bayern.sxl
oder direkt im Browser:
Die Kartenansicht unterstützt derzeit drei Formate:
Terminal mit Unterstützung für Inline-Bildprotokolle:
⟶ Ausführlicher Artikel: Bilder im Terminal
Terminal | Umfeld | Bildunterstützung | Protokoll |
---|---|---|---|
uxterm | X11 | Ja | Sixel |
mlterm | X11 | Ja | Sixel |
Kätzchen | X11 | Ja | Kitty |
wezterm | X11 | Ja | IIP |
Darktile | X11 | Ja | Sixel |
Jexer | X11 | Ja | Sixel |
GNOME-Terminal | X11 | im Gange | Sixel |
Eifer | X11 | im Gange | Sixel |
Fuß | Wayland | Ja | Sixel |
DomTerm | Web | Ja | Sixel |
Yaft | FB | Ja | Sixel |
iTerm2 | Mac OS X | Ja | IIP |
minzig | Windows | Ja | Sixel |
Windows-Terminal | Windows | im Gange | Sixel |
RLogin | Windows | Ja | Sixel |
Das JSON-Format ist eine Funktion, die den Zugriff auf wttr.in- Daten über ein einfach zu analysierendes Format ermöglicht, ohne dass der Benutzer ein komplexes Skript erstellen muss, um die grafische Ausgabe von wttr.in neu zu interpretieren.
Um Informationen im JSON-Format abzurufen, verwenden Sie die folgende Syntax:
$ curl wttr.in/Detroit?format=j1
Dadurch werden Informationen über die Region Detroit im JSON-Format abgerufen. Der j1-Formatcode wird verwendet, um die Verwendung anderer Layouts für die JSON-Ausgabe zu ermöglichen.
Das Ergebnis sieht in etwa wie folgt aus:
{
"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 "
}
],
...
Abgesehen von weatherCode
sind die meisten dieser Werte selbsterklärend. Der weatherCode
ist eine Aufzählung, die Sie entweder auf der WorldWeatherOnline-Website oder im wttr.in-Quellcode finden.
Das Prometheus-Metrics-Format ist eine Funktion, die den Zugriff auf wttr.in- Daten über ein einfach zu analysierendes Format für Überwachungssysteme ermöglicht, ohne dass der Benutzer ein komplexes Skript erstellen muss, um die grafische Ausgabe von wttr.in neu zu interpretieren.
Um Informationen im Prometheus-Format abzurufen, verwenden Sie die folgende Syntax:
$ curl wttr.in/Detroit?format=p1
Dadurch werden Informationen über die Region Detroit im Prometheus-Metrics-Format abgerufen. Der p1
Formatcode wird verwendet, um die Verwendung anderer Layouts für die Prometheus-Metrics-Ausgabe zu ermöglichen.
Eine mögliche Konfiguration für Prometheus könnte so aussehen:
- job_name : ' wttr_in_detroit '
static_configs :
- targets : ['wttr.in']
metrics_path : ' /Detroit '
params :
format : ['p1']
Das Ergebnis sieht in etwa wie folgt aus:
# 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 kann auch zur Überprüfung der Mondphase verwendet werden. Dieses Beispiel zeigt, wie die aktuelle Mondphase im Vollausgabemodus angezeigt wird:
$ curl wttr.in/Moon
Rufen Sie die Mondphase für ein bestimmtes Datum ab, indem Sie @YYYY-MM-DD
hinzufügen:
$ curl wttr.in/Moon@2016-12-25
Die Mondphaseninformationen verwenden Python als Backend.
Um die Mondphaseninformationen im Online-Modus zu erhalten, verwenden Sie %m
:
$ curl wttr.in/London?format=%m
?
Beachten Sie, dass die Unicode-Darstellung der Mondphasen zwei Einschränkungen aufweist:
Bei einigen Schriftarten ist die Darstellung ?
ist mehrdeutig, da es entweder fast im Schatten oder fast beleuchtet erscheint, je nachdem, ob sich Ihr Terminal im hellen oder dunklen Modus befindet. Durch den Einsatz farbiger Schriftarten wie noto-fonts
lässt sich dieses Problem umgehen.
Die Darstellung ?
ist ebenfalls mehrdeutig, denn es bedeutet „letztes Viertel“ auf der Nordhalbkugel, aber „erstes Viertel“ auf der Südhalbkugel. Auch in tropischen Zonen bedeutet es nichts. Dies ist eine Einschränkung, die Unicode kennt. Aber es wurde bei wttr.in
noch nicht umgangen.
Siehe #247, #364 für die entsprechenden Tracking-Probleme und pyphoon#1 für pyphoon. Jede Hilfe ist willkommen.
wttr.in unterstützt mehrsprachige Ortsnamen, die in jeder Sprache der Welt angegeben werden können (es mag überraschend sein, aber viele Orte auf der Welt haben keinen englischen Namen).
Die Abfragezeichenfolge sollte in Unicode angegeben werden (hex-kodiert oder nicht). Leerzeichen in der Abfragezeichenfolge müssen durch +
ersetzt werden:
$ curl wttr.in/станция+Восток
Weather report: станция Восток
Overcast
.--. -65 – -47 °C
.-( ). ↑ 23 km/h
(___.__)__) 15 km
0.0 mm
Die für die Ausgabe verwendete Sprache (mit Ausnahme des Standortnamens) hängt nicht von der Eingabesprache ab und ist entweder Englisch (standardmäßig) oder die bevorzugte Sprache des Browsers (wenn die Abfrage von einem Browser ausgegeben wurde), der in angegeben ist Abfrageheader ( Accept-Language
).
Die Sprache kann bei Verwendung von Konsolen-Clients mithilfe von Befehlszeilenoptionen wie diesen explizit festgelegt werden:
curl -H "Accept-Language: fr" wttr.in
http GET wttr.in Accept-Language:ru
Die bevorzugte Sprache kann mit der Option lang
erzwungen werden:
$ curl wttr.in/Berlin?lang=de
Die dritte Möglichkeit besteht darin, die Sprache anhand des in der Abfrage verwendeten DNS-Namens auszuwählen:
$ curl de.wttr.in/Berlin
wttr.in ist derzeit in 54 Sprachen übersetzt und die Anzahl der unterstützten Sprachen wächst ständig.
Unter /:translation erfahren Sie mehr über den Übersetzungsprozess, die Liste der unterstützten Sprachen und Mitwirkenden oder erfahren, wie Sie bei der Übersetzung von wttr.in in Ihre Sprache helfen können.
So installieren Sie die Anwendung:
wttr.in hat die folgenden externen Abhängigkeiten:
Nachdem Sie Golang installiert haben, installieren Sie wego
:
go install github.com/schachmat/wego@latest
Python-Anforderungen:
Wenn Sie Wetterberichte als PNG-Dateien erhalten möchten, müssen Sie außerdem Folgendes installieren:
Sie können die meisten davon mit pip
installieren.
Einige Python-Pakete verwenden LLVM, also installieren Sie es zuerst:
apt-get install llvm-7 llvm-7-dev
Wenn virtualenv
verwendet wird:
virtualenv -p python3 ve
ve/bin/pip3 install -r requirements.txt
ve/bin/python3 bin/srv.py
Außerdem müssen Sie die Geoip2-Datenbank installieren. Sie können die kostenlose Datenbank GeoLite2 verwenden, die Sie unter (http://dev.maxmind.com/geoip/geoip2/geolite2/) herunterladen können.
Wenn Sie den IP2location-Dienst für IP-Adressen verwenden möchten, die nicht von GeoLite2 abgedeckt werden, müssen Sie einen API-Schlüssel dieses Dienstes erhalten und anschließend in der Datei ~/.ip2location.key
speichern:
$ echo 'YOUR_IP2LOCATION_KEY' > ~/.ip2location.key
Wenn Sie diese Datei nicht haben, wird der Dienst stillschweigend übersprungen (das ist kein großes Problem, da die MaxMind-Datenbank ziemlich gut ist).
/root/.wegorc
/root/.ip2location.key (optional)
/app/airports.dat
/app/GeoLite2-City.mmdb
Um einen WorldWeatherOnline-API-Schlüssel zu erhalten, müssen Sie sich hier registrieren:
https://developer.worldweatheronline.com/auth/register
Nachdem Sie einen WorldWeatherOnline-Schlüssel haben, können Sie ihn in der WWO-Schlüsseldatei speichern: ~/.wwo.key
Außerdem müssen Sie den Schlüssel in der wego
-Konfiguration angeben:
$ cat ~/.wegorc
{
"APIKey" : " 00XXXXXXXXXXXXXXXXXXXXXXXXXXX " ,
"City" : " London " ,
"Numdays" : 3 ,
"Imperial" : false ,
"Lang" : " en "
}
Der City
Parameter in ~/.wegorc
wird ignoriert.
Konfigurieren Sie die folgenden Umgebungsvariablen, die den Pfad zur lokalen wttr.in
-Installation, zur GeoLite-Datenbank und zur wego
-Installation definieren. Zum Beispiel:
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 "
Es wird empfohlen, auch den Webserver zu konfigurieren, der für den Zugriff auf den Dienst verwendet wird:
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 ;
}
}