Skip to content

[기능 제안] 일반, 학과 공지사항 직링크 구현 및 학과 공지사항 구현 #45

@baby-bird

Description

@baby-bird

안녕하세요. 한국항공대학교 이메일 및 텔레그램 알리미 개발자 입니다.
아래와 같이 기능 제안 및 제가 구현 했던 방법을 공유하고자 합니다.
저도 작게나마 도움이 될 수 있으면 좋겠어요:)

제 이메일 및 텔레그램 서비스는 Python으로 만들어져서 일단은 이 언어 기준으로 설명드리게 되네요.

제안할 기능을 설명해주세요.

일반, 학과 공지사항 직링크 구현 및 학과 공지사항 구현

다른 개발자들이 참고할 수 있는 예시나 캡처가 있다면 추가해주세요.

  1. 일반, 학과 공지 등 아래에 해당하는 공지 (취업 공지 제외)
    image

예를 들어 현재 일반공지의 경우 모두 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 이와 같이 구성해주시면 됩니다.

image

(제가 2016년 당시 구현할때만 해도 각 공지 게시판이 아닌 홈페이지 메인화면에 뜬 공지를 누르면 search_boardId= 를 붙이고 고유번호가 달린 링크로 연결돼서 쉽게 알 수 있었습니다. 개편된 현재는 홈페이지 메인화면을 아래로 쭉 내리면 일반, 학과 공지사항등 게시판 파트가 있는데 여기서 위 예시 게시글을 누르면 https://www.kau.ac.kr/page/kauspace/general_list.jsp?boardId=15895&act=VIEW&communityKey=B0146 이렇게 뜨네요. search_boardId 이외에 위 방법으로도 통하는 것 같습니다.)

  1. 취업 공지
    취업 공지의 경우 https://career.kau.ac.kr/ko/community/notice2 이 주소에 교내, 교외 공지가 올라오며 url 이 모두 공개되어 있습니다.
    따라서 이 부분은 쉽게 가져오실 수 있습니다.

  2. 학과 공지
    학과 공지의 경우 각 학과마다 고유의 사이트가 있습니다.
    (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

그렇다면 일반, 학과 공지처럼 똑같이 개발자도구 요소검사로 bbsIdnttId를 알아낼 수 있는가 하면 또 그렇지 않습니다.
단순히 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 기반 코드 구현 가능 합니다.

이 어려운 시기에 이렇게 학우분들을 위해서 개발해주셔서 감사하며 아무쪼록 조금의 도움이나마 되면 좋겠습니다:)
감사합니다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions