Telegram и простейший бот на PHP

makia

Постоялец
Регистрация
23 Сен 2006
Сообщения
269
Реакции
148
Всем привет.

Делаю первый бот для Telegram, в PHP не силен. Нужна ваша помощь.

Скачал простейший пример бота отсюда:
Если указываю текстовой строкой 'какой-то текст', то данная фраза успешно выводится ботом.
PHP:
    } else if ($text === "test2") {
        // Отправляем сформированное сообщение обратно в Telegram пользователю
        apiRequest("sendMessage", array('chat_id' => $chat_id, "text" => 'какой-то текст'));


Но мне нужно вместо фиксированного текста выводить содержимое веб страницы, которое я предварительно получаю через curl. Но если указываю так, то не работает (выводить только "TRUE" и всё )
PHP:
    } else if ($text === "test2") {
        // Получаем содержимое страницы
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, "https://yandex.ru/");
        $data = curl_exec($curl);
   
        // Отправляем сформированное сообщение обратно в Telegram пользователю
        apiRequest("sendMessage", array('chat_id' => $chat_id, "text" => $data));


Как правильно в данном случае написать?
 
Всем привет.

Делаю первый бот для Telegram, в PHP не силен. Нужна ваша помощь.

Скачал простейший пример бота отсюда:
Если указываю текстовой строкой 'какой-то текст', то данная фраза успешно выводится ботом.
PHP:
    } else if ($text === "test2") {
        // Отправляем сформированное сообщение обратно в Telegram пользователю
        apiRequest("sendMessage", array('chat_id' => $chat_id, "text" => 'какой-то текст'));


Но мне нужно вместо фиксированного текста выводить содержимое веб страницы, которое я предварительно получаю через curl. Но если указываю так, то не работает (выводить только "TRUE" и всё )
PHP:
    } else if ($text === "test2") {
        // Получаем содержимое страницы
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, "https://yandex.ru/");
        $data = curl_exec($curl);
 
        // Отправляем сформированное сообщение обратно в Telegram пользователю
        apiRequest("sendMessage", array('chat_id' => $chat_id, "text" => $data));


Как правильно в данном случае написать?
Для просмотра ссылки Войди или Зарегистрируйся

PHP:
// Получаем содержимое страницы
        $request = new request("https://yandex.ru/");
        $request->send();
          
        // Отправляем сформированное сообщение обратно в Telegram пользователю
        apiRequest("sendMessage", array('chat_id' => $chat_id, "text" => $request->response));
 
Последнее редактирование:


Спасибо за библиотеку. Так конечно удобнее.

Но к сожалению, проблема пока остается.
Т.е. если просто в пустой php файл пишу:
PHP:
include 'request.php';
$request = new request("https://yandex.ru/");
$request->send();
echo $request->response;
то всё ОК - содержимое выводится и curl работает.

Если же указанный вами код
PHP:
// Получаем содержимое страницы
$request = new request("https://yandex.ru/");
$request->send();
      
// Отправляем сформированное сообщение обратно в Telegram пользователю
apiRequest("sendMessage", array('chat_id' => $chat_id, "text" => $request->response));

добавляю в пример бота с телеграмма, то ничего не выводит (ни ошибок ни какого-либо текста).

При этом конструкция
PHP:
apiRequest("sendMessage", array('chat_id' => $chat_id, "text" => 'тест тест'));

успешно работает и фраза 'тест тест' в боте выводится.
 
PHP:
// Получаем содержимое страницы
$request = new request("https://yandex.ru/");
$request->send();

echo $request->dump();

// Отправляем сформированное сообщение обратно в Telegram пользователю
$r = apiRequest("sendMessage", array('chat_id' => $chat_id, "text" => $request->response));

Ну и в лог var_dump($r, $request->response)
 
Сорри. Тут видать я чет туплю.
В общем, чтобы ситуация была понятна, вместо
PHP:
$request = new request("https://yandex.ru/");

я указываю
PHP:
$request = new request("https://yandex.ru/search/xml?user=MyLogin&key=03.11338413:2e07851e9e1879b4&query=%D0%BA%D1%83%D0%BF%D0%B8%D1%82%D1%8C+microsoft+office&l10n=ru&sortby=rlv&filter=strict&maxpassages=1&groupby=attr%3D%22%22.mode%3Dflat.groups-on-page%3D10.docs-in-group%3D1");

Запрос с корректным ключом могу скинуть при необходимости.

Сейчас проверил на простом урле:
PHP:
$request = new request("https://pastebin.com/raw/1eeSJLht");
И всё работает. Т.е. что-то похоже из-за xml формата страницы. Наверное :)
 
Для просмотра ссылки Войди или Зарегистрируйся,
Разобрался.. В общем, в документации телеграмма сказано про поле "text": текст сообщения, 0-4096 символов.
У меня же результат выводил в разы больше. Поэтому и пусто было.
Проверил с
PHP:
$string = substr($request->response, 0, 500);
и все нормально выводит.

Может проще использовать готовую надстройку или тебе принципиально надо с нуля?
Для просмотра ссылки Войди или Зарегистрируйся
Нет, мне не принципиально. Просто данная тема заинтересовала, вот и изучаю в свободное время.
Инфу посмотрю, спасибо.
 
Последнее редактирование модератором:
Больше всего в понимании принципов создания ботов мне помогла вот эта статья. Для просмотра ссылки Войди или Зарегистрируйся

В статье описан путь от создание домена, хостинга, сертификатов к кодингу бота.
 
Может проще использовать готовую надстройку или тебе принципиально надо с нуля?
Для просмотра ссылки Войди или Зарегистрируйся
<-------------- добавлено через 42440 сек. -------------->
Больше всего в понимании принципов создания ботов мне помогла вот эта статья. Для просмотра ссылки Войди или Зарегистрируйся

В статье описан путь от создание домена, хостинга, сертификатов к кодингу бота.
Тут описан только вебхук, а если он за нат или у него нету сертификатов(самоподпись не пройдёт валидизацию)?
 
Назад
Сверху