日期:2014-05-17 浏览次数:20642 次
package com.itsum.supertour.util.filter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
/**
* 天气查询. 推荐使用此 google service 查询<br/>
*
*/
public class WeatherUtils {
/**
* 使用 google 查询天气<br/>
* 上海: http://www.google.com/ig/api?hl=zh_cn&weather=shanghai
*
* @param city 城市拼音, 如 北京: beijing
* @return wuhan : 2010-02-27 天气: 晴, 温度: 8 - 20℃, 湿度: 88%, 风向: 东南、风速:4 米/秒
*/
public static List<StringBuilder> getweather(String city) {
StringBuilder sbd = new StringBuilder();
try {
String ur = "http://www.google.com/ig/api?hl=zh_cn&weather=";
URL url = new URL(ur + city);
InputStream in = url.openStream();
// 解决乱码问题
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int i = -1;
while ((i = in.read()) != -1)
bos.write(i);
// 使用 utf-8 编码. 若不使用则默认会使用本地编码 GB18030, 则会有乱码
InputStream inp = new ByteArrayInputStream(bos.toString()
.getBytes("utf-8"));
// 读取流
Document doc = DocumentBuilderFactory
.newInstance().newDocumentBuilder().parse(inp);
// 城市:
sbd.append(city).append(" : ");
NodeList n1 = getNode(doc, "forecast_information", 0);
// 日期
sbd.append(getAttributeValue(n1, 4, 0) + " ");
NodeList n2 = getNode(doc, "current_conditions", 0);
//System.out.println("天气: " + getAttributeValue(n2, 0, 0));
//System.out.println(getAttributeValue(n2, 3, 0));
//System.out.println(getAttributeValue(n2, 5, 0));
// 天气
sbd.append("天气: " + getAttributeValue(n2, 0, 0) + ", ");
NodeList n3 = getNode(doc, "forecast_conditions", 0);
// 最低气温
sbd.append("温度: " + getAttributeValue(n3, 1, 0));
sbd.append(" - ");
// 最高气