어푸푸

전문연 퇴근 알리미 만들기 (한국과학기술원, KAIST, KREP) 본문

잡동사니/자동화

전문연 퇴근 알리미 만들기 (한국과학기술원, KAIST, KREP)

예수님부처 2018. 7. 29. 21:40

전문연 여러분들 안녕하세요. 그리고 특히 한국과학기술원 전문연 여러분 반갑습니다.
모두들 어디가서 말할 때는 조심스럽지만, 우리는 학교에서 군방의 의무를 다하고 있는 군인이죠. 그래서 꼬박꼬박 출퇴근 QR 코드를 찍습니다. 신분이 신분인 만큼 출퇴근을 제대로 못하면 전문연 편입 자격이 박탈되기도 하죠. 물론 대부분의 전문연분들은 아주 성실히 꼬박꼬박 출퇴근을 하고, 오히려 매일 매일이 초과 근무인 일상을 지내는 분들이 대부분입니다.
사실 전문연 복무를 하면서 제일 힘든 것은 출퇴근을 찍는 것입니다. 가끔은 새벽까지 일을 해야할 때가 있는데, 새벽 6시에 퇴근하고 10시에 출근을 다시 찍어야 하니까요. 하지만 이런 것 별거 아닙니다. 그냥 출근 시간에 출근 QR 코드를 찍으면 되니까요. 하지만 정말 정말 억울한 일이 있으니.. 바로 깜빡 잊고 퇴근 QR 코드를 찍지 않을 때죠. 거의 대부분의 날들에는 퇴근 QR 코드를 잘 찍고 가지만, 몸이 피곤해서 퇴근을 할 때 깜빡했다거나, '찍어야지.. 찍어야지..' 해놓고 깜빡 잊는 날들이 일 년에 며칠은 있을 수 밖에 없죠. 며칠뒤 '아.. 맞다! 미퇴근!' 라고 뒤늦게 알았을 때에는 이미 패널티로 휴가가 하루 없어진 후입니다. 근무는 근무대로 다 하고 초과 근무는 초과 근무대로 다 하고 패널티는 패널티대로 받는 것이죠. 이렇게 까먹었을 때 우리는.. ㄱㅏ끔... 눈물을 흘립니ㄷㅏ...

<퇴근 도장을 까먹었을 때 우리는... ㄱㅏ끔... 눈물을 흘린ㄷㅏ...>
<ㄱㅏ끔은 눈물을 참을 수 없는 ㅁㅣ퇴근이 별루ㄷㅏ...>

그래도 요즘은 시스템이 좋아져서 퇴근 시간이 일정 이상 지나면 얼른 퇴근하라고 이메일이 한 통 오지만, 딱 한 통이 올 뿐이고, 이메일을 확인해도 '조금 이따가 찍어야지...'라고 생각하고 깜빡 하는 순간 미퇴근이 될 수 밖에 없는 것입니다. 코레일 매크로를 만들고 자동화의 맛을 봐버린 저는 참을 수가 없었습니다. 이것도 프로그램을 만들어서 너무나도 편의를 추구하고 싶었던 것이죠. 하지만 개발자가 아닌 저로서는 한계가 뚜렷했습니다. 학교 시스템에 로그인을 파이썬으로 해야되는데, 어떻게 해야되는지를 해결해야 했던 것이죠. 그렇다고 시간을 많이 쓰기는 싫어서 저는 다른 사람들이 무언가를 만든 것이 없는지를 찾아보기 시작했습니다. 그리고 다른 학우분이 로그인 및 QR 코드 받는 것을 자동화 한 파이썬 코드를 찾아서 낼름 다운 받았습니다. 이 자리를 빌어서 j1wan님께 감사의 말씀을 올립니다. 헤헤 감사! 자세한 원 코드는 아래 주소에서 보실 수 있습니다.

https://github.com/j1wan/AutoKREP

위 코드를 테스트해보니 학교 전문연 홈페이지인 KREP에 로그인이 잘 되는 것을 확인하였습니다. 그렇다면 이제 편의를 추구 할 일만 남은 것이죠. 제가 원하는 기능은 다소 간단한 기능이었습니다. 퇴근 시간이 된 후 퇴근을 안했다면 일정 시간 간격으로 저에게 메세지를 보내주었으면 하는 소박한 기능이었습니다. 생각해보세요. 먼 옛날 조선시대 농사일을 나가야되는 농부가 닭 울음 소리가 없었다면 얼마나 슬펐겠습니까? 아마 늦잠을 자고 만 농부는 한 마디를 말했을지도 모릅니다.

'이런 시부럴...'

