본문 바로가기
SW programming/Telegram bot 프로젝트

[Python 텔레그램 봇] 커뮤니티의 특정 '키워드'가 들어간 게시글 알림 받기

by 고뭉나무 2021. 6. 6.

이번 포스팅에서는 커뮤니티의 특정 '키워드'가 들어간 게시글 알림 받기 를 해보겠습니다.

 

프로그램 컨셉

보배드림 커뮤니티에서 '도와주세요'라는 키워드를 검색하여 나온 새로운 게시글을 주기적으로 받습니다.

만약 새로운 글이 없으면 '새로운 글 읎따...'라는 응답도 날려주죠:)

 

 

웹 크롤링 루틴

1. 보배드림 사이트 접속하기

https://www.bobaedream.co.kr/

 

보배드림 - 중고차 플랫폼, 수입차, 수입중고차 및 중고차시세, 내차시세 제공

중고자동차, 수입차, 외제차, 튜닝카, 스포츠카 매매 및 판매, 중고차시세 제공

www.bobaedream.co.kr

2. 검색 돋보기 아이콘 클릭하기

3. 내가 원하는 키워드 입력하기 (여기선 '도와주세요')

4. Enter 쳐서 접속하기

5. '커뮤니티의 더보기' 클릭하기

6. 게시글 5개의 url 정보 읽어오기

7. 게시글 5개의 url을 텔레그램에 보내기

---- 여기서 부터 계속 반복 (주기는 30분 @Python anywhere) -----

8. 현재 열려있는 웹사이트 새로고침(F5) 하기

9. 게시글 5개의 url 정보 읽어오기

10. 새로운 링크가 있는 지 중복 체크하여 새로운 링크만 저장하기

11. 10번에 해당하는 링크만 텔레그램에 보내기

 

 

위 루틴에는 제가 지금까지 포스팅한 내용들이 종합적으로 들어가 있습니다.

그러니 잘 모르는 부분은 아래 포스팅을 꼭 참고해주세요 :)

 

 

웹 크롤링 기본 문법

2021.05.22 - [SW programming/Python] - [Python 웹 크롤링] Selenium 과 BeautifulSoup의 조합

 

Python anywhere 툴 다루는 법

2021.05.17 - [SW programming/Python] - [Python anywhere 소개] 어디서든 코드 실행이 가능한 서버 구축

2021.05.17 - [SW programming/Python] - [Python anywhere 소개] 어디서든 코드 실행이 가능한 서버 구축

2021.05.27 - [SW programming/Python] - [Python Anywhere] Selenium 모듈 적용하는 법

 

 

소스 코드

from selenium import webdriver
import time
from bs4 import BeautifulSoup
import telepot
#시간 마다 알람 지정용
from apscheduler.schedulers.blocking import BlockingScheduler

#Selenium @Python Anywhere
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-gpu")
driver = webdriver.Chrome(options=chrome_options)


#Selenium 자동화_1. 보배드림 사이트 접속하기
url = "https://m.bobaedream.co.kr"
driver.get(url)

time.sleep(1)

#Selenium 자동화_2. 돋보기 버튼 클릭하기
x_path = '//*[@id="bobaeHead"]/div[1]/div/div[2]/div[2]/form/div[2]/button/span'
searchbox = driver.find_element_by_xpath(x_path)
searchbox.click()
#Selenium 자동화_3. '도와주세요' 입력하기
element = driver.find_element_by_name("keyword")
element.send_keys("도와주세요")
#Selenium 자동화_4. 해당 키워드로 접속하기
element.submit()

#Selenium 자동화_5. '커뮤니티 - 더보기' 클릭하기
m_morebox = driver.find_element_by_xpath('//*[@id="contents"]/div[6]/a')
m_morebox.click()

time.sleep(1)

#텔레그램 봇 생성
token = '본인 대화창 토큰 입력'
bot = telepot.Bot(token=token)

#스케줄러 생성
sched = BlockingScheduler()

#기존에 보냈던 링크를 담아둘 리스트
old_links = []

#링크 추출 함수 #새로운 게시글 정보만 보내기 위함
def extract_links(old_links=[]):
    
    ##Selenium 자동화_현재 열려 있는 웹사이트 새로고침(F5)하기
    driver.refresh()
    
    html = driver.page_source
    soup = BeautifulSoup(html, 'html.parser')

    search_result = soup.select_one('ul.imgList01')  
    news_list = search_result.select('li > a')
    print(news_list)

    links = []
    for news in news_list[:5]:
        link = news['href']
        link = url + link
        links.append(link)

    print(links)

    new_links=[]
    for link in links:
        if link not in old_links:
            new_links.append(link)

    return new_links

#이전 링크를 매개변수로 받아서 비교 후, 새로운 링크만 출력
#차후 이 부분을 메세지 전송 코드로 변경하고 매시간 동작하도록 설정
#새로운 링크가 없다면 빈 리스트 반환
def send_links():
    global old_links
    new_links = extract_links(old_links)
    if new_links:
        for link in new_links:
            bot.sendMessage(chat_id='본인 텔레그램 ID 입력', text = link)
    else:
        bot.sendMessage(chat_id='본인 텔레그램 ID 입력', text = '새로운 글 읎따...')
    old_links += new_links.copy()
    old_links = list(set(old_links))

#최초 시작
send_links()

#스케줄 설정
sched.add_job(send_links, 'interval', minutes = 30)
#시작
sched.start()

 

이 기능과 유사한 것으로 카페 앱으로 하는 '키워드 알람'이 있습니다.

중고나라, 당근 마켓에서 원하는 물품의 키워드 알람을 하면  1초 컷으로 선점할 수 있어 아~~주 유용하게 사용할 수 있죠.

 

만약 저렇게 키워드 알람을 받고 싶은데 기능을 지원하지 않는다!ㅠㅠ 싶으면 이 방법을 추천드립니다 :)

 

 

위 글이 도움이 되셨나면, 아래 하트를 눌러주세요↓

감사합니다 \( ˆoˆ )/​

반응형

댓글