전세 공고 등록 시 카톡 알림 프로그램 개발

다음은 든든전세주택 공고가 올라올 때 카카오톡으로 알람을 보내는 Java 프로그램입니다.

주요 기능:

  1. 웹 크롤링: 특정 웹사이트에서 공고를 주기적으로 확인.
  2. 변경 감지: 새로운 공고가 있을 경우 확인.
  3. 카카오톡 알림 전송: 카카오톡 API를 사용하여 본인의 카카오톡으로 알람 전송.

필요한 사전 작업

  1. 카카오톡 API 인증: 카카오 디벨로퍼스에 가입하여 REST API 키와 토큰을 발급.
  2. 크롤링 대상 웹사이트 확인: 든든전세주택 공고 페이지의 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();
}
}
}

설명

  1. 웹 크롤링:
    • Jsoup.connect(TARGET_URL).get();를 사용하여 든든전세주택 공고 페이지에서 데이터를 가져옴.
    • .listing-item 클래스를 가진 요소에서 새 공고 정보를 추출.
    • 기존 공고 목록과 비교하여 새로운 공고가 있는지 확인.
  2. 카카오톡 메시지 전송:
    • OkHttpClient를 사용하여 카카오톡 API에 POST 요청을 전송.
    • 액세스 토큰(KAKAO_TOKEN)을 사용하여 인증 후 메시지를 전송.
  3. 자동 실행:
    • TimerTask를 사용하여 60초마다 새 공고를 확인하고, 변경 사항이 있으면 카카오톡으로 알림을 전송.

실행 방법

  1. 카카오 디벨로퍼스에서 REST API 키를 발급받고, 액세스 토큰을 얻어 KAKAO_TOKEN에 입력.
  2. TARGET_URL든든전세주택 공고 URL을 입력.
  3. Java 프로젝트에서 실행 (main() 실행).

추가 개선 가능 사항

  • 크롤링 대상 사이트가 AJAX 기반이라면 Selenium을 활용하여 동적 크롤링 구현.
  • 로그 저장 기능 추가하여 오류 발생 시 확인 가능하도록 개선.
  • DB 또는 파일 저장을 통해 기존 공고를 관리하여 프로그램 종료 후에도 데이터 유지.

이제 이 코드를 실행하면 새로운 든든전세주택 공고가 올라올 때마다 카카오톡 알람을 받을 수 있습니다! 🚀

Leave a Comment