본문 바로가기

java

구글날씨 api 이용하기

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 코드이다.


<?xml version="1.0" encoding="UTF-8" ?>

<%@ 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>

</html>

실행한 결과 화면이다.

'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