一般獲取天氣預報資訊的方式有兩種
1,呼叫第三方的api,獲取需要資訊
2,抓取網頁內容,通過正規表示式匹配獲得需要資訊
當然你也可以直接找**氣象局的相關單位,從他們那裡直接取得資料。
這裡以google的api為例,之所以沒用雅虎的api是因為它的中國城市太少了,至少我在的無錫都沒有
開啟這個**可以看到google的返回結果
思路:1,請求api位址,獲取結果
2,將結果轉換為dom文件
3,從dom文件中提取資訊
一下為實現**
# weather_uri = "" # 包含中文的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)
enddata
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"]
haend
# 轉換到攝氏度
def to_c(f)
(f - 32) * 5 / 9+1
end#取得返回的xml文件
end#類方法,方面呼叫,也算是入口
def self.get_weather(city=nil)
if city
self.new(city.strip).weather_data
else
self.new("beijing").weather_data
endend
end# ***************===以下為在命令列輸出之用***************
def day(num)
case num
when 0
"今日"
when 1
"明日"
when 2
"後天"
when 3
"大後天"
else
raise ""
endendi = 0
we = weather.get_weather argv[0].strip
we.each do |w|
s = "#,最高溫度:#,最低溫度:#,天氣:#"
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,有時就會顯示沒有相關資訊。
基於JQUERY製作的仿GOOGLE自動完成外掛程式
資料採用json,格式為,js fn.autocomplete function url,option extend doption,option varilengthlower doption.ilengthlower varilengthupper doption.ilengthupper va...
開發基於Google街景服務應用程式
開發街景服務的思路很簡單,只須將包含經緯度資訊的intent 意圖 呼叫內建的com.google.android.street應用程式即可。街景資料格式為 google.streetview.cbll latitude,longitude 應用程式介面如下 查詢按鈕click 如下 btn.set...
基於使用者反應,Google調整GAE價格條款
google gae最近的 提公升,讓開發人員感到訝異。針對此種狀況,google做出反應,對 計畫做出一系列調整,最重要的是 新的收費方式會推遲到11月1日執行,而且每天免費的例項小時數從24增加到28。google曾經宣布 gae將會結束為期3年的預覽階段,在五月的2011 io大會上進入正常運...