가격 모니터링 슬랙 봇 구축 방법 🤑

방금 새 스위치를 얻었고(요즘 할 일이 또 뭐가 있길래?!) 새 게임Paper Mario을 정말 갖고 싶습니다. 단, 타이틀에 돈을 많이 지불하고 싶지는 않습니다... 그래서. 세일 여부를 알려주는 가격 모니터링 슬랙 봇을 만들었습니다! 이렇게도 만들 수 있습니다~

먼저 gazpacho , hickoryslackclient을 설치합니다.

pip install gazpacho hickory slackclient

스크랩하려는 page 식별:



URL을 잡고 텍스트 편집기를 열고(I like Atom), mario.py라는 파이썬 파일을 만들고 gazpacho를 가져옵니다.

from gazpacho import get, Soup
get 함수로 html을 다운로드하고 Soup 래퍼에 채웁니다.

url = "https://www.bestbuy.ca/en-ca/product/paper-mario-the-origami-king-switch/14643866"
html = get(url)
soup = Soup(html)

페이지를 마우스 오른쪽 버튼으로 클릭하고 "요소 검사:



특정 태그 및 요소 속성에 유의하십시오.



이 경우 페이지의 관련 html 블록은 다음과 같습니다.

<div class="price_FHDfG large_3aP7Z " aria-hidden="true">
  $79
  <span class="rightEndPrice_6y_hS">99</span>
</div>

부분 일치( find )가 활성화된 strict=False 메서드를 사용하여 가격을 추출하고 부동 소수점 형식으로 지정합니다.

price = soup.find("div", {"class": "price"}, strict=False)
lhs = price.text
rhs = price.find("span", {'class': 'rightEndPrice'}).text
price = float(f"{lhs}.{rhs}".replace('$', ""))

제목도 잡을 수 있습니다.

title = soup.find('h1', {'class': 'productName'}).text

모두 인쇄하여 모든 것이 작동하는지 확인하십시오.

print(title, price)
# Paper Mario: The Origami King (Switch) 79.99

전체 스크립트는 다음과 같아야 합니다.

# mario.py
from gazpacho import get, Soup

url = "https://www.bestbuy.ca/en-ca/product/paper-mario-the-origami-king-switch/14643866"
html = get(url)
soup = Soup(html)

title = soup.find('h1', {'class': 'productName'}).text
price = soup.find("div", {"class": "price"})
lhs = price.text
rhs = price.find("span", {'class': 'rightEndPrice'}).text
price = float(f"{lhs}.{rhs}".replace('$', ""))

print(title, price)

이 스크레이퍼를 예약하고 Slack Bot으로 전환하려면 https://api.slack.com/apps으로 이동하여 Create New App을 클릭합니다.



OAuth 및 권한을 찾아 클릭합니다.



chat:public.write 범위를 검색하고 추가합니다.



페이지 상단으로 다시 스크롤하여 앱을 Slack 작업 공간에 설치합니다.



생성된 토큰을 mario.py 파일에 문자열로 복사합니다.



token = "xoxb-00000000-0000000000-00000000000"

여유 시간을 가져오고 WebClient의 인스턴스를 인스턴스화합니다.

from slack import WebClient
client = WebClient(token=token)
chat_postMessage 메서드를 사용하여 Slack 채널에 메시지를 보냅니다.


client.chat_postMessage(channel="mario", text=f"{price} - {title}")

다음과 같이 보이도록 모든 것을 리팩터링합니다.

# mario.py

from gazpacho import get, Soup
from slack import WebClient

token = "xoxb-00000000-00000000-000000000000000"
client = WebClient(token=token)

url = "https://www.bestbuy.ca/en-ca/product/paper-mario-the-origami-king-switch/14643866"
html = get(url)
soup = Soup(html)

title = soup.find('h1', {'class': 'productName'}).text
price = soup.find("div", {"class": "price"})
lhs = price.text
rhs = price.find("span", {'class': 'rightEndPrice'}).text
price = float(f"{lhs}.{rhs}".replace('$', ""))

client.chat_postMessage(channel="mario", text=f"${price} - {title}")

토큰을 일반 텍스트로 노출해서는 안 되지만 어쨌든...



명령줄에서 스크립트를 실행하여 작동하는지 확인합니다.

python mario.py

히코리를 사용하여 이 스크립트를 매 30초마다 예약하는 것은 매우 간단합니다. 명령줄에서 hickory schedule를 사용하십시오.

hickory schedule mario.py --every=30s

스케줄 실행 상태를 확인하려면 다음을 수행하십시오.

hickory status
# ID      FILE         STATE    RUNS  INTERVAL
# ea6b74  mario.py     waiting  0     30

일정을 죽이려면 다음을 수행하십시오.

hickory kill mario.py

이 가격 모니터링 슬랙 봇이 매일 오전 9시에 실행되도록 예약하는 것이 아마도 더 현실적일 것입니다.

hickory schedule mario.py --every=@9:00am

그리고 그게 다야! 🤑

gazpacho 및/또는 hickory을(를) 사용하여 멋진 무언가를 만들었다면 연락해 주십시오. 그것에 대해 듣고 싶습니다!

좋은 웹페이지 즐겨찾기