다음은 든든전세주택
공고가 올라올 때 카카오톡으로 알람을 보내는 Java 프로그램입니다.
주요 기능:
- 웹 크롤링: 특정 웹사이트에서 공고를 주기적으로 확인.
- 변경 감지: 새로운 공고가 있을 경우 확인.
- 카카오톡 알림 전송: 카카오톡 API를 사용하여 본인의 카카오톡으로 알람 전송.
필요한 사전 작업
- 카카오톡 API 인증: 카카오 디벨로퍼스에 가입하여 REST API 키와 토큰을 발급.
- 크롤링 대상 웹사이트 확인:
든든전세주택
공고 페이지의 URL과 구조를 분석.
Java 프로그램 코드
아래 코드는 Jsoup
을 사용하여 웹 크롤링을 수행하고, OkHttp
를 사용하여 카카오톡 API를 호출하는 방식으로 구현됩니다.
1. 프로젝트 설정
필요한 라이브러리를 Maven
프로젝트의 pom.xml
에 추가하세요.
<dependencies>
<!-- Jsoup for Web Scraping -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.14.3</version>
</dependency>
<!-- OkHttp for HTTP Requests -->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.3</version>
</dependency>
</dependencies>
2. Java 코드 (Web Scraper + Kakao Notification)
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import okhttp3.*;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;
public class DundenHousingNotifier {
private static final String TARGET_URL = "https://www.example.com/dundun-housing"; // 실제 URL로 변경
private static final String KAKAO_TOKEN = "YOUR_KAKAO_ACCESS_TOKEN"; // 발급받은 액세스 토큰 입력
private static final Set<String> previousListings = new HashSet<>();
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new CheckNewListings(), 0, 60000); // 60초마다 확인
}
static class CheckNewListings extends TimerTask {
@Override
public void run() {
try {
Document doc = Jsoup.connect(TARGET_URL).get();
Elements listings = doc.select(".listing-item"); // 공고 목록을 감싸는 CSS 선택자 확인 후 변경 필요
for (Element listing : listings) {
String title = listing.select(".title").text(); // 제목 선택자 확인 후 변경 필요
String link = listing.select("a").attr("href");
if (!previousListings.contains(title)) {
previousListings.add(title);
sendKakaoMessage(title, link);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
private static void sendKakaoMessage(String title, String link) {
OkHttpClient client = new OkHttpClient();
String message = "새로운 든든전세주택 공고: " + title + "\n상세보기: " + link;
String json = "{ \"template_object\": { \"object_type\": \"text\", \"text\": \"" + message + "\", \"link\": { \"web_url\": \"" + link + "\", \"mobile_web_url\": \"" + link + "\" } } }";
RequestBody body = RequestBody.create(json, MediaType.get("application/json; charset=utf-8"));
Request request = new Request.Builder()
.url("https://kapi.kakao.com/v2/api/talk/memo/default/send")
.addHeader("Authorization", "Bearer " + KAKAO_TOKEN)
.post(body)
.build();
try (Response response = client.newCall(request).execute()) {
System.out.println("카카오톡 전송 결과: " + response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
}
설명
- 웹 크롤링:
Jsoup.connect(TARGET_URL).get();
를 사용하여든든전세주택
공고 페이지에서 데이터를 가져옴..listing-item
클래스를 가진 요소에서 새 공고 정보를 추출.- 기존 공고 목록과 비교하여 새로운 공고가 있는지 확인.
- 카카오톡 메시지 전송:
OkHttpClient
를 사용하여 카카오톡 API에 POST 요청을 전송.- 액세스 토큰(
KAKAO_TOKEN
)을 사용하여 인증 후 메시지를 전송.
- 자동 실행:
TimerTask
를 사용하여 60초마다 새 공고를 확인하고, 변경 사항이 있으면 카카오톡으로 알림을 전송.
실행 방법
카카오 디벨로퍼스
에서 REST API 키를 발급받고, 액세스 토큰을 얻어KAKAO_TOKEN
에 입력.TARGET_URL
에 든든전세주택 공고 URL을 입력.Java
프로젝트에서 실행 (main()
실행).
추가 개선 가능 사항
크롤링 대상 사이트가 AJAX 기반
이라면 Selenium을 활용하여 동적 크롤링 구현.로그 저장 기능 추가
하여 오류 발생 시 확인 가능하도록 개선.DB 또는 파일 저장
을 통해 기존 공고를 관리하여 프로그램 종료 후에도 데이터 유지.
이제 이 코드를 실행하면 새로운 든든전세주택 공고가 올라올 때마다 카카오톡 알람을 받을 수 있습니다! 🚀