wttr.in — curl
天気をチェックする正しい方法!
wttr.in は、コンソール HTTP クライアント用のターミナル指向の ANSI シーケンス (curl、httpie、または wget)、Web ブラウザ用の HTML、グラフィカル ビューア用の PNG など、さまざまな情報表現方法をサポートするコンソール指向の天気予報サービスです。
もともと、コンソール指向のサービスの力を実証することを目的とした、wego のラッパーである小さなプロジェクトとして開始されたwttr.in は、毎日数千万のクエリを処理する人気の天気予報サービスになりました。
wttr.in で実行中の様子を確認できます。
ドキュメント |使い方 |一行出力 |データが豊富な出力形式 |マップビュー |出力形式 |ムーンフェイズ |国際化 |インストール
次のように、シェルまたは Web ブラウザからサービスにアクセスできます。
$ curl wttr.in
Weather for City: Paris, France
/ Clear
.-. 10 – 11 °C
― ( ) ― ↑ 11 km/h
`-’ 10 km
/ 0.0 mm
以下は天気予報の例です。
または、PowerShell で次のようにします。
Invoke-RestMethod https: // wttr.in
特定の場所の天気情報を取得したいですか?次のように、リクエスト内の URL に目的の場所を追加できます。
$ curl wttr.in/London
$ curl wttr.in/Moscow
$ curl wttr.in/Salt+Lake+City
場所の名前を省略すると、IP アドレスに基づいて現在の場所のレポートが取得されます。
特定の空港の気象情報を取得するには、3 文字の空港コードを使用します。
$ curl wttr.in/muc # Weather for IATA: muc, Munich International Airport, Germany
$ curl wttr.in/ham # Weather for IATA: ham, Hamburg Airport, Germany
町や都市以外の地理的な場所 (都市の観光スポット、山の名前、または特別な場所) の天気を取得したいとします。天気を取得する前に特別な場所の名前を検索するには、名前の前に文字~
を追加します。
$ curl wttr.in/~Vostok+Station
$ curl wttr.in/~Eiffel+Tower
$ curl wttr.in/~Kilimanjaro
これらの例では、天気予報の出力の下に、場所を検索した地理位置情報の結果を示す行が表示されます。
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]
IP アドレス (直接) またはドメイン名 (先頭に@
が付く) を使用して場所を指定することもできます。
$ curl wttr.in/@github.com
$ curl wttr.in/@msu.ru
詳細情報をオンラインで入手するには、/:help ページにアクセスできます。
$ curl wttr.in/:help
デフォルトでは、米国からのクエリには USCS 単位が使用され、その他の地域にはメートル法が使用されます。この動作は、次のように URL に?u
、 ?m
または?M
を追加することでオーバーライドできます。
$ 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
渡すオプションが複数ある場合は、1 文字のオプションの場合は間に区切り文字を入れずにそれらを記述し、値を含む長いオプションの場合は区切り文字として&
使用します。
$ curl 'wttr.in/Amsterdam?m2&lang=nl'
これは、GNU CLI 構文の-m2 --lang nl
とほぼ同等です。
wttr.in は現在、次の 5 つの出力形式をサポートしています。
ANSI 形式と HTML 形式は、ユーザー エージェント文字列に基づいて選択されます。
色を無効にしてプレーン テキストを強制するには:
$ curl wttr.in/?T
出力を標準コンソール フォント (Consolas や Lucida Console など) で使用できるグリフに制限するには:
$ curl wttr.in/?d
クエリの末尾に.png
を追加すると、PNG 形式を強制できます。
$ wget wttr.in/Paris.png
URL と同様に PNG 形式ですべてのオプションを使用できますが、? ではなく_
で区切る必要があります?
そして&
:
$ wget wttr.in/Paris_0tqp_lang=fr.png
PNG 形式の便利なオプション:
t
透明度を表します ( transparency=150
)。透明度は、天気 PNG を使用して写真に天気データを追加する場合に便利な機能です。
$ convert source.jpg <( curl wttr.in/Oymyakon_tqp0.png ) -geometry +50+50 -composite target.jpg
この例では:
source.jpg
- ソース ファイル;target.jpg
- ターゲット ファイル;Oymyakon
- 場所の名前。tqp0
- オプション (推奨)。wttr-switcher を使用して、現在または選択した場所の気象状況を表示する特別な wttr.in ウィジェットを HTML ページに埋め込むことができます。それは次のようになります: wttr-switcher-example または実際の Web サイト: https://feuerwehr-eisolzried.de/。
1 行の出力形式は、 tmux 、 weechatなどのさまざまなプログラムのステータス バーに天気情報を表示するのに便利です。
1 行の出力形式の場合は、追加の URL パラメータformat
を指定します。
$ curl wttr.in/Nuremberg?format=3
Nuremberg: ? +11⁰C
利用可能な事前設定形式: 1、2、3、4、およびパーセント表記を使用したカスタム形式 (下記を参照)。
:
で区切って複数の場所を指定できます (クエリを繰り返す場合)。
$ curl wttr.in/Nuremberg:Hamburg:Berlin?format=3
Nuremberg: ? +11⁰C
または、このクエリをすべて一度に処理するには:
$ curl -s 'wttr.in/{Nuremberg,Hamburg,Berlin}?format=3'
Nuremberg: ? +11⁰C
Hamburg: ? +8⁰C
Berlin: ? +8⁰C
独自のカスタム出力形式を指定するには、特別な%
表記を使用します。
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)
したがって、これら 2 つの呼び出しは同じです。
$ curl wttr.in/London?format=3
London: ⛅️ +7⁰C
$ curl wttr.in/London?format="%l:+%c+%tn"
London: ⛅️ +7⁰C
tmux.conf
で使用する場合は、 %
%
でエスケープする必要があります。つまり、 %
の代わりに%%
と記述する必要があります。
% 表記が使用されている場合、デフォルトでは出力に改行は含まれませんが、事前構成された形式 ( 1
、 2
、 3
など) が使用されている場合は改行が含まれます。 % 表記が使用されているときに出力に新しい行を含めるには、シェルからクエリを実行するときに 'n' と一重引用符を使用します。
サービスに自動的にクエリを実行するプログラム (tmux など) では、適切な更新間隔を使用することをお勧めします。 tmux では、 status-interval
を使用して設定できます。
クエリで複数の:
区切りの場所が指定されている場合は、追加のクエリ パラメーター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 ..."
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
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}
IRC 統合の例:
ターミナルで絵文字を表示するには、次のものが必要です。
絵文字フォントについては、 Noto Color Emoji をお勧めします。代替オプションとしてEmoji Oneフォントもおすすめです。どちらも必要な絵文字グリフをすべてサポートしています。
フォント構成:
$ 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 >
(構成を適用するには、 fc-cache -f -v
を実行します)。
場合によっては、 tmux
と一部の絵文字の端末の理解が異なる可能性があり、#579 で説明されているものと同様の奇妙な効果が発生する可能性があります。
ビュー コードv2
で使用できる実験的なデータが豊富な出力形式では、多くの追加の天気および天文情報が利用可能です。
$ curl v2.wttr.in/München
または
$ curl wttr.in/München?format=v2
または、絵文字の代わりに Nerd Fonts を使用したい場合は、 v2d
(昼) またはv2n
(夜):
$ curl v2d.wttr.in/München
(このモードは実験的なものであり、現在いくつかの制限があります。
現在、可能な限り最高の視覚化を得るには、一部の端末でいくつかの調整が必要です。
構成に応じて、すべての手順を実行することも、いくつかの手順のみを実行することもできます。 URXVT は現在、絵文字関連のフォントをサポートしていませんが、 Font-Symbola を使用するとほぼ同じ効果を得ることができます。したがって、 .Xresources
ファイルに次の行を追加します。
xft:symbola:size=10:minspace=False
好みのフォントの後に追加すると、必要な場合にのみ表示されます。次に、スペースの問題が発生していると感じた場合は、これを追加します: URxvt.letterSpace: 0
何らかの理由で、URXVT が単語のスペースを正しく決定しなくなる場合があるため、このように強制する必要があります。
結果は次のようになります。
ビュー コードv3
で利用できる実験的なマップ ビューでは、地理的地域に関する気象情報を利用できます。
$ curl v3.wttr.in/Bayern.sxl
またはブラウザで直接:
マップ ビューは現在 3 つの形式をサポートしています。
インライン画像プロトコルを備えた端末は以下をサポートします。
⟶詳細記事:端末内の画像
ターミナル | 環境 | 画像のサポート | プロトコル |
---|---|---|---|
終期 | X11 | はい | シクセル |
mlterm | X11 | はい | シクセル |
子猫 | X11 | はい | キティ |
ウェザーム | X11 | はい | IIP |
ダークタイル | X11 | はい | シクセル |
ジェクサー | X11 | はい | シクセル |
GNOME ターミナル | X11 | 進行中 | シクセル |
うるさい | X11 | 進行中 | シクセル |
足 | ウェイランド | はい | シクセル |
DomTerm | ウェブ | はい | シクセル |
ヤフト | FB | はい | シクセル |
iTerm2 | Mac OS X | はい | IIP |
ミント | 窓 | はい | シクセル |
Windowsターミナル | 窓 | 進行中 | シクセル |
Rログイン | 窓 | はい | シクセル |
JSON 形式は、wttr.in のグラフィカル出力を再解釈するための複雑なスクリプトをユーザーが作成する必要なく、解析しやすい形式を通じてwttr.inデータへのアクセスを提供する機能です。
JSON 形式で情報を取得するには、次の構文を使用します。
$ curl wttr.in/Detroit?format=j1
これにより、デトロイト地域に関する情報が JSON 形式で取得されます。 j1 形式のコードは、JSON 出力に他のレイアウトを使用できるようにするために使用されます。
結果は次のようになります。
{
"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 "
}
],
...
weatherCode
を除いて、これらの値のほとんどは一目瞭然です。 weatherCode
は、WorldWeatherOnline Web サイトまたは wttr.in ソース コードで見つけることができる列挙です。
Prometheus Metrics 形式は、ユーザーが wttr.in のグラフィカル出力を再解釈するための複雑なスクリプトを作成する必要なく、監視システム用に解析しやすい形式を通じてwttr.inデータへのアクセスを提供する機能です。
Prometheus 形式で情報を取得するには、次の構文を使用します。
$ curl wttr.in/Detroit?format=p1
これにより、デトロイト地域に関する情報が Prometheus Metrics 形式で取得されます。 p1
形式のコードは、Prometheus メトリクス出力に他のレイアウトを使用できるようにするために使用されます。
Prometheus の可能な構成は次のようになります。
- job_name : ' wttr_in_detroit '
static_configs :
- targets : ['wttr.in']
metrics_path : ' /Detroit '
params :
format : ['p1']
結果は次のようになります。
# 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 は月の満ち欠けを確認するためにも使用できます。次の例は、フル出力モードで現在のムーンフェイズを確認する方法を示しています。
$ curl wttr.in/Moon
@YYYY-MM-DD
を追加して、特定の日付の月相を取得します。
$ curl wttr.in/Moon@2016-12-25
月齢情報はバックエンドとして pyphoon を使用します。
オンライン モードで月齢情報を取得するには、 %m
使用します。
$ curl wttr.in/London?format=%m
?
月の満ち欠けの Unicode 表現には 2 つの注意点があることに注意してください。
一部のフォントでは、その表現は?
端末がライト モードかダーク モードかに応じて、ほとんど影になっているか、ほとんど光っているように見えるため、曖昧です。 noto-fonts
ようなカラーフォントを使用すると、この問題を回避できます。
表現は?
北半球では「最後の四半期」を意味しますが、南半球では「最初の四半期」を意味するため、これも曖昧です。また、熱帯地域では何の意味もありません。これは Unicode が認識している制限です。しかし、 wttr.in
ではまだ回避されていません。
対応する追跡問題については #247、#364 を、pyphoon については pyphoon#1 を参照してください。お手伝いは大歓迎です。
wttr.in は、世界中のどの言語でも指定できる多言語の場所名をサポートしています (驚くかもしれませんが、世界の多くの場所には英語名がありません)。
クエリ文字列は Unicode (16 進エンコードかどうか) で指定する必要があります。クエリ文字列内のスペースは+
に置き換える必要があります。
$ curl wttr.in/станция+Восток
Weather report: станция Восток
Overcast
.--. -65 – -47 °C
.-( ). ↑ 23 km/h
(___.__)__) 15 km
0.0 mm
出力に使用される言語 (場所の名前を除く) は入力言語には依存せず、英語 (デフォルト) またはブラウザーの優先言語 (クエリーがブラウザーから発行された場合) のいずれかになります。クエリヘッダー ( Accept-Language
)。
コンソール クライアントを使用する場合は、次のようなコマンド ライン オプションを使用して言語を明示的に設定できます。
curl -H "Accept-Language: fr" wttr.in
http GET wttr.in Accept-Language:ru
lang
オプションを使用して優先言語を強制できます。
$ curl wttr.in/Berlin?lang=de
3 番目のオプションは、クエリで使用される DNS 名を使用して言語を選択することです。
$ curl de.wttr.in/Berlin
wttr.in は現在 54 の言語に翻訳されており、サポートされる言語の数は増え続けています。
翻訳プロセスの詳細については、「/:translation」を参照してください。サポートされている言語と寄稿者のリストを確認するか、wttr.in を自分の言語で翻訳する方法を確認してください。
アプリケーションをインストールするには:
wttr.in には次の外部依存関係があります。
golang をインストールした後、 wego
をインストールします。
go install github.com/schachmat/wego@latest
Python の要件:
天気予報を PNG ファイルとして取得したい場合は、以下もインストールする必要があります。
それらのほとんどはpip
使用してインストールできます。
一部の Python パッケージは LLVM を使用するため、最初にそれをインストールします。
apt-get install llvm-7 llvm-7-dev
virtualenv
使用する場合:
virtualenv -p python3 ve
ve/bin/pip3 install -r requirements.txt
ve/bin/python3 bin/srv.py
また、geoip2 データベースをインストールする必要があります。 (http://dev.maxmind.com/geoip/geoip2/geolite2/) からダウンロードできる無料のデータベース GeoLite2 を使用できます。
GeoLite2 でカバーされていない IP アドレスに対して IP2location サービスを使用したい場合は、そのサービスの API キーを取得し、その後~/.ip2location.key
ファイルに保存する必要があります。
$ echo 'YOUR_IP2LOCATION_KEY' > ~/.ip2location.key
このファイルがない場合、サービスは通知なくスキップされます (MaxMind データベースは非常に優れているため、これは大きな問題ではありません)。
/root/.wegorc
/root/.ip2location.key (optional)
/app/airports.dat
/app/GeoLite2-City.mmdb
WorldWeatherOnline API キーを取得するには、ここで登録する必要があります。
https://developer.worldweatheronline.com/auth/register
WorldWeatherOnline キーを取得したら、それを WWO キー ファイル~/.wwo.key
に保存できます。
また、 wego
設定でキーを指定する必要があります。
$ cat ~/.wegorc
{
"APIKey" : " 00XXXXXXXXXXXXXXXXXXXXXXXXXXX " ,
"City" : " London " ,
"Numdays" : 3 ,
"Imperial" : false ,
"Lang" : " en "
}
~/.wegorc
のCity
パラメーターは無視されます。
ローカルのwttr.in
インストール、GeoLite データベース、およびwego
インストールへのパスを定義する次の環境変数を構成します。例えば:
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 "
サービスへのアクセスに使用される Web サーバーも構成することをお勧めします。
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 ;
}
}