wttr.in是面向控制台的天气预报服务,它支持各种信息表示方法,例如用于控制台HTTP客户端(curl,httpie或wget)的面向终端的ANSI序列,用于Web浏览器的HTML或用于图形查看器的PNG。
wttr.in使用wego进行可视化,并使用各种数据源获取天气预报信息。
您可以在此处查看它的运行情况:wttr.in。
您可以从外壳或Web浏览器访问服务,如下所示:
$ curl wttr.in
Weather for City: Paris, France
\ / Clear
.-. 10 – 11 °C
― ( ) ― ↑ 11 km/h
`-’ 10 km
/ \ 0.0 mm
这是您所在位置的实际天气报告(直播!):
(这不是您的实际位置-GitHub的CDN用您自己的IP地址隐藏了您的真实IP地址,但它仍然是您所用语言的实时天气报告。)
或在PowerShell中:
(Invoke-WebRequest http://wttr.in).Content
是否想获取特定位置的天气信息?您可以像这样在请求中将所需位置添加到URL:
$ curl wttr.in/London
$ curl wttr.in/Moscow
如果省略位置名称,则将基于IP地址获取当前位置的报告。
使用三字母机场代码以获取特定机场的天气信息:
$ 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单位用于来自美国的查询以及世界其他地区的公制。您可以通过添加?u
或添加?m
到这样的URL 来覆盖此行为:
$ curl wttr.in/Amsterdam?u
$ curl wttr.in/Amsterdam?m
wttr.in当前支持五种输出格式:
根据用户代理字符串选择ANSI和HTML格式。可以通过.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页面中,该小部件将当前或所选位置的天气状况显示在HTML页面中。看起来是这样的:wttr-switcher-example或在现实世界的网站上:https : //feuerwehr-eisolzried.de/。
对于单行输出格式,请指定其他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,
h Humidity,
t Temperature,
w Wind,
l Location,
m Moonphase ,
M Moonday,
p precipitation (mm),
o Probability of Precipitation,
P pressure (hPa),
D Dawn*,
S Sunrise*,
z Zenith*,
s Sunset*,
d Dusk*.
(times are shown in the local timezone)
因此,这两个调用是相同的:
$ curl wttr.in/London?format=3
London: ⛅️ +7⁰C
$ curl wttr.in/London?format="%l:+%c+%t"
London: ⛅️ +7⁰C
请记住,在使用时中tmux.conf
,你有逃跑%
用%
,即写有%%
代替%
。
在自动查询服务的程序(例如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 ..."
要在终端中查看表情符号,您需要:
对于Emoji字体,我们建议使用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
)
在视图数据下可用的实验数据丰富的输出格式中,还可以v2
使用许多其他天气和天文信息:
$ curl v2.wttr.in/München
要么
$ curl wttr.in/München?format=v2
(此模式是实验性的,目前存在一些局限性:
当前,您需要对某些终端进行一些调整,以获得最佳的可视化效果。
根据您的配置,您可能会执行所有步骤,也可能仅执行几个步骤。目前,URXVT不支持与表情符号相关的字体,但是使用Font-Symbola可以获得几乎相同的效果。因此.Xresources
,将以下行添加到您的文件中:
xft:symbola:size=10:minspace=False
您可以在首选字体之后添加它,它只会在需要时显示。然后,如果您发现或感觉到有间距问题,请添加以下内容:URxvt.letterSpace: 0
由于某种原因,URXVT有时会停止正确确定单词间距,因此我们需要以这种方式强制使用。
结果应如下所示:
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"
}
],
...
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表示有两个警告:
是模棱两可的,因为它看起来几乎是阴影或几乎是灯光,这取决于您的终端是处于亮模式还是暗模式。依靠彩色字体等noto-fonts
解决此问题。
也模棱两可,因为在北半球表示“最后一个季度”,在南半球表示“第一季度”。在热带地区也没有任何意义。这是Unicode知道的限制 。但这还没有解决wttr.in
。wttr.in支持可以在世界上任何语言中指定的多语言位置名称(这可能令人惊讶,但是世界上许多位置都没有英文名称)。
查询字符串应以Unicode指定(是否为十六进制编码)。查询字符串中的空格必须替换为+
:
$ 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种语言,支持的语言数量也在不断增长。
当前存在两个与Windows相关的问题,这些问题使本页上找到的示例无法按预期正常工作。在Microsoft解决问题之前,有一些解决方法。为了避免这两个问题,您可以使用外壳程序,例如bash
在Linux的Windows子系统(WSL)上,或继续阅读以获取替代解决方案。
当前Win32版本的限制curl
。在解决Win32 curl问题并将其在将来的Windows版本中推出之前,建议您改用Powershell的Invoke-Web-Request
命令:
(Invoke-WebRequest http://wttr.in).Content
第二个问题是关于某些Windows终端应用程序(例如默认conhost.exe
使用)的对角箭头标志符号的宽度。在撰写本文时ConEmu.exe
,,ConEmu64.exe
并且在ConEmu之上构建的终端应用程序(例如Cmder(cmder.exe
))默认情况下使用这些双倍宽字形。所有这些程序的结果都是相同的,某些风向缺少字符或输出中的表损坏或两者兼有。某些第三方终端应用程序已解决了风向标志符号问题,但此修复方法取决于您使用的字体和终端应用程序。在终端应用程序中显示对角风向标志符号的一种方法是使用Windows终端,该终端当前在Microsoft Store中可用。Windows Terminal当前是预览版本,将在以后的版本中作为默认的终端应用程序推出。如果使用Windows Terminal后输出仍然偏斜,请尝试最大化终端窗口。您可以显示对角线风向另一种方法是利用正向和反向斜线换出存在问题的字符如图所示这里。
要安装该应用程序:
wttr.in具有以下外部依赖性:
安装golang之后,请安装wego
:
$ go get -u github.com/schachmat/wego
$ go install github.com/schachmat/wego
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数据库。您可以使用免费的数据库GeoLite2,该数据库可以从(http://dev.maxmind.com/geoip/geoip2/geolite2/)下载。
如果要将IP2location服务用于GeoLite2未涵盖的IP地址,则必须获取该服务的API密钥,然后将其保存到~/.ip2location.key
文件中:
$ echo 'YOUR_IP2LOCATION_KEY' > ~/.ip2location.key
如果您没有此文件,该服务将被静默跳过(这不是一个大问题,因为MaxMind数据库非常不错)。
要获取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"
}
中的City
参数将~/.wegorc
被忽略。
配置以下环境变量,这些变量定义了本地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;
}
}
欢迎大家分享哦~
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。