누구나 할 수 있는 크롤링 #2
python 설치, 실제로 parsing 하는 부분은 1편 참고
슬랙 워크스페이스 만들기
이제 슬랙 워크스페이스를 하나 만든다. 그 다음 핸드폰에 슬랙앱을 깔고 아까 만들어둔 워크스페이스를 등록해두면 슬랙봇을 메시지가 왔을 때, 푸시 알림까지 받을 수 있다.
우리는 슬랙 web hook api를 사용할 예정이다. 아래 링크로 접속해서 설정 가이드를 따른다
- 슬랙 워크스페이스를 만들고
- Enable incoming webhooks 설정한다
dashboard로 이동해서, “Create New App” 버튼을 클릭한다 - From scratch 선택
4. 다음 화면에서 내가 만들 앱(슬랙봇)의 이름을 적고
5. 아래 Select a workspace를 선택하면 내가 방금 만들었던 workspace를 선택한다.
6. 다음 화면에서 “Incoming Webhooks”를 선택한다
7. Activate Incoming Webhooks -> ON으로 켜주고
8. ON으로 켜면 테스트할 수 있는 커맨드를 준다. 한 번 테스트 해보려고 하는데, {YOUR_WEBHOOK_URL_HERE} 뭔가 넣어줘야 하는 것 같다.
아래에 보면 채널을 연결해줘야한다.
curl -X POST -H 'Content-type: application/json' --data '{"text":"Hello, World!"}' YOUR_WEBHOOK_URL_HERE
General 채널을 연결해주고 돌아오면 테스트커맨드가 갱신되어 있는 것을 확인할 수 있다. 커맨드를 실행해보자.
9. 이제 이전 시간에 만들었던 코드에서 직접 slack api를 호출해보자. 우리는 이미 requests 라이브러리를 쓰고 있기 때문에 슬랙메시지를 쏘는 함수도 쉽게 만들 수 있다.
def send_message_to_slack(message):
slack_url = "{아까 설정했던 slack webhook url}"
headers = {
'Content-Type': "application/json",
}
slack_data = {
"text": message
}
response = requests.post(
slack_url,
data=json.dumps(slack_data),
headers=headers
)
print(response)
send_message_to_slack("test message") # 한 번 테스트 해보자!
이제 내가 원하는 데이터를 slack message로 만들어서 보내기만 하면 된다.
discount ≥ 30 이라는 조건을 넣어서 한 번 슬랙 메시지로 쏴보자.
if discount >= 30:
send_message_to_slack(str(name) + '\n' + str(sale) + '\n' + str(discount) + '%', "")
구현은 끝난 것 같다. 이제 특정 시간대에 이 함수를 한 번 실행하게 하는 자동화도 추가할 예정이다.
Firebase Function 에 올려보자
먼저 firebase에 계정을 만들고, 새 프로젝트도 하나 만든다.
왼쪽 메뉴 -> 모든 제품 -> Functions 선택
“프로젝트 업그레이드" 클릭해서 Blaze 요금제로 올린다. 과금이 될 수 있는데 한달에 몇백원 수준으로 나오므로 테스트비용으로는 나쁘지 않을 듯하다.
Function을 쓰려면 Cloud Firestore도 사용해야하므로 여기도 설정해준다.
Firebase Console Client 설치하기
macos는 brew로 설치하기를 권장한다.
$ brew install firebase-cli
.. 설치가 끝나면
$ firebase login # 크롬브라우저가 뜨고, firebase를 만들었던 계정으로 로긴함
$ firebase projects:list # 만들었던 프로젝트를 확인한다
이제 function으로 올릴 디렉토리를 만들고 파이어베이스를 사용하기 위해 준비를 한다
$ firebase init
그 이후 모두 기본옵션으로 선택하면 프로젝스 설정이 끝난다. 그리고 디렉토리를 들어가보면 파일이 만들어져있는 것을 볼 수 있다.
vscode에서 이 디렉토리를 열고 아까 우리가 작업했던 내용을 넣어준다.
- 우리가 사용하는 라이브러리명시
requirements.txt 파일에 다음을 추가한다.
firebase_functions~=0.1.0
requests==2.31.0
beautifulsoup4==4.12.2
2. 앞에서 작업했던 파일을 옮겨온다. 파일명을 “my_spider.py”로 추가했다.
3. main.py를 열어보면 이미 코드가 몇 줄 있다.
# Welcome to Cloud Functions for Firebase for Python!
# To get started, simply uncomment the below code or create your own.
# Deploy with `firebase deploy`
from firebase_functions import https_fn
from firebase_admin import initialize_app
from my_spider import check_web # 우리가 작성했던 파일과 함수명
from firebase_functions import scheduler_fn # scheduler를 쓰기 위해 추가
initialize_app() # 주석을 제거해준다
#
#
# @https_fn.on_request()
# def on_request_example(req: https_fn.Request) -> https_fn.Response:
# return https_fn.Response("Hello world!")
# 매일 오전 9시 호출하도록 설정했다
@scheduler_fn.on_schedule(
schedule="every day 09:00",
timezone=scheduler_fn.Timezone("Asia/Seoul"),
)
def schedule_crawling(event: scheduler_fn.ScheduledEvent) -> None:
check_web() # 우리가 만들어둔 함수 호출한다
이렇게 작업은 끝났다.
서버에 올려보자.
$ firebase deploy