❄️눈이 오는 날만 알림 문구 생성❄️
☃️ OpenWeatherMap Key 발급받는 법
1. https://home.openweathermap.org/ 홈페이지 접속
2. 로그인 후 My API keys 찾기
3. Create Key 로 새로운 키 생성하기 (API key name 작성 후 → Generate)
☃️ 프로젝트에 발급받은 Key 등록하기
· application.properties
# openweathermap api
api.key=[발급받은 api 키]
☃️ JSON 파싱을 위한 dependencies 등록하기
· build.gradle
...
dependencies {
...
// json parsing
implementation group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1'
}
...
☃️ 코드 작성하기
❄️ Api Key 환경 변수 세팅
@Value("${api.key}")
private String apiKey;
❄️ 매일 실행 : @Scheduled 사용
// 매일 아침 9시에 실행
@Scheduled(cron = "0 0 9 * * ?")
public void callWeather() throws IOException { ... }
❄️ OpenWeatherMap API connection 생성
URL url = new URL("https://api.openweathermap.org/data/2.5/weather?lat="+user.getLatitude()+"&lon="+user.getLongitude()+"&appid="+ apiKey);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-type", "application/json");
conn.setDoOutput(true);
❄️ 정보 불러오기
try {
StringBuffer sb = new StringBuffer();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
while(br.ready()) {
sb.append(br.readLine());
}
...
} catch (Exception e) { e.printStackTrace(); }
❄️ 불러온 정보 파싱
JSONParser parser = new JSONParser();
JSONObject data = (JSONObject)parser.parse(sb.toString());
JSONArray weather = (JSONArray) data.get("weather");
JSONObject weather_info = (JSONObject) weather.get(0);
// weather main 종류 : Thunderstorm, Drizzle, Rain, Snow, Atmosphere, Clear, Clouds
String todaysWeather = (String) weather_info.get("main");
String weatherDescription = (String) weather_info.get("description");
❄️ 눈이 오는 날만 알림 생성
if (todaysWeather.equals("Snow")) {
System.out.println("weather : " + todaysWeather);
System.out.println("description : " + weatherDescription);
System.out.println("눈치우기 봉사활동을 할 수 있는 날이에요");
}
🌈 전체 코드
@Component
@RequiredArgsConstructor
public class WeatherAPI {
private final UserRepository userRepository;
@Value("${api.key}")
private String apiKey;
// 매일 아침 9시에 실행
@Scheduled(cron = "0 0 9 * * ?")
public void callWeather() throws IOException {
List<User> users = userRepository.findByWeatherAlarmIsTrue();
for (User user : users) {
try {
// OpenWeatherMap API connection
URL url = new URL("https://api.openweathermap.org/data/2.5/weather?lat="+user.getLatitude()+"&lon="+user.getLongitude()+"&appid="+ apiKey);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-type", "application/json");
conn.setDoOutput(true);
// 정보 가져오기
try {
StringBuffer sb = new StringBuffer();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
while(br.ready()) {
sb.append(br.readLine());
}
// 가져온 정보 파싱
JSONParser parser = new JSONParser();
JSONObject data = (JSONObject)parser.parse(sb.toString());
JSONArray weather = (JSONArray) data.get("weather");
JSONObject weather_info = (JSONObject) weather.get(0);
// weather main 종류 : Thunderstorm, Drizzle, Rain, Snow, Atmosphere, Clear, Clouds
String todaysWeather = (String) weather_info.get("main");
String weatherDescription = (String) weather_info.get("description");
// 눈이 올 때만 알림 주기
if (todaysWeather.equals("Snow")) {
System.out.println("weather : " + todaysWeather);
System.out.println("description : " + weatherDescription);
System.out.println("눈치우기 봉사활동을 할 수 있는 날이에요");
}
} catch (Exception e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
· 알람을 받고 싶어하는 유저만 걸러내기 : findByWeatherAlarmIsTrue
'Spring > [P] 눈치우기 봉사활동 매칭 플랫폼' 카테고리의 다른 글
게시글 삭제하기 (0) | 2024.02.19 |
---|---|
게시글 댓글 작성하기 (대댓글X) (0) | 2024.02.16 |
게시글 작성하기 (0) | 2024.02.15 |
최신 게시글 3개 조회하기 (0) | 2024.02.14 |
게시글 상세 조회하기 (0) | 2024.02.13 |