Информационные "виджеты" на PHP в Ubuntu

Источник: habrahabr
kovalevsky

Я хочу поделиться с вами идеей написания подобия информационных виджетов на PHP.
Суть заключается в том, что средствами PHP легко граббить или просто получать информацию из интернета (+ личные предпочтения этому языку), после чего эту информацию можно вывести, используя утилиту notify-send, красиво и лаконично в правый угол монитора. 

Скажу сразу, что на новаторство я не претендую. Возможно, данный метод может показаться многим довольно глупым, но мне, например, проще посмотреть в угол монитора, чем забивать рабочий стол всякими скринлетами, конки и прочим. 
В качестве примера создадим виджет погоды, на основе данных с openweathermap.com.

Нам понадобится веб-сервер с PHP, не важно на локалхосте или нет. 
Создайте на сервере директорию, в которой будут лежать виджеты, у меня это /public_html/scripts/.

Приступим к первой части - PHP:


Создайте файл с именем, например, weather.php. Создали? Отлично. Теперь давайте получим данные с openweathermap.com. У них есть своё API для этих целей, с которым можно познакомиться на этом же сайте, так что не будем на этом останавливаться.
Сперва нам нужно получить идентификатор нужного нам города. Для этого на сайте найдите этот город и посмотрите подробную информацию о нём. В адресной строке мы увидим идентификатор.
Для моего города ссылка виглядит так: openweathermap.org/city/705812, собственно идентификатор здесь 705812.
Отлично, теперь мы знаем id города и можем получить данные с помощью API

Листинг weather.php:
<?php
error_reporting(0);
Header('Content-Type: text/html; charset=utf-8');

function getWeather($id)
{
    if(!empty($id))
    {
        $json = file_get_contents('http://openweathermap.org/data/weather/'.$id.'?type=json');
        $weatherData = json_decode($json, true);
        return $weatherData;
    }
}

$weather = getWeather('705812'); // id нужного города
file_put_contents('weather.png', file_get_contents($weather['img'])); // сохраним картинку погоды для вывода в качество иконки для notify-send.

echo $weather['name']."\n";
echo $weather['temp']." °C\n";
echo "Облачность: ".$weather['clouds']."% \n";
echo "Давление: ".$weather['pressure']." hpa \n";
echo "Влажность: ".$weather['humidity']."% \n";
?>


Вторая часть - Shell скрипт.


Тут всё просто. Мы получаем содержимое нашей страницы с данными в файл, записываем его содержимое в переменную и выводим это через notify-send, используя стащенную с сервера иконку.
Я положил shell скрипт в домашнюю директорию с именем weather.sh

Листинг weather.sh:
#!/bin/bash

rm weather.php
wget http://localhost/scripts/weather.php
WEATHER=`cat ~/weather.php`
notify-send "Погода" "$WEATHER" -i ~/webserv/public_html/scripts/weather.png


PS. Если у кого-нибудь есть способ сделать это вариант по проще, то буду рад выслушать.

Заключение


При вызове shell-скрипта получим что-то похожее на это:

А дальше можно выводить каждую минуту/час/день и т.д. по крону, либо назначить на него горячую клавишу через Compiz или что-нибудь ещё. Тут уже дело личных предпочтений.
Надеюсь, данный материал покажется кому-то полезным. 
Спасибо за внимание.

Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=30133