
Як спарсити погоду з sinoptik та відправити через бота телеграм
Блог Фрилансера
15 бер. 2018

Телеграми боти стали дуже популярними. Зараз можна зустріти їх у будь-яких сферах від замовлення таксі, до банкінка — оплати послуг, переказ грошей.
Ще популярність їх заслуговує на те, що api для написання ботів дуже просте .Ось сторінка API російською.
>Я ж покажу тільки частину коду, що відповідає за прийом і виведення інформації в канал .
Дані зберігати в базі не будемо, просто хочу показати принцип роботи.
І так будемо використовувати phpQuery та Curl для парсера з siniptik.ua.
будемо обробляти такий рядок
Функція curl_content() описана у статті про парсер з olx
Тепер перевірятимемо як це все працює в Телеграмі.
if (strpos($text, '/wea') !== false) {
$option = explode(" ", $text); // Розбиває рядок за допомогою роздільника $option[1]-Київ,$option[2] = число 3
require ('api/phpQuery.php'); // бібліотека
$html=curl_content('https://sinoptik.ua/погода-'.$option[1].'/10-дней');// Парсі всі 10 днів
phpQuery::newDocument($html);
$xbodycontent = pq('#blockDays > .tabs')->find('.main');
$ i = 0;
foreach ($xbodycontent as $res) {
$ pqres = pq ($ res);
$day = $pqres->find('.day-link')->text();//день
$date = $pqres->find('.date')->text();//дата
$icon = $pqres->find('.weatherIco')->attr('title');//напис на малюнку
$iconimg = $pqres->find('.weatherImg')->html();//напис на малюнку
$temperature = $pqres->find('.temperature')->text();// Температура
//перевіряємо що погода щоб визначити який смайлик відправити для візуалізації
if ($icon == 'Хмарно, невеликий сніг') {
$emoji = hex2bin('F09F8CA809'); //hex2bin('f09f9880') //подання смайлу https://apps.timwhitlock.info/emoji/tables/unicode
}
if ($icon == 'Хмарно, сильний сніг') {
$emoji = hex2bin('F09F8CA809');
}
if ($icon == 'Хмарно, сніг') {
$emoji = hex2bin('E29B84');
}
if ($icon == 'Хмарно') {
$emoji = hex2bin('E29881');
}
if ($icon == 'Хмарно з проясненнями, мокрий сніг') {
$emoji =hex2bin('F09F8CA609');
}
if ($icon == 'Хмарно з проясненнями') {
$emoji =hex2bin('F09F8CA409');
}
if ($icon == 'Хмарно з проясненнями, невеликий сніг') {
$emoji =hex2bin('E29D8409');
}
// Оправляємо в канал результат
$content = ['chat_id' => $chat_id,
'parse_mode'=>'Markdown',
'text' => $day.$date.chr(10).$temperature.chr(10).$emoji.$icon
];
requestToTelegram($content);
if(isset($option[2])? $num=$option[2] : $num=2);
if(++$i == $num) break;//обмеження в $num висновків
}
}

Експериментуйте і можливо саме ви зробите щось вартісне