ACHO.pk devlog

자바 Jsoup/JDA 활용 - 학교 공지사항 새 글 알림봇(디스코드봇) 본문

프로젝트

자바 Jsoup/JDA 활용 - 학교 공지사항 새 글 알림봇(디스코드봇)

Acho 2022. 3. 3. 17:57

프로젝트명
학교 공지사항 새 글 알림봇

진행기간
2022 02 16 ~ 2022 02 26
(11일간)
js코드에서 java 코드로 바꾼 것까지 생각하면 매우..많은 시간을 사용했지만, 굳이 포함시키지는 않겠다.

개인 토이 프로젝트
새로 대학교에 들어가면서 공지사항을 확인해야할 일이 많아졌다. 물론 매일 들어가서 확인하는 것도 좋은 방법이긴 하지만, 공지사항에 새 글이 언제, 몇 시에 올라올지 모르는 상황이기 때문에 알림봇을 만들면 편리하겠다고 생각했다. 또한, 자바를 이용해서 크롤링에 도전하는 것도 하나의 공부라고 생각하여 토이 프로젝트를 진행하게 되었다.

사용한 언어와 툴
JAVA, Eclipse, HEROKU

제작 과정
1. 알고리즘
[방법1]
과정1)
jsoup를 이용하여 학교 홈페이지 공지사항 url을 소스로 하여 HTML을 파싱한다.
CSS 선택자를 사용하여 게시글 제목 데이터를 추출한다.
추출한 값을 변수1에 저장한다.
위의 과정을 프로그램 컴파일 후 1번만 실행되게 한다.
과정2)
과정 1를 반복한 후 추출한 값을 변수 2에 저장한다.
변수 1과 변수 2의 값을 비교하여 같지 않을 경우 공지사항에 새 글이 올라왔음을 알 수 있다.
이후에는 과정 2를 3시간 간격으로 실행한다.

[방법2]
방법 2에서는 제목 데이터가 아닌 게시글 번호를 추출한다.
변수1에 0의 값을 저장한 후 과정 2 실행.
변수1은 int형으로 선언하기 때문에 과정 2의 변수2를 element에서 int로 형 변환을 해야하는 작업이 필요하다.

방법 2를 하는 과정에서 형변환과 형변환 후 두 변수의 값을 비교하는 과정에서 에러가 많이 나 방법 1로 바꾸게 되었다.
다음 번에 다시 해봐야겠다.


2. 메이븐 - 의존성 추가
메이븐을 사용했기 때문에 pom.xml 파일에 의존성을 추가했다. jsoup과 JDA(자바 디스코드)를 사용하기 위함이다.
꼭 본인의 버전을 확인해야한다.

	<dependencies>
		<dependency>
			<groupId>org.jsoup</groupId>
			<artifactId>jsoup</artifactId>
			<version>1.14.3</version>
		</dependency>
		<dependency>
			<groupId>net.dv8tion</groupId>
			<artifactId>JDA</artifactId>
			<version>5.0.0-alpha.8</version>
		</dependency>	
	</dependencies>



3. 소스코드

github로 확인하는 것을 추천한다.
https://github.com/Acho-mj/New-post-notification-Bot

GitHub - Acho-mj/New-post-notification-Bot: I have created a bot that alerts you when a new article is posted on the notice on t

I have created a bot that alerts you when a new article is posted on the notice on the school website. This is designed to relieve the hassle of checking announcements and is only allowed for perso...

github.com






예외 / 3-1. 헤로쿠 연동 유출
또 디스코드 봇 토큰 값은 외부로 유출이 되면 안되기 때문에 소스코드를 github에 올릴 땐 본인의 토큰 값을 제외하고 올려야한다.
사실 이 문제 때문에 헤로쿠에 업로드도 안되고, 디스코드 쪽에서 연락도 왔다.(유출에 조심해달라고 했다.)

유출에 조심하자!


6. Eclipse 콘솔창(결과)

헤로쿠에 서버는 현재 삭제한 상태이므로 콘솔창 화면을 올려본다.
(3월 안에 다시 연동할 생각이다)

본인은 1분에 한 번씩 크롤링 하도록 설정함

1분마다 크롤링을 하고, 1분마다 학교 홈페이지 공지사항 중 첫 게시글의 제목을 불러온다.
원래는 주기를 1시간으로 설정했지만, 주기가 1분일 때도 학교 홈페이지에서 날 막지는 않을지 궁금해서 해봤다.
다행히 해킹하는 걸로 여기지는 않은 것 같다.

새 게시글이 올라왔을 경우

공지사항 최신 글 제목이 바뀐 시점이 보일것이다.
새 글이 올라오면 가장 최신 글의 제목을 알려준 후, 이것을 제외한 다른 최신 글 5개의 제목을 알려주도록 했다.


5. 참고자료
https://github.com/DV8FromTheWorld/JDA - java discord JDA
https://lektion-von-erfolglosigkeit.tistory.com/97 - 서버 무료 호스팅


알림봇 기능
처음 봇이 실행이 되면 최신글 제목과 최신글을 제외한 5개의 공지사항 제목을 알려준다.
추가로 링크가 걸려 해당 홈페이지에 바로 들어갈 수 있다.
그 후로는 oldtitle과 newtitle이 다를 때에만 새 글 제목을 알려준다.


----------------------------------------------------------------------------
소스코드 무단 사용하지 말고, 참고만 했으면 좋겠다.
아직 실력이 부족하기 때문이다.
직접 코딩해서 본인만의 코드를 짜보기를 바란다.

나는 더 효율성 좋은 코드를 짜기위해 공부해야겠다.

Comments