wttr.in — 날씨 curl
확인하는 올바른 방법!
wttr.in은 콘솔 HTTP 클라이언트(curl, httpie 또는 wget)용 터미널 지향 ANSI 시퀀스, 웹 브라우저용 HTML 또는 그래픽 뷰어용 PNG와 같은 다양한 정보 표현 방법을 지원하는 콘솔 지향 일기 예보 서비스입니다.
원래는 콘솔 지향 서비스의 힘을 보여주기 위한 작은 프로젝트인 작은 프로젝트로 시작된 wttr.in은 매일 수천만 건의 쿼리를 처리하는 인기 있는 날씨 보고 서비스가 되었습니다.
여기서 실행되는 것을 볼 수 있습니다: wttr.in.
문서 | 사용법 | 한 줄 출력 | 데이터가 풍부한 출력 형식 | 지도 보기 | 출력 형식 | 달의 위상 | 국제화 | 설치
다음과 같이 셸이나 웹 브라우저에서 서비스에 액세스할 수 있습니다.
$ 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
온라인으로 자세한 정보를 얻으려면 /:도움말 페이지에 액세스할 수 있습니다.
$ 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
전달할 옵션이 여러 개인 경우 한 문자 옵션의 경우 구분 기호 없이 작성하고 값이 있는 긴 옵션의 경우 구분 기호로 &
사용합니다.
$ curl 'wttr.in/Amsterdam?m2&lang=nl'
이는 GNU CLI 구문의 -m2 --lang nl
과 거의 동일합니다.
wttr.in은 현재 5가지 출력 형식을 지원합니다:
ANSI 및 HTML 형식은 User-Agent 문자열을 기반으로 선택됩니다.
색상을 비활성화하는 일반 텍스트를 강제로 적용하려면:
$ 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 또는 실제 웹 사이트: https://feuerwehr-eisolzried.de/.
한 줄 출력 형식은 tmux , weechat 등과 같은 다양한 프로그램의 상태 표시줄에 날씨 정보를 표시하는 데 사용하기에 편리합니다.
한 줄 출력 형식의 경우 추가 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)
따라서 이 두 호출은 동일합니다.
$ 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
또는 Emoji, v2d
(낮) 또는 v2n
(밤) 대신 Nerd Fonts를 선호하는 경우:
$ 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
또는 브라우저에서 직접:
지도 보기는 현재 다음 세 가지 형식을 지원합니다.
인라인 이미지 프로토콜을 지원하는 터미널:
⟶ 상세 기사: 터미널 내 이미지
단말기 | 환경 | 이미지 지원 | 규약 |
---|---|---|---|
학기말 | X11 | 예 | 식셀 |
mlterm | X11 | 예 | 식셀 |
고양이 새끼 | X11 | 예 | 고양이 새끼 |
웨즈텀 | X11 | 예 | IIP |
다크타일 | X11 | 예 | 식셀 |
젝서 | X11 | 예 | 식셀 |
그놈 터미널 | X11 | 진행 중 | 식셀 |
기민함 | X11 | 진행 중 | 식셀 |
발 | 웨이랜드 | 예 | 식셀 |
DomTerm | 편물 | 예 | 식셀 |
요트 | 페이스북 | 예 | 식셀 |
iTerm2 | 맥 OS X | 예 | IIP |
민트티 | 윈도우 | 예 | 식셀 |
윈도우 터미널 | 윈도우 | 진행중 | 식셀 |
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 웹사이트나 wttr.in 소스 코드에서 찾을 수 있는 열거형입니다.
Prometheus Metrics 형식은 사용자가 wttr.in의 그래픽 출력을 재해석하기 위해 복잡한 스크립트를 만들 필요 없이 모니터링 시스템을 위해 쉽게 구문 분석할 수 있는 형식을 통해 wttr.in 데이터에 대한 액세스를 제공하는 기능입니다.
Prometheus 형식으로 정보를 가져오려면 다음 구문을 사용하세요.
$ curl wttr.in/Detroit?format=p1
그러면 Prometheus Metrics 형식으로 디트로이트 지역에 대한 정보를 가져옵니다. p1
형식 코드는 Prometheus Metrics 출력에 다른 레이아웃을 사용할 수 있도록 하는 데 사용됩니다.
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
?
달의 위상을 유니코드로 표현하는 데는 두 가지 주의 사항이 있습니다.
일부 글꼴의 경우 표현은 ?
터미널이 밝은 모드인지 어두운 모드인지에 따라 거의 그림자가 드리워지거나 거의 켜져 있는 것처럼 보이기 때문에 모호합니다. noto-fonts
와 같은 컬러 글꼴을 사용하면 이 문제를 해결할 수 있습니다.
표현 ?
북반구에서는 "마지막 분기"를 의미하지만 남반구에서는 "1분기"를 의미하기 때문에 모호합니다. 또한 열대 지역에서는 아무 의미가 없습니다. 이는 유니코드가 알고 있는 제한 사항입니다. 하지만 아직 wttr.in
에서는 해결되지 않았습니다.
해당 추적 문제는 #247, #364를, pyphoon은 pyphoon#1을 참조하세요. 어떤 도움이라도 환영합니다.
wttr.in은 전 세계 모든 언어로 지정할 수 있는 다국어 위치 이름을 지원합니다(놀랍게도 전 세계 많은 위치에 영어 이름이 없습니다).
쿼리 문자열은 유니코드(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
세 번째 옵션은 쿼리에 사용된 DNS 이름을 사용하여 언어를 선택하는 것입니다.
$ curl de.wttr.in/Berlin
wttr.in은 현재 54개 언어로 번역되어 있으며 지원되는 언어의 수는 지속적으로 증가하고 있습니다.
번역 프로세스에 대해 자세히 알아보고, 지원되는 언어 및 기여자 목록을 확인하고, wttr.in을 귀하의 언어로 번역하는 데 어떻게 도움을 줄 수 있는지 알아보려면 /:translation을 참조하세요.
애플리케이션을 설치하려면:
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 "
서비스에 액세스하는 데 사용할 웹 서버도 구성하는 것이 좋습니다.
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 ;
}
}