그래서 저는 퇴근 시간을 계속해서 알려주는 전문연 닭을 만들고 싶었습니다. 그것도 농부가 일어날 때까지 10분 간격으로 울어재끼는 최첨단 닭을 말이죠.
이미 코레일 매크로를 만들어서 잘 사용을 하고 있었기 때문에 저는 메세지를 텔레그램 챗 봇을 이용해서 보내기로 했습니다. 다만, 코레일 매크로는 입력이 들어와야 반응을 하는 프로그램이기 때문에 들어온 메세지의 chat_id로 메세지를 보내면 되었지만, 이 프로그램은 정해진 대상에게 조건이 충족되면 계속해서 메세지를 보내야하기 때문에 사용자의 chat_id를 항상 알아야 합니다. 그래서 이를 입력 파일에 입력해두었는데, 그 연유는 최대한 프로그램의 유연성을 확보하고 싶었고, 프로그램이 예기치 못하게 꺼지더라도 다시 실행되면 chat_id를 안전하게 확보하기를 바랐기 때문입니다.
이 프로그램을 만드는데 난관이 있었으니 바로 시간을 비교하는 것이었습니다. 퇴근 시간은 학교 웹사이트에서 파싱(parsing)을 해서 해당 스트링을 시간 포맷으로 바꾸어 얻었지만, 현재 시간을 바로 얻자니 시간을 얻은 위치가 기재되어 시간 사이의 비교가 잘 되지 않았던 것이죠. 그래서 현재 시간을 얻고, 이를 스트링으로 바꾸고, 이를 다시 시간으로 변환하여 비교하는 시간 사이의 일관성을 확보하고 프로그래밍 했습니다. 써본 결과.. 너무 좋아요! 퇴근 찍는 것을 깜빡하고 집에서 핸드폰을 하다가 메세지를 받고 소중한 휴가를 몇 번 살렸습니다. 20분마다 퇴근 알림 메세지를 전송하게 해놓았고, 퇴근을 하면 퇴근 알람 메세지를 더 이상 보내지 않습니다.

<전문연 퇴근 알림 메세지를 보내주는 모습>

이런 편의 추구 프로그램은 배포된다고 문제가 될 것 같지 않아 배포합니다. 필요한 파이썬 라이브러리는 pip를 이용하여 설치하시면 됩니다. 예를 들어서 이 프로그램은 텔레그램 API를 사용하기 때문에 telepot 라이브러리가 필요한데요, 이렇게 필요하지만 현재 없으신 라이브러리를 pip를 이용하여 설치하시면 됩니다.

프로그램 사용법

0. 필요한 라이브러리들을 설치합니다. run.bat을 실행하시면 어떤 라이브러리가 필요하다고 에러가 나기 때문에 무슨 라이브러리를 설치해야할지 알 수 있습니다.
1. 텔레그램 봇을 만들고, 봇의 토큰을 받습니다. (코레일 매크로 제작기 #2 참조)
2018/03/25 - [잡동사니/자동화] - 코레일 자동 예약 매크로 제작기 #2
2. config.py를 열고 텔레그램 봇의 토큰, 포탈의 ID와 PW를 입력해주세요.
3. config.py의 UUID에 KREP 앱에서 볼 수 있는 사용자 기기 아이디를 입력해주세요. 이 기기 ID는 KREP 앱 → '사용자 기기인증'에서 확인할 수 있습니다.

첨부파일
0.00MB

<config.py 내부>

첨부파일
0.00MB

<Chat_ID_Check.bat을 실행하고 메세지를 보내면 나의 chat_id를 알 수 있다>

4. chat_id를 확인하기 위해 Chat_ID_Check.bat을 실행하고, 생성한 텔레그램 봇에다가 아무 말이나 걸어봅니다.
5. 친 말을 그대로 봇이 저에게 다시 전송해주며, 실행된 프로그램에서 우리의 chat_id를 확인할 수 있습니다. 이 chat_id를 config.py에다가 입력해줍시다.
6. Chat_ID_Check.bat을 종료하고, run.bat을 실행합니다.
7. 짜잔 이제 퇴근 시간이 되면 퇴근할 때 까지 20분 간격으로 저희에게 메세지를 보내줍니다. 또한 상태라고 치면 현재 상태를 보내주게 됩니다. 이 프로그램은 항상 컴퓨터에서 실행되고 있어야 합니다.
 

프로그램 소스

삭제 (Version 1)

첨부파일
0.00MB

 

후기 1

코레일 매크로 제작기를 올리면서 댓글들이 상당히 많이 달렸습니다. 일부러 가짜 정보로 도발해서 본인이 쓰고자 하는 API의 안정성을 확인하고 싶었던 사람도 있었고(이거 보고 있어요? 님 댓글 삭제해버림!) 매크로를 구매하거나 쓰고 싶다고 댓글을 달아주신 분들이 대부분이었죠. 이 포스트에 올린 프로그램이랑 구조 자체는 비슷하니까 이거 보고 참고하기를 바랍니다.


후기 2

여전히 사용하고 있습니다만 학교 보안팀에서 전화가 왔어요. 트래픽만 문제가 되지 않으면 상관없을거라고 생각해서 5초 당 한 번씩 현재 상태를 확인하게 해놨는데, 하루에 만 건 이상의 접속 로그가 있어서 로그 분석하기가 힘들다고 프로그램 구조를 바꿔달라고 하셔서 프로그램 구조를 약간 변경하여 사용하는 중입니다. 사용시 보안팀에서 힘들어질 수도 있는 예전 프로그램 소스 코드는 삭제합니다. 새로운 프로그램은 귀찮아서 안올릴 것 같아요. 그럼 이만


후기 3

요청을 지나치지 못하고 현재 사용중인 퇴근 알리미를 올립니다.