telegram bot Отправка сообщений каждую минуту

timur_

Постоялец
Регистрация
27 Окт 2014
Сообщения
142
Реакции
67
Всем привет, есть один телеграм бот, который парсит rss ленту.
Подскажите пожалуйста, как можно проверять на наличие новых записей в rss и сразу отправлять сообщение в бота?
PHP:
$bot->command('feed', function ($message) use ($bot) {
    $url = 'url';
    $rss = simplexml_load_file($url);
    foreach ($rss->channel->item as $item) {
       
        $line_rss =  ' '.$item->title.' ';
        $line_rss .= ' '.$item->link.' ';
        $line_rss .= $item->pubDate;
        $line_rss .= ' <br>';
        break;
    }
    $bot->sendMessage($message->getChat()->getId(), $line_rss);
});
 
Последнее редактирование:
В RSS есть какое-то поле уникальное у записей?

id часто бывает
При посте в телеграм, id записи в бд сохраняешь.
А при проверке ленты, смотришь какие есть id, которых нет у тебя
 
В RSS есть какое-то поле уникальное у записей?

id часто бывает
При посте в телеграм, id записи в бд сохраняешь.
А при проверке ленты, смотришь какие есть id, которых нет у тебя
по сути $item->pubDate - время публикации - уникальное поле
но у меня бот не задействует БД вообще, просто парсер

и ещё вопрос, как мне сделать это всё, чтобы каждую минуту проверялось
PHP:
for($i = 0; $i < 20; ++$i) {
...code...
sleep(60);
}

так не работает

Решил вопрос записью в файл вот так
PHP:
$bot->command('feed', function ($message) use ($bot) {
    $file = 'reg.txt';
    $url = 'url';
    $rss = simplexml_load_file($url);
    $file_open = file_get_contents($file);
    foreach ($rss->channel->item as $item) {
            $line_rss =  ' '.$item->title.' ';
            $line_rss .= ' '.$item->link.' ';
            $current = $item->pubDate;
            if ( $file_open == $current ){
                $line_rss = 'Новых записей нет';
                $clean_rss = 1;
            } else {
                $clean_rss = 0;
            }
            file_put_contents($file, $current);
            break;
          }
    if ($clean_rss = 0) $bot->sendMessage($message->getChat()->getId(), $line_rss);
});

Теперь другой вопрос, как бы мне вызывать эту команду каждую минуту, может кто по средствам api без крона делал? Если вешать на крон придётся, то можно какой-нибудь ajax с post'ом к скрипту, а не напрямую?
 
Последнее редактирование модератором:
Решил вопрос записью в файл вот так
PHP:
$bot->command('feed', function ($message) use ($bot) {
    $file = 'reg.txt';
    $url = 'url';
    $rss = simplexml_load_file($url);
    $file_open = file_get_contents($file);
    foreach ($rss->channel->item as $item) {
            $line_rss =  ' '.$item->title.' ';
            $line_rss .= ' '.$item->link.' ';
            $current = $item->pubDate;
            if ( $file_open == $current ){
                $line_rss = 'Новых записей нет';
                $clean_rss = 1;
            } else {
                $clean_rss = 0;
            }
            file_put_contents($file, $current);
            break;
          }
    if ($clean_rss = 0) $bot->sendMessage($message->getChat()->getId(), $line_rss);
});

Теперь другой вопрос, как бы мне вызывать эту команду каждую минуту, может кто по средствам api без крона делал? Если вешать на крон придётся, то можно какой-нибудь ajax с post'ом к скрипту, а не напрямую?
ajax это javascript, cron javascript выполнять не будет, это не браузер. И для чего такие извращения?

Нормальные люди пишут скрипт простой, ставят крон на запуск раз в минуту.

По проверке. Тут либо бд, либо в файл сохранять последнюю запись опубликованную. И после постить всё с конца, пока не наткнется на опубликованную.

"кто по средствам api без крона делал?" - это как? Как api используется знаете?
 
ajax это javascript, cron javascript выполнять не будет, это не браузер. И для чего такие извращения?
Нормальные люди пишут скрипт простой, ставят крон на запуск раз в минуту.
По проверке. Тут либо бд, либо в файл сохранять последнюю запись опубликованную. И после постить всё с конца, пока не наткнется на опубликованную.

"кто по средствам api без крона делал?" - это как? Как api используется знаете?
да, знаю, возможно есть какая-нибудь запрос, который исполняет команду бота, т.е. например отправляет сообщение, на которое забиндена команда

просто я не особо дружу с кроном и чтобы поставить определенный скрипт на исполнение, надо вырезать команду бота в отдельный скрипт, каждую минуту запускать этот скрипт и при положительном результате вызывать файл бота опять же, а с этими инклудами у меня проблемы(

update
Если кому нужно код для бота в telegram, который будет каждую минуту постить rss или любые сообщения, то привожу ниже.
без использования БД


Тему можно закрывать
 
Последнее редактирование:
Назад
Сверху