wttr.in - الطريقة الصحيحة للتحقق curl
الطقس!
wttr.in عبارة عن خدمة تنبؤ بالطقس موجهة لوحدة التحكم وتدعم طرقًا متنوعة لتمثيل المعلومات مثل تسلسلات ANSI الموجهة للمحطة لعملاء HTTP لوحدة التحكم (curl أو httpie أو wget) أو HTML لمتصفحات الويب أو PNG للمشاهدين الرسوميين.
بدأت wttr.in في الأصل كمشروع صغير، وهو عبارة عن برنامج مجمع لـ wego، يهدف إلى إظهار قوة الخدمات الموجهة لوحدة التحكم، وأصبحت خدمة تقارير الطقس الشهيرة، حيث تتعامل مع عشرات الملايين من الاستفسارات يوميًا.
يمكنك رؤيتها قيد التشغيل هنا: wttr.in.
التوثيق | الاستخدام | إخراج سطر واحد | تنسيق الإخراج الغني بالبيانات | عرض الخريطة | تنسيقات الإخراج | مراحل القمر | التدويل | تثبيت
يمكنك الوصول إلى الخدمة من خلال Shell أو من متصفح الويب مثل هذا:
$ curl wttr.in
Weather for City: Paris, France
/ Clear
.-. 10 – 11 °C
― ( ) ― ↑ 11 km/h
`-’ 10 km
/ 0.0 mm
فيما يلي مثال لتقرير الطقس:
أو في بوويرشيل:
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 للاستعلامات الواردة من الولايات المتحدة الأمريكية والنظام المتري لبقية دول العالم. يمكنك تجاوز هذا السلوك عن طريق إضافة ?u
أو ?m
أو ?M
إلى عنوان URL مثل هذا:
$ 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'
سيكون مكافئًا تقريبيًا لـ -m2 --lang nl
لبناء جملة GNU CLI.
يدعم wttr.in حاليًا خمسة تنسيقات إخراج:
يتم تحديد تنسيقات ANSI وHTML بناءً على سلسلة وكيل المستخدم.
لفرض نص عادي، مما يؤدي إلى تعطيل الألوان:
$ curl wttr.in/?T
لتقييد الإخراج بالحروف الرسومية المتوفرة في خطوط وحدة التحكم القياسية (مثل Consolas وLucida Console):
$ curl wttr.in/?d
يمكن فرض تنسيق PNG عن طريق إضافة .png
إلى نهاية الاستعلام:
$ wget wttr.in/Paris.png
يمكنك استخدام جميع الخيارات بتنسيق PNG كما هو الحال في عنوان URL، ولكن يتعين عليك فصلها بـ _
بدلاً من ?
و &
:
$ 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.in خاص، يعرض حالة الطقس للموقع الحالي أو الموقع المحدد، في صفحة HTML باستخدام wttr-switcher. هكذا يبدو الأمر: wttr-switcher-example أو على موقع ويب حقيقي: https://feuerwehr-eisolzried.de/.
يُعد تنسيق الإخراج ذو السطر الواحد مناسبًا للاستخدام لعرض معلومات الطقس في شريط الحالة للبرامج المختلفة، مثل tmux و weechat وما إلى ذلك.
بالنسبة لتنسيق الإخراج المكون من سطر واحد، حدد format
معلمة URL الإضافي:
$ 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
مثال استخدام كونكي:
${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 بدلاً من Emoji أو 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
أو مباشرة في المتصفح:
يدعم عرض الخريطة حاليًا ثلاثة تنسيقات:
محطة مع دعم بروتوكولات الصور المضمنة:
⟶ مقالة مفصلة: الصور في المحطة
صالة | بيئة | دعم الصور | بروتوكول |
---|---|---|---|
com.uxterm | X11 | نعم | سيكسل |
com.mlterm | X11 | نعم | سيكسل |
كيتي | X11 | نعم | كيتي |
com.wezterm | X11 | نعم | IIP |
داركتايل | X11 | نعم | سيكسل |
جيكسر | X11 | نعم | سيكسل |
محطة جنوم | X11 | في تَقَدم | سيكسل |
نشاط | X11 | في تَقَدم | سيكسل |
قدم | وايلاند | نعم | سيكسل |
دومتيرم | ويب | نعم | سيكسل |
يافت | فيسبوك | نعم | سيكسل |
iTerm2 | ماك أو إس إكس | نعم | IIP |
النعناع | ويندوز | نعم | سيكسل |
محطة ويندوز | ويندوز | في تَقَدم | سيكسل |
تسجيل الدخول | ويندوز | نعم | سيكسل |
يعد تنسيق 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
?
ضع في اعتبارك أن تمثيل Unicode لمراحل القمر يعاني من تحذيرين:
مع بعض الخطوط التمثيل ?
غامض، لأنه يبدو إما مظللًا تقريبًا أو مضاءً تقريبًا، اعتمادًا على ما إذا كان جهازك الطرفي في الوضع الفاتح أو الوضع الداكن. الاعتماد على الخطوط الملونة مثل noto-fonts
يعمل على حل هذه المشكلة.
التمثيل ?
وهو أيضًا غامض، لأنه يعني "الربع الأخير" في نصف الكرة الشمالي، ولكنه يعني "الربع الأول" في نصف الكرة الجنوبي. كما أنه لا يعني شيئًا في المناطق الاستوائية. وهذا هو القيد الذي يعرفه Unicode. ولكن لم يتم حل هذه المشكلة في wttr.in
حتى الآن.
راجع #247، #364 لمعرفة مشكلات التتبع المقابلة، وpyphoon#1 لـ pyphoon. أي مساعدة هي موضع ترحيب.
يدعم 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 لغة، ويتزايد عدد اللغات المدعومة باستمرار.
راجع /:translation لمعرفة المزيد حول عملية الترجمة، أو لرؤية قائمة اللغات المدعومة والمساهمين، أو لمعرفة كيف يمكنك المساعدة في ترجمة wttr.in إلى لغتك.
لتثبيت التطبيق:
لدى wttr.in التبعيات الخارجية التالية:
بعد تثبيت golang، قم بتثبيت wego
:
go install github.com/schachmat/wego@latest
متطلبات بايثون:
إذا كنت ترغب في الحصول على تقارير الطقس كملفات 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 لعناوين IP التي لا تغطيها GeoLite2، فيجب عليك الحصول على مفتاح 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 "
}
يتم تجاهل معلمة 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 "
يوصى أيضًا بتكوين خادم الويب الذي سيتم استخدامه للوصول إلى الخدمة:
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 ;
}
}