
구글뉴스 RSS로 텔레그램봇 전송공부/WEB2025. 4. 6. 19:27
Table of Contents
반응형
보통 사무실에서 텔레그램을 많이 켜놓으니 텔레그램에 속보가 오면 어떨가 하는 생각을 하다 만들어봤다.
처음엔 네이버나 카카오 등 뉴스에서 참조하려했지만 언론사도 그렇게 api를 지원하진 않고, 스크래핑 까지 하면서 볼 정보는 아니였다가 구글 뉴스에서 rss를 지원하는걸 알게되었다.
검색조건을 잘 짜본다면 충분히 원하는 뉴스만 골라낼 수 있다.
https://news.google.com/rss/search?q="[속보]" -헤럴드 -POP -스포츠조선 -OSEN -뉴시스 -일간스포츠 -스타뉴스 when:1h&hl=ko&gl=KR&ceid=KR:ko
/**
* 쌍따옴표로 감싸면 [속보] 인 단어만 찾는다.
* -단어 입력시 제외할 수 있다.
* 나는 연예나 스포츠는 그렇게 궁금하지않았고 쉴시없이 올라오는 업데이트로 제외했다.
* when:1h < 한시간 이내의 기사만 가져온다.
* 나머진 한국 뉴스나 한국어 이런 설정인듯 싶다.
*/
리눅스에 php가 설치되어 있으니 php로 구현했다.
$rss_url = 'https://news.google.com/rss/search?q="[속보]" -헤럴드 -POP -스포츠조선 -OSEN -뉴시스 -일간스포츠 -스타뉴스 when:1h&hl=ko&gl=KR&ceid=KR:ko';
//여기서 하루이상 지난 뉴스는 제거했다.
$rss = simplexml_load_file($rss_url);
// 불러오기 실패 시 에러 메시지 출력
if ($rss === false) {
exit;
}else{
$last = [];
//마지막 데이터 추출
$query = "SELECT 날짜,소스 FROM 뉴스테이블 order by date desc limit 1 ";
$stmt = $pdo->prepare($query);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
$lastDate = $result['날짜'];
$lastSource = $result['소스'];
foreach ($rss->channel->item as $item) {
$query = "INSERT INTO 뉴스테이블 SET
날짜 = :date,
제목 = :title,
링크 = :link,
소스 = :source,
정보 = :description
";
//마지막 저장데이터 이후만
if($lastDate < date('Y-m-d H:i:s',strtotime((string) $item->pubDate))){
$stmt = $pdo->prepare($query);
$stmt->bindValue(':date', date('Y-m-d H:i:s',strtotime((string) $item->pubDate)), PDO::PARAM_STR);
$stmt->bindValue(':title', (string) $item->title, PDO::PARAM_STR);
$stmt->bindValue(':link', (string) $item->link, PDO::PARAM_STR);
$stmt->bindValue(':source', (string) $item->source, PDO::PARAM_STR);
$stmt->bindValue(':description', (string) $item->description, PDO::PARAM_STR);
$stmt->execute();
$msg = (string) $item->title.' ('.(string) $item->link.')';
SendTelegramMsg($msg); //텔레그램전송
}
}
}
텔레그램 전송
api 봇은 텔레그램에서 생성하고 토큰과 클라이언트id적어준다.
function SendTelegramMsg($message){
if(!empty($message)){
$botToken = '텔레그램 bot token'; // 텔레그램 봇 토큰
$chatId = 'chatid'; // 메시지를 보낼 채팅 ID
// 텔레그램 API URL 설정
$url = "https://api.telegram.org/bot$botToken/sendMessage";
// $data = [
// 'chat_id' => $chatId,
// 'text' => $message,
// 'parse_mode' => 'HTML' // HTML 파싱 모드를 사용
// ];
// cURL 초기화
$ch = curl_init($url);
// POST 옵션 설정
//CURLOPT_POSTFIELDS,$data) 로 보낼수 있음
//위 주석으로 처리하면 html태그 사용가능
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
'chat_id' => $chatId,
'text' => $message
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
}
}
결과
크론에 1분마다 실행 시키면 아래처럼 [속보]가 붙은 뉴스가 올라오면 텔레그램으로 전송이된다.
rss조건에따라 원하는 신문사나 내용만 추출할 수 있을 것이다.
반응형
'공부 > WEB' 카테고리의 다른 글
ElasticSearch Query (0) | 2025.04.07 |
---|---|
ElasticSearch 설정 (0) | 2025.04.07 |
php에 notion api 연동하여 데이터 읽어오기 (0) | 2025.03.31 |
@BJ.Jeon :: 여행일기
일상,여행 경험