package com.skywares.dcom.commons;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.URL;
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 String 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(" - ");
// 最高气温
sbd.append(getAttributeValue(n3, 2, 0) + "℃, ");
// 湿度
sbd.append(getAttributeValue(n2, 3, 0) + ", ");
// 风向
sbd.append(getAttributeValue(n2, 5, 0));
}
catch (Exception e)
{
sbd.append("获取天气失败或不存在此城市");
}
return sbd.toString();
}
/**
* 获取节点集合
*
* @param doc
* : Doument 对象
* @param tagName
* : 节点名
* @param index
* : 找到的第几个
* @return
*/
private static NodeList getNode(Document doc, String tagName, int index)
{
return doc.getElementsByTagName(tagName).item(index).getChildNodes();
}
/**
* 获取节点内容
*
* @param node
* : nodelist
* @param index
* : 节点索引, 也可使用 getNamedItem(String name) 节点名查找
* @param item
* : 属性的索引
* @return
*/
private static String getAttributeValue(NodeList node, int index, int item)
{
return node.item(index).getAttributes().item(item).getNodeValue();
}
public static void main(String[] args)
{
System.out.println(getweather("wuhan"));
}
}
/*
* 这里是返回的xml
*/
xml_api_reply version="1">
<weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0">
<forecast_information>
<city data="Wuhan, Hubei"/>
<postal_code data="wuhan"/>
<latitude_e6 data=""/>
<longitude_e6 data=""/>
<forecast_date data="2012-06-28"/>
<current_date_time data="2012-06-28 19:00:00 +0000"/>
<unit_system data="SI"/>
</forecast_information>
<current_conditions>
<condition data="小雨"/>
<temp_f data="79"/>
<temp_c data="26"/>
<humidity data="湿度: 89%"/>
<icon data="/ig/images/weather/cn_lightrain.gif"/>
<wind_condition data="风向: 东南、风速:3 米/秒"/>
</current_conditions>
<forecast_conditions>
<day_of_week data="周四"/>
<low data="24"/>
<high data="29"/>
<icon data="/ig/images/weather/cn_heavyrain.gif"/>
<condition data="雨"/>
</forecast_conditions>
<forecast_conditions>
<day_of_week data="周五"/>
<low data="25"/>
<high data="33"/>
<icon data="/ig/images/weather/thunderstorm.gif"/>
<condition data="雷阵雨"/>
</forecast_conditions>
<forecast_conditions>
<day_of_week data="周六"/>
<low data="23"/>
<high data="33"/>
<icon data="/ig/images/weather/chance_of_storm.gif"/>
<condition data="可能有暴风雨"/>
</forecast_conditions>
<forecast_conditions>
<day_of_week data="周日"/>
<low data="24"/>
<high data="31"/>
<icon data="/ig/images/weather/chance_of_storm.gif"/>
<condition data="可能有暴风雨"/>
</forecast_conditions>
</weather>
</xml_api_reply>
分享到:
相关推荐
Android中基于心知天气获取天气信息JSONJSON简介JSON对象JSON数组JSON解析Android中获取天气获取天气的流程获取心知天气的API key获取心知天气的API代码部分实现的效果如下进阶-获取任意城市的天气信息 为什么要写这...
本案例“android studio 简单获取天气”旨在教你如何利用Android Studio开发一个应用,该应用能够从网络获取天气预报数据并将其展示在用户界面(UI)上。下面我们将详细探讨这个过程涉及的关键知识点。 1. **网络...
该项目的核心是通过与天气API交互,获取实时的天气信息,并在用户界面中展示。在这个过程中,我们将涉及到以下几个关键技术点: 1. **网络请求**: - 使用Java的内置类`HttpURLConnection`执行HTTP GET请求。`...
本示例是关于使用QT获取天气信息的一个实例,通过这个例子,我们可以学习到如何利用QT进行网络请求、数据解析以及界面展示等核心技能。 首先,`cityid.txt`文件很可能包含了一系列城市的ID,这些ID通常用于调用天气...
在外网用此软件获取所需要的天气信息,并把天气信息保存到数据库。 2Mbps的带宽更新最近7天的天气数据一次大约需要30分钟, 每天更新一次即可。天气实况对网络带宽不敏感,更新一次大约需要5分钟,可根据需要进行...
一个使用和风天气API获取天气信息并通过SMTP发送到邮箱的python小项目[参赛项目]
在这个特定的案例中,"Delphi做的获取天气预报源码"是一个项目,它利用Delphi的编程能力来获取并显示实时天气信息。这个源码可能包含了一个客户端应用程序,用户可以通过它来查询不同地区的天气预报。 在Delphi中...
在这个"QT获取天气示例程序"中,开发者利用了QT5的库来设计一个应用,该应用能够通过HTTP协议从网络上获取天气数据。这个示例程序不仅展示了如何在QT环境中构建用户界面,还演示了如何处理网络请求以及解析JSON数据...
在本项目中,我们利用了四个关键的技术栈:SpringMVC、Maven、MyBatis以及MySQL,构建了一个功能丰富的Web应用。以下是这些技术及其在项目中的应用详解: 1. **SpringMVC**:作为Spring框架的一个模块,SpringMVC是...
在UI层,通常我们会有一个`WeatherActivity`或`WeatherFragment`来展示天气信息。使用`ViewModel`和`LiveData`来管理数据,确保在UI变化时数据的正确更新。在`ViewModel`中,调用`WeatherRepository`获取天气信息,...
在Android平台上,开发一个能够获取并显示天气信息的小程序是一个常见的需求。这个小程序的核心功能包括定位用户的位置(通过经纬度)、使用百度API获取城市信息、通过HTTP请求抓取天气JSON数据,以及解析和展示这些...
该项目是一个Android应用程序,旨在为用户提供实时和未来的天气信息。通过集成Google的天气预报服务,该应用能展示当前及接下来几天的天气情况,包括温度、湿度、风向和降水情况。此外,它还具备通过SMS短信查询天气...
在一个循环中,遍历所有窗口,检查每个窗口是否是托盘图标,如果是,则获取其进程ID、标题和其他相关信息。所有这些信息可以存储在一个自定义的类中,如`TrayIconInfo`,并添加到一个列表中。 6. **输出结果** ...
在本文中,我们将深入探讨如何使用Microsoft Visual C++ 6.0(简称VC6.0)来实现一个读取网页天气预报的示例程序。这个DEMO程序将演示如何通过网络编程技术,从指定的网页抓取实时天气信息。在这个过程中,我们将...
一个简单的天气预报应用可能包含TextView显示城市名、温度、天气状况等信息,ImageView展示天气图标,可能还会有一个Spinner控件供用户选择城市。Android的Material Design指南提供了良好的设计原则和组件库。 4. *...
SNMP(Simple Network Management Protocol,简单网络管理协议)是一种广泛应用于网络设备管理的协议,它允许...在实际应用中,还需要注意安全问题,如使用安全的SNMP版本和加密通信,以防止未经授权的访问和数据泄露。
在Android Studio中实现一个天气预报小程序,涉及到许多关键的Android开发技术。首先,我们需要了解Android Studio作为集成开发环境(IDE)的基本使用,包括项目创建、布局设计、代码编写以及调试等流程。 1. **...
在本文中,我们将深入探讨如何使用C++编程语言来实现一个查询天气预报的程序。这个程序可以在Microsoft Visual Studio 2019(VS 2019)开发环境中运行,并利用了JsonCpp库处理JSON数据,sqlite数据库进行本地存储,...
在Android应用开发中,有时我们需要将一些系统配置信息存储在外部文件中,以方便管理和更新。在这种情况下,`ini`文件格式是一个常见的选择,因为它的结构简单,易于读写。本文将详细介绍如何在Android项目中读取...