몇 달 전 게시판에 새로운 글이 있는 지 확인하고 텔레그램으로 보내는 코드를 올린 적이 있다.

    해당 코드를 만든 이유는 근무하고 있는 직장에서 저녁, 주말 상관없이 홈페이지에 올라온 글의 상담을 해줘야 하는데 알림 기능이 없어서 주기적으로 확인해야 되기 때문이다.

     

    그래서 코드를 짜서 구글 클라우드 콘솔에 무료 서버를 하나 만든 뒤 코드를 짜서 돌려놓았다.

    파이썬 게시판 새 글 확인 코드

     

    몇달동안 잘쓰고 있었는데 당시 몇 시간 만에 짠거라 오류가 있었다.

    특히 새 글인지 확인할 때 글의 제목을 기준으로 했었는데 간혹 똑같은 제목으로 문의하는 사람들이 생겼다는 것이다.

    그리고 답변을 달아줬는데 댓글로 다시 추가질문을 하는 경우도 생겼다.

     

    귀찮아서 그냥 두다가 안되겠어서 코드를 좀더 추가해서 서버에 올려놓았다.

    업데이트한 김에 블로그에도 기록해두려고 한다.

     

     

    새글 확인 코드
    import telegram
    import schedule
    import time
    import io
    import sys
    from bs4 import BeautifulSoup
    import requests
    import pytz
    import datetime
    
    # 이전 제목과 비교를 위한 선언
    recentSubject = ""
    # 이전 작성자 비교용 위한 선언
    recentName = ""
    # 댓글수 파악을 위한 선언
    recentCom = ""
    
    def job():
        # 가져와 쓰기
        global recentSubject
        global recentName
        global recentCom
        
        # 수면시간 22시 ~ 8시59분까지 메시지 금지
        now = datetime.datetime.now(pytz.timezone('Asia/Seoul'))
        if now.hour >= 22 or now.hour <= 8:
            return
    
        sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding='utf-8')
        sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding='utf-8')
    
        token = "당신의 토큰"
        bot = telegram.Bot(token=token)
        BASE_URL = "확인하고 싶은 사이트 주소"
        chat_id = 채널 아이디
    
        with requests.Session() as s:
            res = s.get(BASE_URL)
            if res.status_code == requests.codes.ok:
                soup = BeautifulSoup(res.text, 'html.parser')
                article = soup.select_one(
                    '#container > section > div.contents_wrap > div.contents > div.sub_cont > div.list_board > table > tbody > tr:nth-child(4) > td.subject > a > span:nth-child(2)').text
                articleCom = soup.select_one(
                    "#container > section > div.contents_wrap > div.contents > div.sub_cont > div.list_board > table > tbody > tr:nth-child(4) > td.subject > a > span.num").text
                writer = soup.select_one(
                    "#container > section > div.contents_wrap > div.contents > div.sub_cont > div.list_board > table > tbody > tr:nth-child(4) > td.name.inline")
                # 제목과 작성자가 이전과 같지 않은지 확인
                if (recentSubject != article) or (recentName != writer):
                    bot.sendMessage(chat_id=chat_id, text="질문과답변 새 글")
                    # 제목이 같지 않으면 같은 글이 아니므로 넣어줌
                    recentSubject = article
                    recentName = writer
                    recentCom = articleCom
                # 댓글수도 확인. 0개면 아직 답이 안달린 상태, 1개면 달린 상태. 그 이상이라면 추가 질문이 있는 것.
                elif (articleCom != ('[0]' and '[1]')) and (recentCom != articleCom):
                    bot.sendMessage(chat_id=chat_id, text="질문과답변 새 댓글")
                    recentCom = articleCom
           
    # 1분 마다 실행
    schedule.every(1).minutes.do(job)
    
    print("Start App")
    
    # 파이선 스케줄러
    while True:
        schedule.run_pending()
        time.sleep(1)

    이런 식으로 코드를 짜주었다.

    그냥 되는대로 짰는데 잘 돌아가고 있으니 상관없다.

    어차피 업무 편하게 하려고 만든거니까.

     

    텔레그램 보내는 방법 등이 궁금하면 이전 글을 살펴보길 바란다.

    사실 이거 말고도 업무 관련 필요한 코드를 더 얹어서 서버에 올려놓았다.

     

    구글 클라우드 플랫폼에서 프리티어(공짜)로 꽤 괜찮은 서버를 제공해주니 항상 띄워놓고 감시해야 하는 것이 필요하다면 이걸 이용해보길 바란다.

     

    ※ 함께 보면 좋은 글

     

    셀레니움 네이버 로그인 캡챠 피하기 클릭!

    유튜브 재생목록 총 재생시간 구하는 코드 클릭!

    셀레니움 네이버 검색광고 API 활용 잔액확인 하는 법 클릭!

    셀레니움 최신버전 iframe 문법 클릭!

    크롬 굵은 폰트 번짐 해결하는 방법 클릭!

     

    파이썬 네이버 뉴스 크롤링 오류 해결법 클릭!

    파이썬 게시판 새 글 확인 코드 클릭!