-
Notifications
You must be signed in to change notification settings - Fork 3
Description
안녕하세요. 한국항공대학교 이메일 및 텔레그램 알리미 개발자 입니다.
아래와 같이 기능 제안 및 제가 구현 했던 방법을 공유하고자 합니다.
저도 작게나마 도움이 될 수 있으면 좋겠어요:)
제 이메일 및 텔레그램 서비스는 Python으로 만들어져서 일단은 이 언어 기준으로 설명드리게 되네요.
제안할 기능을 설명해주세요.
일반, 학과 공지사항 직링크 구현 및 학과 공지사항 구현
다른 개발자들이 참고할 수 있는 예시나 캡처가 있다면 추가해주세요.
예를 들어 현재 일반공지의 경우 모두 http://www.kau.ac.kr/page/kauspace/general_list.jsp 고정 링크가 달립니다.
이 부분은 제 이메일 서비스 github ( https://github.com/baby-bird/kau-notify/blob/master/send_email.py ) 의 170번째 라인의 BoardTextDay 함수를 보시면 됩니다.
공지 각 게시물의 제목링크를 브라우저 개발자 도구로 검사해보시면 아래 그림과 같이 javascript 함수로 연결되며 빨간색 네모로 표시된 고유 번호가 있습니다. 따라서 각 목록을 파싱하면서 저 해당 번호를 가져온뒤, http://www.kau.ac.kr/page/kauspace/general_list.jsp?search_boardId=15895 이와 같이 구성해주시면 됩니다.
(제가 2016년 당시 구현할때만 해도 각 공지 게시판이 아닌 홈페이지 메인화면에 뜬 공지를 누르면 search_boardId= 를 붙이고 고유번호가 달린 링크로 연결돼서 쉽게 알 수 있었습니다. 개편된 현재는 홈페이지 메인화면을 아래로 쭉 내리면 일반, 학과 공지사항등 게시판 파트가 있는데 여기서 위 예시 게시글을 누르면 https://www.kau.ac.kr/page/kauspace/general_list.jsp?boardId=15895&act=VIEW&communityKey=B0146 이렇게 뜨네요. search_boardId 이외에 위 방법으로도 통하는 것 같습니다.)
-
취업 공지
취업 공지의 경우 https://career.kau.ac.kr/ko/community/notice2 이 주소에 교내, 교외 공지가 올라오며 url 이 모두 공개되어 있습니다.
따라서 이 부분은 쉽게 가져오실 수 있습니다. -
학과 공지
학과 공지의 경우 각 학과마다 고유의 사이트가 있습니다.
(https://github.com/baby-bird/kau-notify/blob/master/send_email.py 의 130번째 라인부터)
그리고 bbsId (공지사항 고유 번호, 각 학과의 일반공지에 해당)와 nttId(게시글 고유번호) 에 해당하는 값을 알아야 직링크로 연결됩니다.
아래가 예시 입니다.
http://college.kau.ac.kr/web/pages/gc93464b.do?siteFlag=attll_www&bbsFlag=View&bbsId=0048&nttId=597
그렇다면 일반, 학과 공지처럼 똑같이 개발자도구 요소검사로 bbsId와 nttId를 알아낼 수 있는가 하면 또 그렇지 않습니다.
단순히 http://college.kau.ac.kr/web/pages/gc93464b.do 사이트에서 게시글을 가져오고자 하면 html 에 게시글이 있는 부분이 비어있게됩니다. 이는 공지 게시글을 누를 때, 개발자 도구로 network 활동을 보시면 http://college.kau.ac.kr/web/bbs/bbsListApi.gen 과 통신하는 것을 보실 수 있는데 이 링크에서 게시물 정보를 보내주기 때문에 학과 게시판만 소스코드를 가져오면 빈 소스만 나오게 되더라고요ㅠ
따라서 아래와 같이 게시물을 가져오시면 됩니다. ( https://github.com/baby-bird/kau-notify/blob/master/send_email.py 의 226번째 라인부터)
bbsId_str = "bbsId="
nttId_str = "&nttId="
payload = {"siteFlag": siteFlag, "bbsId": bbsId, "pageIndex": "1", "bbsAuth": "30"}
headers = {'Content-Type': 'application/json; charset=utf-8', \
'Host': 'college.kau.ac.kr', \
'Origin': 'http://college.kau.ac.kr', \
'Referer': board_url}
source_code = requests.post('http://college.kau.ac.kr/web/bbs/bbsListApi.gen', data=json.dumps(payload),
headers=headers, timeout=60)
plain_text = source_code.text
result_data = json.loads(plain_text)
datetext = []
hreflst = []
titlelst = []
for data in result_data['resultList']:
titlelst.append(data['nttSj'])
hreflst.append(notice_link + bbsId_str + bbsId + nttId_str + str(data['nttId']))
datetext.append(data['frstRegisterPnttm'])
http://college.kau.ac.kr/web/bbs/bbsListApi.gen 에 data를 post로 넘겨서 받은 json 데이터의 resultList 안에 nttSj 가 제목이고 nttId 가 게시물 고유 ID, frstRegisterPnttm 가 등록 날짜를 의미합니다.
- 이메일 및 텔레그램 구현 방식
저또한 전공자가 아니라 코드는 지분합니다만ㅠㅠ 저는 Google App Engine으로 이메일 및 텔레그램 서버를 구현했습니다. 그래서 제 프로젝트 저장소 를 보시면 cron.yaml 에서 매일 오후 9시send_email.py스크립트를 실행하도록 하였습니다.
텔레그램의 경우는 아직 github에 올리지 못했지만 매일 오전 8시에 각 공지 게시판의 고유 아이디를 가져오고 이후 5분마다 고유 아이디보다 높은 값의 공지가 있으면 메시지를 보내도록 구현하였습니다.( 고유 ID 가 새로운 글이 올라올때마다 Incremental 했기때문)
해당 기능을 직접 개발해 기여할 계획이 있으십니까?
Python 기반 코드 구현 가능 합니다.
이 어려운 시기에 이렇게 학우분들을 위해서 개발해주셔서 감사하며 아무쪼록 조금의 도움이나마 되면 좋겠습니다:)
감사합니다.

