Java의 URL.openConnection()을 이용해 http://www.google.co.kr/ig/api?weather=seoul로부터 정보를 가져와서 날씨정보를 간단하게 jsp로만 표현해 보았다. XML 파싱은 jdom(http://www.jdom.org/)을 이용했다.
시군 영문코드는 http://junelife.tistory.com/36?3d6c9248를 참조하면 된는데 시군 영문코드를 정확하게 알기위해 google code에서 아무리 찾아봐도 날씨api에 대한 내용이 없던데 서핑중 다음 블로그에서 공식 api가 아니란 내용을 봤다.
http://blog.emerick.org/2008/05/07/google-weather-api-feed-documentation/
재미로 하면 몰라도 공식 api가 아님으로 서비스하기엔 무리가 있어 보인다.
참고로 기상청에서도 단순하지만 날씨 정보를 다음 주소에서 제공해준다.
http://www.kma.go.kr/XML/weather/sfc_web_map.xml
다음은 실제 작성한 jsp 코드이다.
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page import="java.net.URL"%>
<%@ page import="java.net.URLConnection"%>
<%@ page import="java.io.BufferedReader"%>
<%@ page import="java.io.InputStreamReader"%>
<%@ page import="java.io.InputStream"%>
<%@ page import="java.util.List"%>
<%@ page import="java.util.HashMap"%>
<%@ page import="org.springframework.util.FileCopyUtils"%>
<%@ page import="org.springframework.util.xml.DomUtils"%>
<%@ page import="org.springframework.web.util.HtmlUtils"%>
<%@ page import="org.jdom.Attribute"%>
<%@ page import="org.jdom.DocType"%>
<%@ page import="org.jdom.Document"%>
<%@ page import="org.jdom.Element"%>
<%@ page import="org.jdom.JDOMException"%>
<%@ page import="org.jdom.input.SAXBuilder"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%
//URL url = new URL("http://www.kma.go.kr/XML/weather/sfc_web_map.xml");
URL url = new URL("http://www.google.co.kr/ig/api?weather=seoul");
String xml = FileCopyUtils.copyToString(new InputStreamReader(url.openConnection().getInputStream(), "EUC-KR"));
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(new InputStreamReader(url.openConnection().getInputStream(), "EUC-KR"));
Element root= doc.getRootElement();
Element weather = root.getChild("weather");
Element current_conditions = weather.getChild("current_conditions");
List list = current_conditions.getChildren();
HashMap<String, String> result = new HashMap<String, String>();
for(Object obj : list){
Element ele = (Element)obj;
result.put(ele.getName(), ele.getAttributeValue("data"));
}
request.setAttribute("xml", HtmlUtils.htmlEscape(xml));
request.setAttribute("result", result);
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>google weather</title>
<style type="text/css">
table {
font-family: "맑은 고딕", "굴림체", Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
}
td{
padding: 10px 10px 10px 10px;
}
</style>
</head>
<body>
<table width="600" border="0" cellpadding="0" cellspacing="1" bgcolor="#0066CC" align="center">
<tr bgcolor="#FFFFFF">
<td rowspan="5" align="center"><img src="http://www.google.co.kr/ig${result.icon}"></td>
<td> 상태: ${result.condition}</td>
</tr>
<tr bgcolor="#FFFFFF">
<td> 온도: ${result.temp_f} (Fahrenheit)</td>
</tr>
<tr bgcolor="#FFFFFF">
<td> 온도: ${result.temp_c} (Celsius)</td>
</tr>
<tr bgcolor="#FFFFFF">
<td> ${result.humidity}</td>
</tr>
<tr bgcolor="#FFFFFF">
<td> ${result.wind_condition}</td>
</tr>
<tr bgcolor="#FFFFFF">
<td colspan="2">${xml}</td>
</tr>
</table>
</body>
실행한 결과 화면이다.
'java' 카테고리의 다른 글
java request information (0) | 2014.01.28 |
---|---|
자바 가변인자 (variable argument type) (0) | 2010.05.10 |
Tag Library Function (0) | 2009.01.19 |
Custom Tags in JSP Pages (0) | 2008.12.31 |
Java -classpath 옵션 (1) | 2008.04.29 |