Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
astrizak
6 лет назад

Информатор об отключениях электроэнергии

Что-то довели меня сегодня Калининградские энергетики. Не скажу за всю область, но в той её части где я живу отключения электроэнергии случаются едва ли не каждый день. Причем продолжительность отключений весьма значительная - весь рабочий день, а я работаю в интернете и электричество мне необходимо, да и в доме многое завязано не электричество.

Как только ветер подует - света нет, пойдет дождь - света нет, жарит солнце - света нет. Стоимость электроэнергии постоянно растет, а качество предоставляемых услуг никак не улучшается. Вот и сегодня снова отключили электричество. Сначала в седьмом часу утра, потом с 10 до 15, а потом еще чутка. Оказалось очередная авария, без света несколько поселков.

Информацию по аварийным и плановым отключениям можно найти на сайте Янтарьэнерго http://www.yantarenergo.ru/klientam/otklyucheniya-elektroenergii/avariynie-otklyucheniya, но вот когда случилась авария, попасть на сайт не удастся. Приходится сидеть и гадать отключили свет локально в деревне или в районе или вообще какой-нибудь блэкаут в области и когда все наладится.

Решил я написать скрипт-уведомлялку, который будет парсить сайт Янтарьэнерго и отправлять мне смс в случае обнаружения моей деревни в списке аварийных отключений

Сам скрипт простой, поэтому приведу его здесь полностью. Как только находится совпадение с населенным пунктом, скрипт шлет смс с текстом "План дата" или "Авария дата" через сервис sms.ru. Этот сервис позволяет отправлять бесплатные смс на свой номер. Можно слать более подробную информацию, но мне достаточно знать, что мой населенный пункт числится либо в плановых, либо в аварийных. Кроме того длина смс ограничена (за деньги можно хоть целый рассказ отправить)

Для парсинга html я использовал php скрипт simple_html_dom Я часто использую этот скрипт, он хоть и немного устаревший, но достаточно простой и эффективный. Информатор размещается на хостинге и вызывается по таймеру, путем простого обращения к веб странице или через консоль.

Вот собственно и сам скрипт-информатор:

require_once './simple_html_dom.php';

function checkEnergy($type)
{
    $html = file_get_html("http://kabinet.yantarenergo.ru/".$type."/listIframe");
    $li = $html->find('li');

    $p=1;

   //Поскольку Янтарьэнерго использует постраничный вывод, предварительно определяем кол-во
  //страниц с данными 
    foreach($li as $l)
    {
        if(preg_match('/[0-9]/',$l->plaintext,$matches, PREG_OFFSET_CAPTURE))
        {
            $p=$l->plaintext;
        }
    }

   //После, парсим каждую страницу. Как только находится совпадение цикл прерывается
    for($i=1; $i<=$p; $i++)
    {
        $h = file_get_html("http://kabinet.yantarenergo.ru/".$type."/listIframe?Plan_page=".$p);

        foreach( $h->find('tr') as $tr)
        {
            if($type=="plan")
            {
                $addr=$tr->find('td', 3)->plaintext;
                $rn=$tr->find('td', 2)->plaintext;
                $dt=$tr->find('td', 5)->plaintext;
                $dsc="План";
            }
            else
            {
                $addr=$tr->find('td', 3)->plaintext;
                $dt=$tr->find('td', 2)->plaintext;
                $rn=$tr->find('td', 1)->plaintext;
                $dsc="Авария";
            }

            if((preg_match('/Деревня/',$addr,$matches))
            {
                //$sms = file_get_contents("https://sms.ru/sms/send?api_id=your_api_key&to=phone&msg=".urlencode($dsc." ".$dt)."&json=1");
                $i=$p;
                break;
            }
        }
    }
}

checkEnergy("plan");
checkEnergy("otkluchenia");

Надеюсь данное решение пригодится кому-нибудь кроме меня.

7
0.502 GOLOS
На Golos с July 2017
Комментарии (4)
Сортировать по:
Сначала старые