난 펩시를 사고 싶었을 뿐이고... 파이썬을 이용한 매진 상품 모니터링하기 : 클리앙

안녕하세요.

https://www.clien.net/service/board/jirum/18624455CLIEN

아침에 일어나서 알뜰구매 글을 보니 펩시가 아주 저렴하게 올라왔었더라구요

이미 제가 봤을땐 매진이었는데,난펩시를사고싶었을뿐이고파이썬을이용한매진상품모니터링하기클리앙 

혹시 다시 구입할 수 있을까 하고 일하면서 가끔 들어가서 확인했는데

오후 2시쯤 들어가니 딱 마침 2개가 남았고 주문이 가능하길래 

얼릉 주문하는데.. 도중 품절이 나더라구요 ㅠㅠ


그래서 파이썬으로 

주문 버튼 상태를 모니터링해서 

주문이 가능하면 텔레그램으로 알림을 받자

라는 생각으로 윈도우 AI Copliot을 이용하여

아주 간단한 프로그램을 만드는 과정을 소개하고자 합니다.

(저도 파이썬은 초보이고, Telegram은 아주 간단한 사용 방법만 알고 있습니다.)

*(윈도우 AI Copilot, Python, Telegram, HTML을 사용합니다)

https://www.tmon.co.kr/deal/18877769634 사이트에 들어가면

스크린샷 2024-03-07 165347.png

매진 버튼이 보입니다. ㅠㅠ

크롬인 경우 F12를 누르면 소스를 확인할 수 있습니다.

매진 버튼의 경우

스크린샷 2024-03-07 165708.png

이런 식으로 되어있네요 

위에 html 코드를 복사하고

윈도우 11 최신 업데이트 추가된 Copilot에 물어봅니다.

스크린샷 2024-03-07 165821.png

오른쪽 Pre 버튼을 누르면 Copilot이 실행되요

"https://www.tmon.co.kr/deal/18877769634 이 사이트에서 "<button type="button" disabled="disabled" class="btn btn_big full disabled">매진</button>" 이게 매진이 아닐경우 알람을 받는 코드를 만들어줄 수 있어 파이썬으로"

Copliot이 대단한게, 이렇게 개떡같이 물어봐도 찰떡같이 얘기해줍니다.

스크린샷 2024-03-07 165941.png

이렇게 소스를 보여줍니다.

이걸 메모장에 붙여넣고 저장을 합니다 파일명은 상관없으나 확장자는 .py로 만드시면 됩니다.

(저는 pepsi.py)로 만들었습니다.


코드를 보니

 

스크린샷 2024-03-07 170942.png


텔레그램 토큰과 Chat ID가 필요한 것 같습니다.

스크린샷 2024-03-07 171027.png

역시 Copilot에 물어보니 자세하게 알려줍니다.

스크린샷 2024-03-07 171153.png

텔레그램에서 BotFather를 검색하고 대화를 합니다. 

Copilot이 알려주는 데로 /newbot을 누르고 bot 이름과 아이디를 생성하면

스크린샷 2024-03-07 171313.png

이렇게 http api 키값을 줍니다.

자 이제 Chat ID만 구하면 됩니다.

AI가 알려준 것 처럼

방금만든 pepsi_price_bot을 검색해 대화를 시작합니다.

그런데 아무리 해봐도 Chat ID를 어떻게 얻는지 모르겠습니다.

스크린샷 2024-03-07 171715.png

다시 물어보니 봇 채팅창에 /id를 입력하면 확인할 수 있다고 하는데

스크린샷 2024-03-07 171926.png

아무 답변이 없더라구요

그래서 인터넷에서 확인해보니

https://api.telegram.org/bot6991258083:AAEvVKD0BRo0Q9(여러분의 API Token값)/getUpdates

을 브라우져에 넣으면 된다고 합니다 주소에 위에 주소를 입력하니

스크린샷 2024-03-07 172125.png

이런 값이 보여주었고 Chat ID는 5190934753 이라는 것을 알았습니다.


이제 Token 값와 Chat ID 값을 소스에 넣으면 됩니다.

import requestsfrom bs4 import BeautifulSoupimport telegramimport asyncioimport time# 텔레그램 봇 토큰TELEGRAM_TOKEN = 'YOUR_TELEGRAM_BOT_TOKEN'# 텔레그램 채팅 ID (개인 또는 그룹 채팅 ID)CHAT_ID = 'YOUR_CHAT_ID'async def send_message(message):    bot = telegram.Bot(token=TELEGRAM_TOKEN)    chat_id = CHAT_ID    message = message    await bot.send_message(chat_id=chat_id, text=message)# 웹 페이지 URLtarget_url = "https://www.tmon.co.kr/deal/18877769634"while True:    try:        # 웹 페이지 요청        with requests.Session() as s:            getpage = s.get(target_url)            soup = BeautifulSoup(getpage.text, 'html.parser')            # 특정 요소 찾기 (매진 상태를 나타내는 요소)            target = soup.select_one('.btn_big.full.disabled')            if(target is None):                print("매진 상태가 변경되었습니다.")                asyncio.run(send_message(target_url))    except Exception as ex:        print("ERROR:", ex)    # 30초마다 확인    time.sleep(30)


내용이 너무 길어지는 것 같아서

소스를 변경하였습니다.


돌아가는걸 간단하게 설명드리면, 

 target = soup.select_one('.btn_big.full.disabled')

티몬 상품 페이지중  disabled된 버튼이 있으면 30초마다 재확인

disabled된 버튼이 없으면 telegram bot에 target url 보내기 

입니다.


저장된 파일 폴더에서

스크린샷 2024-03-07 172946.png

python pepsi.py 라고 입력했는데

혹시 No module named 에러가 난다고 하면

스크린샷 2024-03-07 173123.png
pip install requests beautifulsoup4 python-telegram-bot anyio

이렇게 request, bs4, telegram 모듈을 설치해주면 됩니다.


자 이제 실행하면

스크린샷 2024-03-07 173258.png


짜잔.. 아무것도 안나옵니다.

하지만 30초마다 프로그램이 사이트에 들어가서 확인을 합니다.


자 이제 이 프로그램을 계속 돌아가게 열어두고 클리앙을 합니다...

(프로그램 종료는 ctrl+c를 누르면 됩니다.)


상품이 구매 가능하게 변경되면

스크린샷 2024-03-07 173356.png

이렇게 "매진 상태가 변경되었습니다." 라고 나오면서

스크린샷 2024-03-07 173425.png

텔레그램에 메세지를 받게 됩니다.


스크린샷 2024-03-07 173529.png

저는 4시 43분에 알람을 받았고

4시 43분 55초에 결제를 완료하였습니다~~


지금까지 파이썬과 AI, Telegram을 이용한 뻘짓을 알아봤습니다.

마치겠습니다.


자료실