파일 비교 결과를 슬랙으로 전송하자.
들어가기에 앞서
- 예제 코드는 pycrawler-exam을 통해 다운로드 받을 수 있다.
- [Python] 크롤링으로 업무 자동화 - (4)파일 비교를 안읽었다면 먼저 읽기를 권한다.
- 예제는 크롬 버전 78.0.3904.108, 웹 드라이버 버전 78.0.3904.70으로 만들어졌다.
슬랙 준비
슬랙(Slack)은 협업을 위한 메신저 서비스다. 그리고 메신저 외 많은 기능을 가지고 있다. 많은 기능 중 채널 관리, 마크다운 지원, Github와 연동, 봇 기능들 때문에 현재 팀 내에서 사용하고 있다.
이번 포스팅에서는 이전 포스팅에서 얻은 파일 비교 결과를 슬랙으로 전송할 것이다.
워크스페이스 만들기
먼저 워크스페이스가 없다면 슬랙 공식 홈페이지에서 메일로 워크스페이스를 만들어야 한다.
홈페이지 접속 후 GET STARTED
버튼을 클릭한다.
<슬랙 워크스페이스 만들기 (1)>
다음 두 메뉴에서 My team isn't using Slack yet
메뉴를 선택한다.
<슬랙 워크스페이스 만들기 (2)>
사용할 메일을 입력 후 Confirm
버튼을 클릭한다.
<슬랙 워크스페이스 만들기 (3)>
전송받은 인증번호를 입력한다. 주의할 점은 스팸으로 분류될 수 있다. 메일이 안 온다면 스팸 보관함을 확인한다.
<슬랙 워크스페이스 만들기 (4)>
사용할 팀 이름을 입력 후 Next
버튼을 클릭한다.
<슬랙 워크스페이스 만들기 (5)>
프로젝트 이름을 입력 후 Next
버튼을 클릭한다.
<슬랙 워크스페이스 만들기 (6)>
팀원을 추가한다. 봇을 개발하기 위한 테스트 워크스페이스를 만드는 것이기 때문에 스킵한다.
<슬랙 워크스페이스 만들기 (7)>
모든 입력을 끝내면 생성한 워크스페이스를 볼 수 있다.
<슬랙 워크스페이스 만들기 (8)>
슬랙 API 토큰 발급
메세지를 보내기 위해서 워크스페이스에 접근하기 위한 토큰이 필요하다.
워크스페이스에 로그인이 된 상태로 Slack API에 접속한다. 그리고 Start Building
버튼을 클릭한다.
<슬랙 API (1)>
버튼을 클릭하면 슬랙 앱을 만드는 입력창이 나온다. 앱 이름과 적용할 워크스페이스를 선택한다.
<슬랙 API (2)>
앱이 생성되면 Bot Users
메뉴에서 봇을 생성한다.
<슬랙 API (3)>
입력 값을 적어주고 Add Bot User
버튼을 클릭하여 생성한다.
<슬랙 API (4)>
봇 생성이 되었으면 OAuth & Permissions
메뉴에서 Install App to Workspace
버튼을 클릭한다. 워크스페이스에 현재 생성된 앱을 설치하는 것이다.
<슬랙 API (5)>
Allow
버튼을 클릭한다.
<슬랙 API (6)>
최종적으로 아래와 같이 토큰을 발급받을 것이다. 사용할 토큰값은 Bot User OAuth Access Token
이다.
<슬랙 API (7)>
Slacker
슬랙커는 서드파티 라이브러리로 파이썬 코드에서 슬랙으로 메세지를 전송할 때 필요하다.
아래의 명령어로 설치한다.
1 |
|
slackhandler.py
파일을 생성하고 슬랙커 인스턴스를 다루기 위한 클래스를 추가한다.
1 |
|
슬랙 API에서 발급받은 토큰으로 Slacker 인스턴스를 생성한다. 그리고 slacker.chat.post_message()
함수에 채널명, 보낸이 이름, 메세지 내용 등 옵션을 포함하여 전송한다.
클래스를 추가했으니 main.py
에 객체를 생성한다.
1 |
|
이제 메세지를 생성해서 전송만 하면 된다.
메세지 생성
슬랙은 마크다운을 지원한다. 일반적인 마크다운과 차이가 있으니 Slack Help Center를 참고하여 원하는 포맷으로 메세지를 꾸며보면 좋다.
삭제 파일, 생성된 파일
slackhandler.py
에 삭제 파일과 생성된 파일 리스트를 메세지로 변환해주는 함수를 추가한다.
1 |
|
이전에 분리한 삭제 파일 리스트와 생성 파일 리스트를 받아서 변환한다.
메세지를 추가할 때 >
를 앞에 추가한다. >
는 슬랙 마크다운 문법중 하나로 라인을 들여쓰기한다.
파일 ROW 변경 정보
slackhandler.py
에 파일 ROW 변경 정보 리스트를 메세지로 변환해주는 함수를 추가한다.
1 |
|
이전에 ROW 데이터를 비교하면서 생성한 FileDiifInfo
객체 리스트를 인자로 받는다. 그리고 파일 이름과 get_diff_row_format_str()
함수를 사용하여 메세지를 만든다.
여기서도 마크다운 문법을 사용하여 메세지를 꾸며준다.
메세지 전송
이제 준비는 끝났다 마지막으로 메세지 전송을 한다. main.py
에서 생성된 메세지들을 조합하여 결과 메세지를 전송한다.
1 |
|
이렇게 코드를 추가하면 main.py
와 slackhandler.py
최종 코드는 아래와 같다.
1 |
|
1 |
|
결과
main.py
를 실행한다. 그러면 슬랙 워크스페이스에 아래와 같은 결과가 나올 것이다.
<결과 메세지>
성공적이다. 다음 포스팅에서 이 크롤러를 cron
을 사용하여 알아서 작동하도록 해보자.