파일 비교 결과를 슬랙으로 전송하자.
들어가기에 앞서
- 예제 코드는 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을 사용하여 알아서 작동하도록 해보자.