개요

  • 회사에서 사원급들 숙제를 내주고 있다.
  • 숙제를 하고 나한테 url을 보내거나, 내가 직접 블로그에 들어가서 확인하기가 매우 귀찮았다.
  • 5분에 한번씩 24시간 돌아가는 텔레그램 봇을 만들었다.


준비물


import time
import requests
from bs4 import BeautifulSoup
import datetime

# 텔레그램 봇 API 토큰
telegram_bot_token = "토큰 입력"
# 텔레그램 채팅 ID
telegram_chat_id = "chat id 입력"

now_time = datetime.datetime.now()

# 특정 사이트의 글 리스트 URL들과 사이트 이름 수정.
site_urls = [
    {"url": "https://벨로그 주소 입력", "name": "000님의 Velog"},
    {"url": "https://벨로그 주소 입력", "name": "000님의 Velog"},
    {"url": "https://벨로그 주소 입력", "name": "000님의 Velog"}
]

# 각 사이트의 가장 최근에 확인한 게시물의 URL을 저장할 변수
last_post_urls = {site_info["url"]: None for site_info in site_urls}

# 사이트의 변화를 모니터링하고 알림을 보내는 함수
def monitor_site_and_notify(site_info):
    global last_post_urls

    site_url = site_info["url"]
    site_name = site_info["name"]

    # 사이트의 글 리스트 페이지에 접속해서 HTML 가져오기
    response = requests.get(site_url)
    if response.status_code != 200:
        print(f"Failed to fetch the site content for {site_name}.")
        return

    soup = BeautifulSoup(response.content, "html.parser")

    # 최신 게시물의 정보 가져오기
    latest_post_link = soup.find("h2").find_parent("a")
    if not latest_post_link:
        print(f"No posts found for {site_name}.")
        return

    latest_post_url = "https://velog.io" + latest_post_link["href"]

    # 이전에 확인한 게시물과 비교하여 새로운 게시물이 있는지 확인
    if last_post_urls[site_url] != latest_post_url:
        last_post_urls[site_url] = latest_post_url
        send_notification(f"{site_name}에 새로운 게시물이 등록되었습니다!\n" + last_post_urls[site_url])
    else:
        print(f"{now_time} ========== 새로 등록 된 게시물이 없습니다. ==========")

# 텔레그램 알림을 보내는 함수 (사이트별로 다른 이름으로 보내는 함수)
def send_notification(message):
    telegram_url = f"https://api.telegram.org/bot{telegram_bot_token}/sendMessage"
    data = {
        "chat_id": telegram_chat_id,
        "text": message
    }
    response = requests.post(telegram_url, data=data)
    if response.status_code == 200:
        print(f"{now_time} ========== 메세지가 전송되었습니다.==========")
    else:
        print(f"{now_time} ========== 메세지 전송 실패!!!!!!!!!!!!==========")

# 주기적으로 사이트 모니터링 및 알림
while True:
    for site_info in site_urls:
        monitor_site_and_notify(site_info)
    time.sleep(300)  # 5분마다 확인


24시간을 어떻게 돌리지 ?

  • 겨우 이런거 때문에 이래저래 호스팅은 하기 싫었다. 마침 집에 공기계 남는게 굴러다녀서 플레이스토어에 파이썬 설치 후 계속 돌리고 있다.

Leave a comment