`
酷的飞上天空
  • 浏览: 521794 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

基于google的weatherAPI的天气预报

阅读更多

一般获取天气预报信息的方式有两种

1,调用第三方的api,获取需要信息

2,抓取网页内容,通过正则表达式匹配获得需要信息

 

当然你也可以直接找中央气象局的相关单位,从他们那里直接取得数据。

 

这里以Google的api为例,之所以没用雅虎的api是因为它的中国城市太少了,至少我在的无锡都没有

 

http://www.google.com/ig/api?hl=zh_CN&weather=wuhan 打开这个网址可以看到Google的返回结果

 

思路:

1,请求api地址,获取结果

2,将结果转换为dom文档

3,从dom文档中提取信息

 

一下为实现代码

require "net/http"
require "uri"
require "rexml/document"
require "iconv"
class Weather
  WEATHER_URI = "http://www.google.com/ig/api?hl=en&weather=%city%"
#  WEATHER_URI = "http://www.google.com/ig/api?hl=zh_CN&weather=%city%" # 包含中文的xml会解析失败,不知道为什么?
  def initialize(city="beijing")
    @city = city.strip
  end

  #取得天气预报结果,一个包含4个hash对象的数组
  def weather_data
    xml = xml_document
    data = []
    xml.root.get_elements("/xml_api_reply/weather/forecast_conditions").each do |element|
      data << parse_element(element)
    end
    data
  end
  #解析xml文档单个元素,返回一个hash对象
  def parse_element(element)
    ha = {}

    low_element = element.get_elements("low")[0]
    high_element = low_element.next_element
    icon_element = high_element.next_element
    condition_element =  icon_element.next_element

    ha[:low] = to_c(low_element.attributes["data"].to_i)
    ha[:high]= to_c(high_element.attributes["data"].to_i)
    ha[:icon]= icon_element.attributes["data"]
    ha[:conditon] = condition_element.attributes["data"]
    ha
  end
  # 转换到摄氏度
  def to_c(f)
    (f - 32) * 5 / 9+1
  end
  #取得返回的xml文档
  def xml_document
    uri = WEATHER_URI.gsub(/%city%/,@city)
    res = Net::HTTP.get_response(URI.parse(uri)).body
    REXML::Document.new(res)
  end

  #类方法,方面调用,也算是入口
  def self.get_weather(city=nil)
    if city
      self.new(city.strip).weather_data
    else
      self.new("beijing").weather_data 
    end
  end
end

# ==================以下为在命令行输出之用===============
def day(num)
  case num
  when 0
    "今日"
  when 1
    "明日"
  when 2
    "后天"
  when 3
    "大后天"
  else
    raise ""
  end
end
i = 0
we = Weather.get_weather ARGV[0].strip
we.each do |w|
  s = "#{day(i)},最高温度:#{w[:high]},最低温度:#{w[:low]},天气:#{w[:conditon]}"
  s = Iconv.iconv("GB2312", "UTF-8", s) #在win命令行下显示中文
  puts s
  i+=1
end

 

测试

D:\myruby\study\RubyStudy\lib>ruby Weather.rb wuhan
今日,最高温度:29,最低温度:21,天气:Thunderstorm
明日,最高温度:27,最低温度:24,天气:Chance of Storm
后天,最高温度:29,最低温度:23,天气:Rain
大后天,最高温度:28,最低温度:23,天气:Thunderstorm

D:\myruby\study\RubyStudy\lib>ruby Weather.rb beijing
今日,最高温度:29,最低温度:21,天气:Chance of Rain
明日,最高温度:29,最低温度:21,天气:Chance of Rain
后天,最高温度:31,最低温度:22,天气:Chance of Rain
大后天,最高温度:36,最低温度:21,天气:Chance of Rain

 

两个缺陷

1,天气状况还未中文化,这属于我的原因,未进行中文化处理

2,Google的api貌似也不可靠,比如查询wuxi,有时就会显示没有相关信息。

 

分享到:
评论

相关推荐

    基于Android开发的天气预报app.zip

    【压缩包子文件的文件名称列表】虽然只有一个条目"基于Android开发的天气预报app",但可以推测这个压缩包内包含了上述的所有文件,如源代码文件夹(可能命名为"app")、APK安装文件(可能命名为"WeatherApp.apk")、...

    android 天气预报 google api 完整源代码

    在这个场景中,我们关注的是一个基于Google API的Android天气预报应用的完整源代码。这个应用可能利用了Google提供的地理定位服务以及天气信息查询接口,为用户提供本地或指定位置的天气情况。 首先,Google提供了...

    基于Android平台的天气预报短信服务系统-课程设计.docx

    ### 基于Android平台的天气预报短信服务系统知识点解析 #### 一、项目概述 本项目是一款基于Android平台的天气预报短信服务系统,旨在通过移动设备为用户提供天气预报信息。该系统不仅能够显示实时天气状况,还...

    天气预报.zip

    【标签】"android studio" 显示此项目是基于Google的Android Studio开发的,这是一个流行的Android应用集成开发环境(IDE)。它包含了所有必要的工具,如代码编辑器、版本控制、构建系统以及调试器,用于构建高质量...

    AndroidStudio实现天气预报小程序源码

    【Android Studio实现天气预报小程序源码详解】 在移动开发领域,Android Studio是Google推出的一款强大的集成开发环境(IDE),专为Android应用开发设计。利用Android Studio,开发者可以高效地构建高质量、高性能...

    android版本的天气预报

    本文将深入探讨基于"android版本的天气预报"这个项目所涉及的关键知识点。 首先,我们要关注的是如何获取并展示天气信息。在这个项目中,开发者利用了Google Weather API来获取实时和预测的天气数据。Google ...

    使用Java获取Google的简单天气预报,内有详细代码.

    ### 使用Java获取Google的简单天气预报 #### 概述 本文档将介绍如何使用Java语言来获取Google提供的简单天气预报信息。尽管Google官方已不再直接提供公开的天气API服务,但可以通过第三方API或其他方式间接获取到...

    一个基于Android studio开发的简易天气预报APP源码

    这个开源项目是一个基于Android Studio开发的简易天气预报应用程序。它为用户提供本地城市的实时天气信息,可能包括温度、湿度、风速、空气质量等关键指标。在深入探讨其技术细节之前,让我们先了解一下Android ...

    android 天气预报 源码

    本文将深入探讨一个基于Android的天气预报源码,帮助开发者了解如何实现这样一个功能丰富的应用。 1. **数据获取** - 天气预报应用的核心是获取准确的气象数据。通常,这涉及到与气象API(如OpenWeatherMap、...

    android-Weather.rar_android_android weather_weather_天气定位信息_天气预报

    以下是对标题"android-Weather.rar_android_android weather_weather_天气定位信息_天气预报"及描述中涉及的知识点的详细说明: 1. **Android SDK**: 这个应用是基于Android操作系统开发的,因此需要熟悉Android ...

    google天气预报

    这个项目,名为"google天气预报",显然基于Android平台,利用Google的开放API来获取并显示天气数据。下面我们将深入探讨如何在Android应用中实现这一功能。 首先,我们需要了解Google提供的天气API。Google的天气...

    简单天气预报demo

    这个“简单天气预报demo”是一个基于Android平台的示例应用,旨在展示如何实现一个基本的天气预报功能。这个应用允许用户切换不同的城市,查看对应城市的实时天气信息。通过解压后的文件名“MyWeather”,我们可以...

    天气预报程序 全部代码

    【标题】"天气预报程序 全部代码"指的是一个完整的Android应用程序项目,专注于提供天气预报功能。这个程序可能包括了用户界面设计、数据获取、解析和展示天气信息等多个关键部分。 【描述】中的"android 天气预报...

    Android WeatherForecast天气预报例子源代码

    Android天气预报程序源代码,获取的Google的天气API数据,自己可再次扩展,这里运行截图比较难抓,有环境的就下载源码测试吧,Android天气预报WeatherForecast似乎是常见而又简单的Android初级例子,但想开发出一款...

    天气预报APP

    本文将深入探讨基于Eclipse开发的“天气预报APP”所涉及的关键技术点。 1. **用户界面(UI)设计**: - 使用Android Studio或Eclipse IDE进行界面布局设计,创建XML文件来定义各个视图组件,如EditText(用户登录...

    安卓天气预报

    综上所述,"安卓天气预报"是基于Android平台开发的一款实用天气应用,它充分利用了Android系统的API功能,结合现代UI设计,为用户提供准确、便捷的天气信息服务。无论对于开发者还是用户,都是值得尝试的优秀应用。

    基于云计算的天气预报系统实现.doc

    【基于云计算的天气预报系统实现】的文档主要探讨了如何利用云计算技术构建一个天气预报系统,结合了GoogleMap作为信息集成的平台,并涉及到区块链技术在其中可能的应用。以下是该系统的详细解析: 1. **云计算的...

Global site tag (gtag.js) - Google Analytics