`
boy_program
  • 浏览: 11164 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

今天在项目中需要获取天气信息,就先写一个,后面还会再完善

 
阅读更多
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中基于心知天气API获取天气信息

    Android中基于心知天气获取天气信息JSONJSON简介JSON对象JSON数组JSON解析Android中获取天气获取天气的流程获取心知天气的API key获取心知天气的API代码部分实现的效果如下进阶-获取任意城市的天气信息 为什么要写这...

    onvif 获取天气信息

    然而,在这个特定的场景下,ONVIF似乎被用作一个工具或者一种方式来获取天气预报信息,这可能意味着开发者通过与支持ONVIF的设备交互,获取到了与天气相关的数据。 描述中提到,这段代码是从某个博客中参考而来的,...

    QT 获取天气例子

    本示例是关于使用QT获取天气信息的一个实例,通过这个例子,我们可以学习到如何利用QT进行网络请求、数据解析以及界面展示等核心技能。 首先,`cityid.txt`文件很可能包含了一系列城市的ID,这些ID通常用于调用天气...

    asp.net调用百度天气ApI获取天气

    在上述代码中,我们创建了一个`WeatherService`类,其中`GetWeatherAsync`方法用于获取指定城市的天气信息。我们使用HttpClient发送GET请求到API地址,并附带必要的参数(城市名和API密钥)。成功获取到响应后,我们...

    一个使用和风天气API获取天气信息并通过SMTP发送到邮箱的python小项目[参赛项目].zip

    一个使用和风天气API获取天气信息并通过SMTP发送到邮箱的python小项目[参赛项目]

    vue获取当前IP所在地天气.docx

    - 示例中提到的天气API地址可能不完整,通常天气API会提供一个查询接口,接受城市名称作为参数,返回当前天气、温度、日期等信息。 - 调用天气API后,解析返回的JSON数据,将天气信息更新到Vue实例的data中,例如`...

    一个使用和风天气API获取天气信息并通过SMTP发送到邮箱的python小项目[参赛项目]_hy5.zip

    一个使用和风天气API获取天气信息并通过SMTP发送到邮箱的python小项目[参赛项目]_hy5

    调用阿里云获取城市天气接口

    在压缩包文件“HuoQuTianqi”中,可能包含了一个简单的C#项目示例,演示了如何使用HttpClient发送请求并解析返回的天气数据。这个示例对于初学者来说非常有帮助,因为它展示了从头开始构建API调用的完整流程。通过...

    vb获取网页天气预报

    在VB(Visual Basic)编程环境中,获取网页天气预报是一项常见...在实际项目中,可能还需要考虑数据缓存、定时更新、多线程处理等问题,以提高用户体验和性能。记得在使用第三方服务时遵守其使用条款,避免侵权或滥用。

    Android定位获取天气的小程序

    在Android平台上,开发一个能够获取并显示天气信息的小程序是一个常见的需求。这个小程序的核心功能包括定位用户的位置(通过经纬度)、使用百度API获取城市信息、通过HTTP请求抓取天气JSON数据,以及解析和展示这些...

    QT 获取USB信息

    在项目中,`UsbInfo.sln`是一个Visual Studio解决方案文件,它包含了编译和运行项目的配置信息。打开这个文件,我们可以看到QT工程的结构和源代码。通常,一个QT项目会包含`.pro`文件,用于定义项目属性,如使用的QT...

    用C#写的winform调用webservice天气预报小软件教程

    在本教程中,我们将学习如何使用C#语言在WinForm中调用WebService来实现一个天气预报小软件。这个小软件可以根据城市名称获取天气信息,并将其显示在WinForm窗体上。 C#语言基础 在开始学习本教程之前,需要具备...

    android 获取json 简单的天气预报

    在Android开发中,获取JSON数据并解析以展示简单的天气预报是一项常见的任务。JSON(JavaScript Object Notation)是一种轻量级...通过理解并实践这些步骤,开发者能够创建一个能获取并展示天气预报信息的Android应用。

    android天气预报项目报告

    该项目是一个Android应用程序,旨在为用户提供实时和未来的天气信息。通过集成Google的天气预报服务,该应用能展示当前及接下来几天的天气情况,包括温度、湿度、风向和降水情况。此外,它还具备通过SMS短信查询天气...

    C#获取系统托盘信息

    在一个循环中,遍历所有窗口,检查每个窗口是否是托盘图标,如果是,则获取其进程ID、标题和其他相关信息。所有这些信息可以存储在一个自定义的类中,如`TrayIconInfo`,并添加到一个列表中。 6. **输出结果** ...

    天气预报源码、包括从IP获取天气预报(C#)

    这是一个基于C#编程语言开发的天气预报应用源码,它具备从IP地址获取实时天气信息的功能。这个项目可能对学习C#编程、网络编程以及如何与API交互的开发者特别有帮助。下面我们将深入探讨其中涉及的关键知识点。 1. ...

    利用snmp协议获取机器设备信息 代码

    SNMP(Simple Network Management Protocol,简单网络管理协议)是一种广泛应用于网络设备管理的协议,它允许...在实际应用中,还需要注意安全问题,如使用安全的SNMP版本和加密通信,以防止未经授权的访问和数据泄露。

    vc获取系统硬件信息

    为了获取内存信息,除了上面提到的SYSTEM_INFO结构中的`sysInfo.lpMinimumApplicationAddress`和`sysInfo.lpMaximumApplicationAddress`可以提供内存范围之外,还可以使用GlobalMemoryStatusEx函数,它返回一个...

    DELPHI获取电脑硬件信息

    `demo.dpr`是项目入口点,`demo.exe`是最终的可执行程序,`huasoft111_HardwareInfo.gif`可能是一个示例图解,显示了硬件信息获取的结果。 7. **第三方库**: 除了使用Windows API和WMI,还可以使用第三方库,如Jedi...

    Android Studio实现天气预报小程序

    在Android Studio中实现一个天气预报小程序,涉及到许多关键的Android开发技术。首先,我们需要了解Android Studio作为集成开发环境(IDE)的基本使用,包括项目创建、布局设计、代码编写以及调试等流程。 1. **...

Global site tag (gtag.js) - Google Analytics