一般获取天气预报信息的方式有两种
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",但可以推测这个压缩包内包含了上述的所有文件,如源代码文件夹(可能命名为"app")、APK安装文件(可能命名为"WeatherApp.apk")、...
在这个场景中,我们关注的是一个基于Google API的Android天气预报应用的完整源代码。这个应用可能利用了Google提供的地理定位服务以及天气信息查询接口,为用户提供本地或指定位置的天气情况。 首先,Google提供了...
### 基于Android平台的天气预报短信服务系统知识点解析 #### 一、项目概述 本项目是一款基于Android平台的天气预报短信服务系统,旨在通过移动设备为用户提供天气预报信息。该系统不仅能够显示实时天气状况,还...
【标签】"android studio" 显示此项目是基于Google的Android Studio开发的,这是一个流行的Android应用集成开发环境(IDE)。它包含了所有必要的工具,如代码编辑器、版本控制、构建系统以及调试器,用于构建高质量...
【Android Studio实现天气预报小程序源码详解】 在移动开发领域,Android Studio是Google推出的一款强大的集成开发环境(IDE),专为Android应用开发设计。利用Android Studio,开发者可以高效地构建高质量、高性能...
本文将深入探讨基于"android版本的天气预报"这个项目所涉及的关键知识点。 首先,我们要关注的是如何获取并展示天气信息。在这个项目中,开发者利用了Google Weather API来获取实时和预测的天气数据。Google ...
### 使用Java获取Google的简单天气预报 #### 概述 本文档将介绍如何使用Java语言来获取Google提供的简单天气预报信息。尽管Google官方已不再直接提供公开的天气API服务,但可以通过第三方API或其他方式间接获取到...
这个开源项目是一个基于Android Studio开发的简易天气预报应用程序。它为用户提供本地城市的实时天气信息,可能包括温度、湿度、风速、空气质量等关键指标。在深入探讨其技术细节之前,让我们先了解一下Android ...
本文将深入探讨一个基于Android的天气预报源码,帮助开发者了解如何实现这样一个功能丰富的应用。 1. **数据获取** - 天气预报应用的核心是获取准确的气象数据。通常,这涉及到与气象API(如OpenWeatherMap、...
以下是对标题"android-Weather.rar_android_android weather_weather_天气定位信息_天气预报"及描述中涉及的知识点的详细说明: 1. **Android SDK**: 这个应用是基于Android操作系统开发的,因此需要熟悉Android ...
这个项目,名为"google天气预报",显然基于Android平台,利用Google的开放API来获取并显示天气数据。下面我们将深入探讨如何在Android应用中实现这一功能。 首先,我们需要了解Google提供的天气API。Google的天气...
这个“简单天气预报demo”是一个基于Android平台的示例应用,旨在展示如何实现一个基本的天气预报功能。这个应用允许用户切换不同的城市,查看对应城市的实时天气信息。通过解压后的文件名“MyWeather”,我们可以...
【标题】"天气预报程序 全部代码"指的是一个完整的Android应用程序项目,专注于提供天气预报功能。这个程序可能包括了用户界面设计、数据获取、解析和展示天气信息等多个关键部分。 【描述】中的"android 天气预报...
Android天气预报程序源代码,获取的Google的天气API数据,自己可再次扩展,这里运行截图比较难抓,有环境的就下载源码测试吧,Android天气预报WeatherForecast似乎是常见而又简单的Android初级例子,但想开发出一款...
本文将深入探讨基于Eclipse开发的“天气预报APP”所涉及的关键技术点。 1. **用户界面(UI)设计**: - 使用Android Studio或Eclipse IDE进行界面布局设计,创建XML文件来定义各个视图组件,如EditText(用户登录...
综上所述,"安卓天气预报"是基于Android平台开发的一款实用天气应用,它充分利用了Android系统的API功能,结合现代UI设计,为用户提供准确、便捷的天气信息服务。无论对于开发者还是用户,都是值得尝试的优秀应用。
【基于云计算的天气预报系统实现】的文档主要探讨了如何利用云计算技术构建一个天气预报系统,结合了GoogleMap作为信息集成的平台,并涉及到区块链技术在其中可能的应用。以下是该系统的详细解析: 1. **云计算的...