[Модуль] Telegram (telegram)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: Модуль "Telegram"

Сообщение directman66 » Вс май 27, 2018 2:53 pm

Поделюсь информацией о том, как я графики и виджеты научился отправлять в телеграм.

Задача: отправить информацию из шаблона в телегу.

Решение: создаем в домашних страницах нужный шаблон, например вставляем в него

Код: Выделить всё

<table width="100">
<tr><td>
[#module name="yandexweather" type="TODAYMINI" skin="1"  width="30" height="30" #]
 </td></tr>
Проверяем, что нужный вид доступен по адресу ссылки preview например
/page/39.html
Далее добавляем сценарий html2tlg:

Код: Выделить всё

$url=$params['url'];
$w=$params['w'];
$h=$params['h'];
if ($url==""){
 $url='http://login:password@ip/page/39.html';

}
if ($w==""){$w=200;}
if ($h==""){$h=900;}


$fc=file_get_contents('http://api.rest7.com/v1/html_to_image.php?url=' . $url . '&format=png');
echo $fc;
$data = json_decode($fc);

if (@$data->success !== 1)
{
    die('Failed');
}
$image = file_get_contents($data->file);
$save_to="./cached/screen.png"; // куда сохранять
file_put_contents($save_to, $image);
//SaveFile($save_to, $result);




$image = new Imagick($save_to);
$image->cropImage($h,$w, 0,0);
$image->writeImage($save_to.'1');


include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$telegram_module->sendImageToAll($save_to.'1');
Далее в телеграмм создаем команду:

Код: Выделить всё

include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();

$option = array(

 $telegram_module->buildInlineKeyboardButton($text="Погода","",  "Callback_html2tlg_pogoda","")

) ;


$count_row = 3;
$option = array_chunk($option, $count_row);
$keyb = $telegram_module->buildInlineKeyBoard($option);

$content = array('chat_id' => $chat_id, 'text' => "Датчики: ".$dir, 'reply_markup' => $keyb, 'parse_mode' => 'HTML');
$telegram_module->sendContent($content); 

И callback:

Код: Выделить всё

//$telegram_module->sendMessageToAll($callback);
//$telegram_module->sendMessageToAll(substr($callback,9,6));
//$telegram_module->sendMessageToAll(substr($callback,16));

if (substr($callback,9,8) == 'html2tlg')
{
 if (substr($callback,18)=='pogoda') {$url='http://логин:пароль@вашипадрес/page/39.html';}
//$url=substr($callback,18); 
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram(); 
$telegram_module->sendMessageToAll($url); 
  //rs('sensor2telega', array('zapros' =>substr($callback,16)));
runScriptSafe('html2tlg', array('url' =>substr($url), 'h'=>250)); 
//$telegram_module->sendMessageToAll(substr($callback,16)); 
 
}
 


Теперь виджет погоды может по запросу приходить в телегу!!!
СпойлерПоказать
Безымянный3434.png
Безымянный3434.png (79.85 КБ) 4436 просмотров
Если кто сможет локально установить 'http://api.rest7.com/v1/html_to_image.php - тому жирный + в репутацию. Я исходников не нашел.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Аватара пользователя
Amarok
Сообщения: 1425
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Модуль "Telegram"

Сообщение Amarok » Вс май 27, 2018 3:04 pm

А по моему вопросу как?(
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
Аватара пользователя
Eraser
Сообщения: 1085
Зарегистрирован: Вт окт 21, 2014 7:31 pm
Откуда: Киров
Благодарил (а): 14 раз
Поблагодарили: 869 раз
Контактная информация:

Re: Модуль "Telegram"

Сообщение Eraser » Вс май 27, 2018 3:07 pm

Amarok писал(а):А по моему вопросу как?(
Экспортируйте команды, посмотрю

Отправлено с моего MX_Base через Tapatalk

Connect ---- Telegram
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!! :D
Аватара пользователя
Amarok
Сообщения: 1425
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Модуль

Сообщение Amarok » Вс май 27, 2018 3:41 pm

Eraser писал(а):
Вс май 27, 2018 3:07 pm
Экспортируйте команды, посмотрю
Ушло в личку
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
Аватара пользователя
Eraser
Сообщения: 1085
Зарегистрирован: Вт окт 21, 2014 7:31 pm
Откуда: Киров
Благодарил (а): 14 раз
Поблагодарили: 869 раз
Контактная информация:

Re: Модуль

Сообщение Eraser » Вс май 27, 2018 3:49 pm

Amarok писал(а):
Вс май 27, 2018 3:41 pm
Eraser писал(а):
Вс май 27, 2018 3:07 pm
Экспортируйте команды, посмотрю
Ушло в личку
нет в событиях $skip = true; который говорит что обработку дальнейшую надо остановить, вот и получается что выполняется оба обработчика события
https://majordomo.smartliving.ru/forum/ ... kip#p62758
Connect ---- Telegram
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!! :D
Аватара пользователя
dioxin
Сообщения: 175
Зарегистрирован: Вт фев 14, 2017 4:43 pm
Откуда: Иваново
Благодарил (а): 15 раз
Поблагодарили: 46 раз

Re: Модуль "Telegram"

Сообщение dioxin » Вс май 27, 2018 4:16 pm

directman66 писал(а):
Вс май 27, 2018 2:53 pm
Поделюсь информацией о том, как я графики и виджеты научился отправлять в телеграм.

Задача: отправить информацию из шаблона в телегу.

Теперь виджет погоды может по запросу приходить в телегу!!!
СпойлерПоказать
Безымянный3434.png
Если кто сможет локально установить 'http://api.rest7.com/v1/html_to_image.php - тому жирный + в репутацию. Я исходников не нашел.
===========================================================================

Я написал вот такой код:

Код: Выделить всё

if (file_exists("/var/www/pogoda/pognow.jpg")) {
    unlink("/var/www/pogoda/pognow.jpg");}
$output = shell_exec('xvfb-run -a -s "-screen 0 1024x768x24" wkhtmltoimage --crop-x 15 --crop-y 180 --crop-w 882 --crop-h 437 https://yandex.ru/pogoda/ivanovo/details?from=serp_title /var/www/pogoda/pognow.jpg');
Он с помощью утилиты xvfb скриншотит страницу и обрезает по заданным критериям. Сохраненный .jpg файл уже использую и локально и если надо отправляю в телегу.
Установка утилиты: apt-get install xvfb
СпойлерПоказать
2018-05-27_16-06-43.png
2018-05-27_16-06-43.png (55.38 КБ) 4679 просмотров
За это сообщение автора dioxin поблагодарили (всего 2):
ipc2002 (Вс ноя 24, 2019 11:18 pm) • Samir77 (Сб сен 04, 2021 10:07 am)
Рейтинг: 2.33%
Алиска прописана на Debian 11 | Мой канал на youtube по MajorDomo
Аватара пользователя
Amarok
Сообщения: 1425
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Модуль

Сообщение Amarok » Вс май 27, 2018 4:54 pm

Eraser писал(а):
Вс май 27, 2018 3:49 pm
Amarok писал(а):
Вс май 27, 2018 3:41 pm
Eraser писал(а):
Вс май 27, 2018 3:07 pm
Экспортируйте команды, посмотрю
Ушло в личку
нет в событиях $skip = true; который говорит что обработку дальнейшую надо остановить, вот и получается что выполняется оба обработчика события
https://majordomo.smartliving.ru/forum/ ... kip#p62758
Прошу прощения, но куда его вставить в событии?
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
Аватара пользователя
Eraser
Сообщения: 1085
Зарегистрирован: Вт окт 21, 2014 7:31 pm
Откуда: Киров
Благодарил (а): 14 раз
Поблагодарили: 869 раз
Контактная информация:

Re: Модуль

Сообщение Eraser » Вс май 27, 2018 5:20 pm

Amarok писал(а):
Вс май 27, 2018 4:54 pm
Eraser писал(а):
Вс май 27, 2018 3:49 pm
Amarok писал(а):
Вс май 27, 2018 3:41 pm
Eraser писал(а):
Вс май 27, 2018 3:07 pm
Экспортируйте команды, посмотрю
Ушло в личку
нет в событиях $skip = true; который говорит что обработку дальнейшую надо остановить, вот и получается что выполняется оба обработчика события
https://majordomo.smartliving.ru/forum/ ... kip#p62758
Прошу прощения, но куда его вставить в событии?
в вашем случае примерно так

Код: Выделить всё

if ($callback == 'wineRoomPower')
 {cm("wineRoomPower.switch");  $skip = true;}

if ($callback == 'wineRoomFan')
 {cm("wineRoomFan.switch");  $skip = true;}

if ($callback == 'wineRoomHeater1')
 {cm("wineRoomHeater1.switch");  $skip = true;}

if ($callback == 'wineRoomHeater2')
 {cm("wineRoomHeater2.switch");  $skip = true;}

if ($callback == 'ilumWineRoom')
 {sg('wineRoomLight.status',2);  $skip = true;}

//////////////////////
if ($skip == true)
{
$on = hex2bin('F09F8C95');
$off = hex2bin('F09F8C91');
$msg = 'Температура в помещении: '.gg('tempWineRoom.value').'°'; $msg.= "\n";
$msg.= 'Температура в колбе: '.gg('tempDistillator.input').'°'; $msg.= "\n\n";

if (gg('wineRoomPower.status')) {$wineRoomPower = $on;} else {$wineRoomPower = $off;}
if (gg('ilumWineRoom.status')) {$ilumWineRoom = $off;} else {$ilumWineRoom = $on;}
if (gg('wineRoomHeater1.status')) {$wineRoomHeater1 = $on;} else {$wineRoomHeater1 = $off;}
if (gg('wineRoomHeater2.status')) {$wineRoomHeater2 = $on;} else {$wineRoomHeater2 = $off;}
if (gg('wineRoomFan.status')) {$wineRoomFan = $on;} else {$wineRoomFan = $off;}

$option = array (array($this->buildInlineKeyboardButton($text="Силовая ".$wineRoomPower,"","wineRoomPower",""),
                       $this->buildInlineKeyboardButton($text="Освещение ".$ilumWineRoom,"","ilumWineRoom",""),
                       $this->buildInlineKeyboardButton($text="Вентилятор ".$wineRoomFan,"","wineRoomFan","")),
//                 array($this->buildInlineKeyboardButton($text="Нагреватель ".$wineRoomHeater1,"","wineRoomHeater1",""),
//                       $this->buildInlineKeyboardButton($text="Нагреватель №2 ".$wineRoomHeater2,"","wineRoomHeater2",""),
//                       $this->buildInlineKeyboardButton($text="Вентилятор ".$wineRoomFan,"","wineRoomFan","") ) 
                );
$keyb = $this->buildInlineKeyBoard($option);
$content = $msg;
$content = array('chat_id' => $chat_id, 'text' => $msg."Управление лабораторией:", 'reply_markup' => $keyb);
$this->sendContent($content);
}
За это сообщение автора Eraser поблагодарил:
Amarok (Вс май 27, 2018 5:31 pm)
Рейтинг: 1.16%
Connect ---- Telegram
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!! :D
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: Модуль "Telegram"

Сообщение directman66 » Пн май 28, 2018 7:30 am

dioxin писал(а):
Вс май 27, 2018 4:16 pm

Я написал вот такой код:

Код: Выделить всё

if (file_exists("/var/www/pogoda/pognow.jpg")) {
    unlink("/var/www/pogoda/pognow.jpg");}
$output = shell_exec('xvfb-run -a -s "-screen 0 1024x768x24" wkhtmltoimage --crop-x 15 --crop-y 180 --crop-w 882 --crop-h 437 https://yandex.ru/pogoda/ivanovo/details?from=serp_title /var/www/pogoda/pognow.jpg');
Он с помощью утилиты xvfb скриншотит страницу и обрезает по заданным критериям. Сохраненный .jpg файл уже использую и локально и если надо отправляю в телегу.
Установка утилиты: apt-get install xvfb
Это конечно очень круто, но чего-то не хватает.
xvfb-run -a -s "-screen 0 1024x768x24" wkhtmltoimage --crop-x 15 --crop-y 180 --crop-w 882 --crop-h 437 https://yandex.ru/pogoda/yekaterinburg/ ... serp_title /var/www/cached/screen.png
/usr/bin/xvfb-run: 184: /usr/bin/xvfb-run: wkhtmltoimage: not found
Что такое wkhtmltoimage?


upd:

Код: Выделить всё

wget wget https://downloads.wkhtmltopdf.org/0.12/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
tar -xvf wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
cd wkhtmltox/bin/
sudo mv wkhtmltopdf  /usr/bin/wkhtmltopdf
sudo mv wkhtmltoimage  /usr/bin/wkhtmltoimage
Очень круто! Спасибо. Хотелось бы еще на чистом php без под. утилит, чтобы можно было встроить в код.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Аватара пользователя
dioxin
Сообщения: 175
Зарегистрирован: Вт фев 14, 2017 4:43 pm
Откуда: Иваново
Благодарил (а): 15 раз
Поблагодарили: 46 раз

Re: Модуль "Telegram"

Сообщение dioxin » Пн май 28, 2018 8:49 am

А, точно, забыл)) это утилитка делающая сам скриншот. А xvfb это x-сервер виртуального экрана. Как то так.
Без доп. утилит не обойтись, особенно если работаешь без иксов.
А что тут сложного, две команды, утилитки поставились и забыл про них. 3 строчки кода прекрасно работают в МЖД.
Алиска прописана на Debian 11 | Мой канал на youtube по MajorDomo
Ответить