ํด๋น ์ฝ๋๋ ์ธํ๋ฐ์ ์คํ๋์ด ์๋ ํ์ด์ฌ์ผ๋ก ์ํ ์๋งค ์คํ ์๋ฆฌ๋ฏธ ๋ง๋ค๊ธฐ ๊ฐ์ข๋ฅผ ์๊ฐํ๋ฉฐ ์์ฑ๋์์ต๋๋ค.
TIL - BeautifulSoup๊ณผ requests
TIL - BeautifulSoup์์ select ๋ฉ์๋ ์ฌ์ฉํ๊ธฐ
์ฝ๋ ๋ด์ ์์ ๋ถ๋ถ
๊ฐ์์์๋ ํ๋ฃจ์ IMAX ์ํ๊ด์์ ์์๋๋ ์ํ๊ฐ ํ๋๋ผ๊ณ ๊ฐ์ ํ๊ณ ์ฝ๋๊ฐ ์์ฑ๋จ
ํ์ง๋ง ํ๋ฃจ์๋ ๋ค์ํ ์ํ๊ฐ IMAX ์ํ๊ด์์ ์ฌ์ฉ๋๋ ๊ฒ์ ํ์ธํจ
์ด์ ๋ฐ๋ผ ํ๋์ ์ํ๋ง ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด ์๋, IMAX์์ ์์๋๋ ๋ชจ๋ ์ํ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์์ผ๋ก ์์ ํจ.
#๊ธฐ์กด ์ฝ๋
imax = soup.select_one('span.imax')
if imax:
imax_movie = imax.find_parent('div', class_='col-times')
movie_title = imax_movie.select_one('div.info-movie > a > strong').text.strip()
print("imax theater for movie '%s' is opened"%movie_title)
else:
print('imax theater is not opened')
#๋ณ๊ฒฝํ ์ฝ๋
imax_movie_list = []
movie_list = soup.select('div.col-times')
# ๋ชจ๋ ์ํ ๋ฆฌ์คํธ์ ๋ํ์ฌ imax ์์๊ด ํ์๊ฐ ์๋์ง ํ์ธํ๊ณ , imax ์์๊ด์ด ์๋ ์ํ๋ค๋ง imax_movie_list์ ์ฝ์
for movie in movie_list:
movie_title = movie.select_one('div.info-movie > a > strong').text.strip()
imax = movie.select_one('span.imax')
if imax:
imax_movie_list.append(movie_title)
print(imax_movie_list)
์ฝ๋ ์์ ๋ถ๋ถ
- telegram bot์ ํ ํฐ๊ณผ ๋์ user id๋ฅผ ๋ค๋ฅธ ํ์ผ์ ๋ฃ์ด๋๊ณ ํ์๋ก ํ๋ ์ฝ๋์์ ๋ชจ๋๋ก ๋ถ๋ฌ์ ์ฌ์ฉํ๊ฒ ํจ.
๊ทธ๋ฆฌ๊ณ ํด๋น ํ์ผ์ .gitignore์ ํฌํจ์ํด. ๊ทธ๋ฆฌํ์ฌ ์ง๊ธ ๋น์ฅ ํ ํฐ๊ณผ ์์ด๋๊ฐ ์ธ๋ถ์ ๋๋ฌ๋์ง ์๋๋ก ์กฐ์น๋ฅผ ์ทจํจ.- ์ถ๊ฐ์ ์ผ๋ก ๋ด์ด ๋ณด๋ด๋ ๋ฉ์์ง์ ๋ ์ง์ imax์์ ์คํํ๋ ๋ชจ๋ ์ํ๋ฅผ ๋ณด์ฌ์ฃผ๋๋ก html url์์ date ๋ถ๋ถ์ ๋ถ๋ฆฌํ์ฌ ์๋ก์ด ๋ณ์์ ๋ ์ง๋ฅผ ๋ฃ๊ณ ํด๋น ๋ณ์๋ฅผ url์ ์ฐ๊ฒฐ๋๋๋ก ํจ.
์ด๋ฅผ ํตํด ์ฐจํ ์ ์ฐํ date๊ฐ์ ์ด์ฉํ ๊ธฐ๋ฅ ํ์ฅ์ด ๊ฐ๋ฅํ๋๋ก ํจ.
#2๋ฒ ์ฝ๋ ๋ณ๊ฒฝ์
url = "http://www.cgv.co.kr/common/showtimes/iframeTheater.aspx?areacode=01&theatercode=0013&date=20210701"
#๋ณ๊ฒฝํ
date = "20210701"
url = ""http://www.cgv.co.kr/common/showtimes/iframeTheater.aspx?areacode=01&theatercode=0013&date="+date
APScheduler ํ์ฉ
- ์ฌ์ฉ ์ด์ : ํ์ด์ฌ ์ฝ๋๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์ํํ๊ธฐ ์ํด์
- BlockingScheduler๋ ๋จ์ผ์ค์ผ์ค๋ฌ, BackgroundScheduler๋ ๋ค์ค์ค์ผ์ค๋ฌ
- ๊ณต์๋ฌธ์ : https://apscheduler.readthedocs.io/en/stable/userguide.html
์ฝ๋ ์์ ๋ถ๋ถ
- ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ ์ง๋ฅผ ๋ฐ์์์ imax ์์๊ด ์คํ ์ํ๋ฅผ ๋ณด์ฌ์ค
- telegram ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ๋ ์ฝ๋๋ฅผ ํฌ๋กค๋งํ๋ ์ฝ๋์์ ๋ถ๋ฆฌ์ํด -> ๋ถ๋ฆฌ๋ ์ฝ๋
๊ฐ์ ํด์ผ ํ ๋ถ๋ถ / ์์ผ๋ก ํด์ผํ ๋ถ๋ถ
- ํ์ฌ scheduler๋ฅผ pasuse ์ํค๋ ๋ถ๋ถ์ด ๋ฐ๋ก ์์. ์ฌ์ฉ์๊ฐ ๋๋ด๋๋ก ํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋, ์์ ์ฌ์ฉ์์๊ฒ ์ฒ์์ ์ด ๋ด์ ์ด์ฉํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ธฐ๋ฅ์ ๋ณด์ฌ์ค ํ ์ฌ์ฉ์๊ฐ ์ ํํ๋ ๊ธฐ๋ฅ๋ค๋ง ๊ทธ๋ ๊ทธ๋ ์คํํ๋๋ก ์ฝ๋๋ฅผ ์์ ํ ์์
์๋ฒ๋ฅผ ๊ตฌ์ถํ๋ ์ด์
- aws์ ์๋ฒ๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ ๊ฐ์์ ์ปดํจํฐ๋ฅผ ํ๋ ๋น๋ ค์ค๋ ๊ฒ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๊ฐ ์ฌํ ๊ฐ๋ฐ์์ ์ปดํจํฐ์์ ์คํ์ํค๋ ํ๋ก๊ทธ๋จ์ ๊ทธ ๊ฐ์์ ์ปดํจํฐ์ ์ฌ๋ ค์ ์ฐ๋ฆฌ๊ฐ ์ปดํจํฐ๋ฅผ ์ผ๊ณ ์ผ์ผ์ด ์คํ์ํค์ง ์์๋ ์์์ ๋์๊ฐ๋๋ก ํ๊ธฐ ์ํจ
์ด๋ ค์ ๋ ์
- ์๋์ฐ ํ๊ฒฝ์์๋ PuTTY๋ผ๋ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํด์ AWS EC2๋ฅผ ์คํ์์ผ์ผ ํ๋๋ฐ, ์ด ๊ณผ์ ์ด ์ข ๊น๋ค๋ก์ ๋ค. ๋คํํ ์ข์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ์ฌ ๋ฌด์ฌํ ์ ๋์๊ฐ๋๋ก ํ๊ฒฝ์ ๊ตฌ์ถํ ์ ์์๋ค.
- Reference - https://mozi.tistory.com/191
์๋ํ์ผ๋ ๋ค์ ๋ณด์ํด์ผ ํ๋ ๋ถ๋ถ
- ์ฌ์ฉ์์ ๋ฉ์ธ์ง์ ๋ฐ๋ผ scheduler๊ฐ ๋ฉ์ธ์ง ๋ณด๋ด๋ ๋ถ๋ถ์ ์ปจํธ๋กคํ๋๋ก ์ฝ๋๋ฅผ ์์ ํ๋ คํ์์ผ๋ telegram_bot์ getUpdate๋ ๋์ ๋ฉ์ธ์ง๋ฅผ ๋ชจ๋ ๊ฐ์ง๊ณ ์์ด์ ๋ง์ง๋ง ๋ฉ์ธ์ง๊ฐ ์ง๊ธ ์ฒ์ ๋ณด๋ด๋ ๊ฑด์ง ์ ๋ฒ์ ๋ณด๋๋ ๊ฒ์ ๋ง์ง๋ง์ธ์ง ๊ตฌ๋ณ์ ๋ชปํจ. ๊ทธ๋์ stop๋ฅผ ๋ฐ์์ ๋ ์ค์ผ์ค๋ฌ๊ฐ ๋ฉ์ถ๊ฒ ํ๋ ค๋ ์ฝ๋๋ ๋ถ๊ฐ๋ฅ. stop๋ฅผ ๋ฐ๊ณ ๋์ ๋ค์ ํ๋ก๊ทธ๋จ์ ๋๋ ค๋ ๋ง์ง๋ง ๋ฉ์ธ์ง๋ stop์ด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ผ์ ํ์ง ์๊ณ ์ค์ผ์ค๋ฌ๊ฐ ๋ฉ์ถ๊ฒ ๋จ. -> ๋ณด์ ํ์
์ถ๊ฐ์ ์ผ๋ก ํด์ผ ํ ๊ฒ
- ๊ตฌํํ๊ณ ์ถ์ ๊ธฐ๋ฅ ๋ฆฌ์คํธ ์
- ๊ตฌํ์๋ฃ ํ ๋ค๋ฅธ ์ฌ๋์ ํธ๋ํฐ์์๋ ์คํ๋๋์ง ํ์ธ
- ํ๋ก๊ทธ๋จ์ ์คํ์ํค๋ ๋ฐฉ๋ฒ์ ReadME์ ๋์์๊ณผ ํจ๊ป ์ฒจ๋ถ