Парсим дані з GisMeteo в bash - е

Блог про Linux, Bash та інші інформаційні технології

bash
Якщо ви раптом якимось дивом ще не чули про сайт gismeteo.ru, то, двома словами, це сайт, на якому публікується поточна інформація про погоду для різних населених пунктів. Щоб подивитися, що зараз приблизно на вулиці за погода (з певною похибкою, звичайно), достатньо відкрити сайт і подивитися. Крім того, цей сайт має можливість отримувати дані у форматі XML.

Але ми не будемо користуватися форматом XML, тому що для коректного аналізу xml зазвичай використовуються додаткові програми. Ми скористаємось іншими програмами, які зазвичай у системі вже присутні (за винятком curl, який за умовчанням є не у всіх системах) – bash, sed та curl. Curl потрібний тільки для отримання сторінки за протоколом https, і замість нього можна скористатися будь-якою іншою програмою, яка може отримати сторінку за https і вивести її в термінал (це може зробити і wget, і links), можна використовувати ту програму, яка вам більше подобається .

Головне завдання цього скрипту – виводити в консоль інформацію про погоду у текстовому режимі. Чим цей скрипт може бути корисним? Тим, що результат його роботи можна використовувати для відправки собі як SMS, електронною поштою або використовувати для відображення на робочому столі за допомогою conky.

Якщо не зовсім зрозуміло, трохи поясню, що відбувається. Завантажуємо curl'ом сторінку, виводимо її в стандартний потік виводу, а помилки в /dev/null. Потім видаляємо всі непотрібні рядки, залишаємо тільки ті, які містяться між рядком з підрядком section higher і мм рт. ст.» включно. Таким чином, видаляється інформація про температуру води, але це в моєму випадку не страшно,тому що Пітер не найбільш курортне місто, і про вологість повітря, що теж не страшно, тому що вологість зазвичай не найнижча. Потім з рядків, що залишилися, знову видаляємо непотрібні, дістаємо назву міста, стан атмосфери (ясно, похмуро, хмарно), температуру повітря, швидкість вітру і атмосферний тиск.

І, власне, все. Після запуску скрипта отримуємо такий висновок: