python 實現天氣預報功能


中國國家氣象局提供了獲取所在城市天氣預報信息的接口。通過這個接口,我們就可以獲取天氣信息了。

中國國家氣象局天氣預報接口總共提供了三個:



http://www.weather.com.cn/data/sk/101010100.html


http://www.weather.com.cn/data/cityinfo/101010100.html

http://m.weather.com.cn/data/101010100.html


其中,最詳細的信息來自第三個接口。上面url中的101010100是城市代碼,這裏是北京的城市代碼。只需要改變城市代碼,就可以得到所在城市的天氣信息。


如,武漢的城市代碼是101200101,所以所需要的url應該爲 http://m.weather.com.cn/data/101200101.html,從而就可以讀到天氣的信息。


天氣信息的數據結構是json,數據如下:

{"weatherinfo":{"city":"武漢","city_en":"wuhan","date_y":"2012年7月2日","date":"","week":"星期一","fchh":"11","cityid":"101200101","temp1":"35℃~27℃","temp2":"34℃~27℃","temp3":"34℃~27℃","temp4":"35℃~27℃","temp5":"35℃~27℃","temp6":"35℃~28℃","tempF1":"95℉~80.6℉","tempF2":"93.2℉~80.6℉","tempF3":"93.2℉~80.6℉","tempF4":"95℉~80.6℉","tempF5":"95℉~80.6℉","tempF6":"95℉~82.4℉","weather1":"多雲","weather2":"多雲","weather3":"多雲","weather4":"多雲","weather5":"多雲","weather6":"多雲","img1":"1","img2":"99","img3":"1","img4":"99","img5":"1","img6":"99","img7":"1","img8":"99","img9":"1","img10":"99","img11":"1","img12":"99","img_single":"1","img_title1":"多雲","img_title2":"多雲","img_title3":"多雲","img_title4":"多雲","img_title5":"多雲","img_title6":"多雲","img_title7":"多雲","img_title8":"多雲","img_title9":"多雲","img_title10":"多雲","img_title11":"多雲","img_title12":"多雲","img_title_single":"多雲","wind1":"微風","wind2":"微風","wind3":"微風","wind4":"微風","wind5":"微風","wind6":"微風","fx1":"微風","fx2":"微風","fl1":"小於3級","fl2":"小於3級","fl3":"小於3級","fl4":"小於3級","fl5":"小於3級","fl6":"小於3級","index":"炎熱","index_d":"天氣炎熱,建議着短衫、短裙、短褲、薄型T恤衫、敞領短袖棉衫等清涼夏季服裝。","index48":"炎熱","index48_d":"天氣炎熱,建議着短衫、短裙、短褲、薄型T恤衫、敞領短袖棉衫等清涼夏季服裝。","index_uv":"中等","index48_uv":"中等","index_xc":"適宜","index_tr":"一般","index_co":"很不舒適","st1":"35","st2":"28","st3":"35","st4":"28","st5":"35","st6":"26","index_cl":"較適宜","index_ls":"適宜","index_ag":"不易發"}}


天氣信息解釋爲:

  1. {  
  2.     "weatherinfo":{  
  3.         <!-- 基本信息 -->  
  4.         "city":"福州",  
  5.         "city_en":"fuzhou",  
  6.         "date_y":"2012年5月14日",  
  7.         "date":"",  
  8.         "week":"星期一",  
  9.         "fchh":"08",  
  10.         "cityid":"101230101",  
  11.         <!-- 從今天開始到第六天的每天的天氣情況,這裏的溫度是攝氏溫度 -->  
  12.         "temp1":"29℃~23℃","temp2":"26℃~20℃","temp3":"24℃~20℃","temp4":"25℃~20℃","temp5":"24℃~21℃","temp6":"25℃~22℃",  
  13.         <!-- 從今天開始到第六天的每天的天氣情況,這裏的溫度是華氏溫度 -->  
  14.         "tempF1":"84.2℉~73.4℉","tempF2":"78.8℉~68℉","tempF3":"75.2℉~68℉","tempF4":"77℉~68℉","tempF5":"75.2℉~69.8℉","tempF6":"77℉~71.6℉",  
  15.         <!-- 天氣描述 -->  
  16.         "weather1":"陣雨轉中雨","weather2":"中雨轉小雨","weather3":"小雨","weather4":"小雨","weather5":"小雨轉陣雨","weather6":"陣雨轉小雨",  
  17.         <!-- 天氣描述圖片序號 -->  
  18.         "img1":"3","img2":"8","img3":"8","img4":"7","img5":"7","img6":"99","img7":"7","img8":"99","img9":"7","img10":"3","img11":"3","img12":"7","img_single":"3",  
  19.         <!-- 圖片名稱 -->  
  20.         "img_title1":"陣雨","img_title2":"中雨","img_title3":"中雨","img_title4":"小雨","img_title5":"小雨","img_title6":"小雨","img_title7":"小雨","img_title8":"小雨","img_title9":"小雨","img_title10":"陣雨","img_title11":"陣雨","img_title12":"小雨","img_title_single":"陣雨",  
  21.         <!-- 風速描述 -->  
  22.         "wind1":"微風","wind2":"微風","wind3":"微風","wind4":"微風","wind5":"微風","wind6":"微風","fx1":"微風","fx2":"微風",  
  23.         <!-- 風速級別描述 -->  
  24.         "fl1":"小於3級","fl2":"小於3級","fl3":"小於3級","fl4":"小於3級","fl5":"小於3級","fl6":"小於3級",  
  25.         <!-- 今天穿衣指數 -->  
  26.         "index":"熱",  
  27.         "index_d":"天氣較熱,建議着短裙、短褲、短套裝、T恤等夏季服裝。年老體弱者宜着長袖襯衫和單褲。",  
  28.         <!-- 48小時穿衣指數 -->  
  29.         "index48":"暖","index48_d":"較涼爽,建議着長袖襯衫加單褲等春秋過渡裝。年老體弱者宜着針織長袖襯衫、馬甲和長褲。",  
  30.         <!-- 紫外線及48小時紫外線 -->  
  31.         "index_uv":"弱","index48_uv":"最弱",  
  32.         <!-- 洗車 -->  
  33.         "index_xc":"不宜",  
  34.         <!-- 旅遊 -->  
  35.         "index_tr":"適宜",、  
  36.         <!-- 舒適指數 -->  
  37.         "index_co":"較不舒適",  
  38.         "st1":"27","st2":"21","st3":"24","st4":"18","st5":"22","st6":"18",  
  39.         <!-- 晨練 -->  
  40.         "index_cl":"較不宜",  
  41.         <!-- 晾曬 -->  
  42.         "index_ls":"不太適宜",  
  43.         <!-- 過敏 -->  
  44.         "index_ag":"不易發"  
  45.     }  


具體的json數據結構的知識,我們下一篇文章介紹。


現在我們需要知道的是:json的數據結構和python中的字典很相似。


那麼接下來的工作就是,如何用python去解析json數據結構中的信息。


實際上JSON就是Python字典的字符串表示,但是字典作爲一個複雜對象是無法直接轉換成定義它的代碼的字符串(不能傳遞所以需要將其轉換成字符串先),Python有一個叫simplejson的庫可以方便的完成JSON的生成和解析,這個包已經包含在Python2.6中,就叫json 主要包含四個方法: dump和dumps(從Python生成JSON),load和loads(解析JSON成Python的數據類型)

dump和dumps的唯一區別是dump會生成一個類文件對象,dumps會生成字符串,同理load和loads分別解析類文件對象和字符串格式的JSON。


還有一點疑惑就是關於字符編碼的,有待繼續研究


發佈了35 篇原創文章 · 獲贊 15 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章