PHP로 피드 리더 봇 만들기(2)
14149 단어 telegramphptelegrambottutorial
이 부분에서는 피드를 읽는 다른 파일을 만듭니다. Telegram 서버에 의해 호출되도록 생성
bot.php
했지만 5분마다(또는 원하는 시간 간격) 작업 스케줄러(예: cron)에 의해 호출되어야 하는 또 다른 부분이 있습니다. 나는 그것을 위해 cron-job.org을 사용합니다. 무료이며 사용하기 쉽습니다.cron.php 생성
프로젝트 디렉터리에
cron.php
라는 파일을 만들고 autoload.php
및 구성 파일을 가져오고 TeleBot 인스턴스를 만듭니다.<?php
use TeleBot\TeleBot;
require_once __DIR__ . '/vendor/autoload.php';
$config = require_once __DIR__ . '/config/bot.php';
$feeds = json_decode(file_get_contents(__DIR__ . '/config/feeds.json'))->feeds;
$tg = new TeleBot($config['bot_token']);
피드 읽기
다음으로 다음 코드를 추가합니다.
$links = "<b>🆕 New posts:</b>\n\n";
$linkCount = 0;
foreach ($feeds as $feed) {
$context = stream_context_create([
"http" => [
"method" => "GET",
"header" => "User-Agent: FeedReaderBot",
],
]);
$feedContent = new SimpleXMLElement(file_get_contents($feed->url, false, $context));
foreach ($feedContent->channel->item as $item) {
$links .= "<a href=\"{$item->link}\">▪️ {$item->title}</a>\n";
$linkCount++;
}
}
if ($linkCount === 0) {
die();
}
$tg->sendMessage([
'chat_id' => $config['owner_user_id'],
'text' => $links,
'parse_mode' => 'html',
'disable_web_page_preview' => true,
]);
User-Agent
헤더를 추가하고 더 이상 봇처럼 보이지 않습니다. 😎 foreach
루프에서 목록을 만듭니다. <a>
태그가 있기 때문에) HTML 형식을 사용하고 포함된 링크를 비활성화합니다. 이제 웹 브라우저에
cron.php
의 주소를 입력하십시오. 다음과 같은 우아한 목록이 표시됩니다.Oh, wait! If I refresh the page, it sends the same list! It is unacceptable, because we only want the new posts, not the latest posts!
새 게시물 만!
예, 당신이 완전히 옳습니다! 이 문제를 방지하려면 피드 개체에 마지막 링크를 저장해야 합니다.
{
"url": "feed-url-here",
"reader": "dev.to",
+ "last_item_url": "some-url-here"
}
bot.php
에 새 필드를 추가합니다.$feeds[] = [
'url' => $url,
'reader' => 'dev.to',
'last_item_url' => '',
];
또한
cron.php
에서 일부 변경이 필요합니다.$links = "<b>🆕 New posts:</b>\n\n";
$linkCount = 0;
foreach ($feeds as $feed) {
$context = stream_context_create([
"http" => [
"method" => "GET",
"header" => "User-Agent: FeedReaderBot",
],
]);
$feedContent = new SimpleXMLElement(file_get_contents($feed->url, false, $context));
$latestPostLink = (string) $feedContent->channel->item[0]->link;
if ($latestPostLink === $feed->last_item_url) {
break;
}
foreach ($feedContent->channel->item as $item) {
if ((string) $item->link === $feed->last_item_url) {
break;
}
$links .= "<a href=\"{$item->link}\">▪️ {$item->title}</a>\n";
$linkCount++;
}
$feed->last_item_url = $latestPostLink;
}
if ($linkCount === 0) {
die();
}
file_put_contents(__DIR__ . '/config/feeds.json', json_encode(['feeds' => $feeds]));
$tg->sendMessage([
'chat_id' => $config['owner_user_id'],
'text' => $links,
'parse_mode' => 'html',
'disable_web_page_preview' => true,
]);
마지막 게시물 링크가
feeds.json
에 이미 저장된 것과 동일한 경우 현재 피드 개체를 건너뛰고 다음 항목을 확인합니다. 그렇지 않으면 저장된 마지막 게시물 링크에 도달할 때까지 목록 끝에 추가합니다. 마지막으로 $latestPostLink
를 피드 개체의 last_item_url
속성에 할당하고 $feeds
배열(업데이트된 개체 포함)을 루프 외부의 feeds.json
에 저장합니다.크론 작업 추가
우리는 5분마다 URL을 입력하고 싶지 않습니다. 그렇게 많은 시간이 있다면 RSS/Atom/JSON 피드가 필요하지 않기 때문입니다! 따라서 5분마다 스크립트에 요청을 보내도록 cron 작업을 만들어야 합니다.
만세! 업데이트를 기다리세요...
튜토리얼을 따라 주셔서 감사합니다. 즐거운 시간 되셨기를 바랍니다.
TeleBot을 사용하여 이 봇을 구축했습니다. 당신은 저장소를 응시하여 저를 지원할 수 있습니다:
https://github.com/WebPajooh/TeleBot
그리고 지금까지 우리가 한 일은 다음과 같습니다.
https://github.com/WebPajooh/FeedReaderBot/tree/d238ac8429db6777b24a51f8618d17c2547a7254
Reference
이 문제에 관하여(PHP로 피드 리더 봇 만들기(2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/webpajooh/create-a-feed-reader-bot-with-php-2-44f2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)