1. 程式人生 > >常用天氣預報API介面整理(轉)

常用天氣預報API介面整理(轉)

文章轉自:http://www.nohacks.cn/post-35.html

自序:

由nohacks.cn 收集整理,來源於網路,版權歸原作者所有,基本收集了網路上能使用的大部分天氣API介面,作者水平精力有限,難免有遺漏或錯誤的地方,歡迎反饋,作者網站:http://nohacks.cn

更新記錄:

         2015.3.2    更新雲聚,增加天氣網介面。

         2015.2.28  增加百度天氣圖片,感謝網友彬子的反饋。

         2015. 2.19 增加百度天氣介面,更新中國天氣網API。

目錄:

1.  中國天氣網

     1.1  實時天氣 API 介面(失效)

     1.2  當天天氣 API介面(失效)

     1.3 生活指數 API介面(失效)

1.4 未來五天天氣 API 介面(有效,不穩定)

2.   開放資料網天氣

      2.1 簡介

      2.2. 一天天氣 API 介面

      2.3 未來五天天氣 API 介面
      

3.   中國天氣&開放資料 綜合版

    3.1  實時天氣

   3.2  當天天氣

   3.3 未來五天

   3.4 生活指數

4.  隨身雲天氣API (推薦)

    4.1 簡介

    4.1  簡化版 未來6天天氣 API介面

     4.2   詳細版 未來6天 天氣API介面

5. 新浪天氣(推薦

     5. 1  簡介

     5.2   使用方法

     5.3   天氣標誌

6. 微雲

7. 百度 API

   7.1 獲取天氣

   7.2 獲取城市列表

8. 天氣網 (網頁外掛型)

      8.1  簡介

      8.2 智慧未來五天天氣

 前言:

 1. 城市程式碼

現在網路上流傳的天氣API實際上大多最終呼叫的是中國天氣網的資料,而中國天氣網是把每個地方分配了一個程式碼,這個程式碼就是城市程式碼,要獲取天氣,我們需要知道城市程式碼,有2種方法:

   1.1 手動查詢  

       在搜尋框上輸入你要需要獲得天氣的城市,點選查詢,即可在位址列獲得相應城市編號,示範:北京的地方程式碼:101010100

   1.2 自動查詢

         1.2.1  通過百度API

            注意:  "%e5%8c%97%e4%ba%ac"是"北京"的URL編碼(UniCode)

 返回格式(UniCode):

{
    "errNum": 0,
    "retMsg": "success",
    "retData": {
        "cityName": "北京",
        "provinceName": "北京",
        "cityCode": "101010100",
        "zipCode": "100000",
        "telAreaCode": "010"
    }
 }

 很明顯,cityCode的值 "101010100"就是城市程式碼。

2. 天氣標誌圖片

    網路上流傳的一些很好用的免費API卻沒有提供天氣標誌圖片,對有此需求的人裡說,不得不說是個遺憾,為了彌補這個遺憾,不得不借助第三方平臺配合使用,目前作者使用的是新浪天氣平臺的資料:

 把天氣API獲取到的天氣標誌轉換為拼音,比如“多雲”,轉換為拼音“duoyun“,然後根據下面的規則轉換為圖片地址:

2.1 新浪圖片

小圖(78*78):  

大圖180*180

 2.2 百度天氣圖片

   目前知道的小圖,感謝網友彬子的反饋

                    

     多雲(白天)          多雲(夜間)

第一節: 中國天氣網

1.1 簡介

中國最權威的天氣預報網路平臺,很多平臺實際上也是用的他們的資料。

官方網站:http://www.weather.com.cn

1.2  地方程式碼獲取方法

        前文已經提過

1.3  實時天氣介面


         介面示例:  http://www.weather.com.cn/data/sk/101010100.html  失效

     返回格式:

    {"weatherinfo":{"city":"北京","cityid":"101010100","temp":"23","WD":"東風","WS":"2級","SD":"92%","WSE":"2","time":"09:55","isRadar":"1","Radar":"JC_RADAR_AZ9010_JB"}}

      說明:其中 city 是地方名稱,cityid是地方程式碼,temp是當前溫度,"WD"是風向,“WS"是風速”,“SD"是溼度,time是更新時間。

    1.4 獲取當天天氣:

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

   返回格式:

      weatherinfo":{"city":"北京","cityid":"101010100","temp1":"29℃","temp2":"24℃","weather":"陰轉晴","img1":"d2.gif","img2":"n0.gif","ptime":"08:00"}}

       注意:其中 img1和img2是天氣標誌圖片,介面格式如下:

          這個圖就是天氣現象0(晴)的圖片,其他天氣現象的圖片依此類推。c打頭的圖片是20*20畫素的,b打頭的是50*46畫素的,d打頭的是反白的圖示,  29*20畫素,n打頭的是夜間反白圖示,29*20畫素,注意這裡的檔名是兩位數字!

  1.5  生活指數:

        http://www.weather.com.cn/data/zs/101010100.html  失效

      返回格式: 文字較多,這裡省略,請點選訪問。

   1.6 獲取未來幾天天氣(有效,不保證穩定)

   圖片路徑:

    替換方法同上

返回示例:

{"weatherinfo":{"city":"北京","city_en":"beijing","date_y":"2015年2月19日","date":"","week":"星期四","fchh":"18","cityid":"101010100","temp1":"-2℃~4℃","temp2":"-1℃~8℃","temp3":"-3℃~5℃","temp4":"-4℃~6℃","temp5":"-3℃~7℃","temp6":"-1℃~6℃","tempF1":"28.4℉~39.2℉","tempF2":"30.2℉~46.4℉","tempF3":"26.6℉~41℉","tempF4":"24.8℉~42.8℉","tempF5":"26.6℉~44.6℉","tempF6":"30.2℉~42.8℉","weather1":"小雪轉雨夾雪","weather2":"小雪轉陰","weather3":"晴","weather4":"晴","weather5":"晴","weather6":"陰","img1":"14","img2":"6","img3":"14","img4":"2","img5":"0","img6":"99","img7":"0","img8":"99","img9":"0","img10":"99","img11":"2","img12":"99","img_single":"6","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":"微風轉北風4-5級","wind3":"北風4-5級轉3-4級","wind4":"北風3-4級轉微風","wind5":"微風","wind6":"微風轉北風3-4級","fx1":"微風","fx2":"微風","fl1":"小於3級","fl2":"小於3級轉4-5級","fl3":"4-5級轉3-4級","fl4":"3-4級轉小於3級","fl5":"小於3級","fl6":"小於3級轉3-4級","index":"冷","index_d":"天氣冷,建議著棉服、羽絨服、皮夾克加羊毛衫等冬季服裝。年老體弱者宜著厚棉衣、冬大衣或厚羽絨服。","index48":"","index48_d":"","index_uv":"最弱","index48_uv":"","index_xc":"不宜","index_tr":"適宜","index_co":"較不舒適","st1":"4","st2":"-4","st3":"8","st4":"-2","st5":"5","st6":"-3","index_cl":"較不宜","index_ls":"不宜","index_ag":"極不易發"}}

2. 開放資料 - k780資料

    2.1 簡介

       說明: 資料來自國家氣象局天氣網,每小時更新一次    

       免費版有每小時點選次數的限制(免費版最多每小時720次查詢)

     2.2   獲取今日天氣

返回例項:

 <?xml version="1.0" encoding="utf-8" ?>

- <root>   <success>1</success> - <result>   <weaid>1</weaid>   <days>2014-07-30</days>   <week>星期三</week>   <cityno>beijing</cityno>   <citynm>北京</citynm>   <cityid>101010100</cityid>   <temperature>29℃/24℃</temperature>   <humidity>84.2℉/75.2℉</humidity>   <weather>陰轉晴</weather>   <weather_icon>http://api.k780.com:88/upload/weather/d/2.gif</weather_icon>   <weather_icon1>http://api.k780.com:88/upload/weather/d/0.gif</weather_icon1>   <wind>微風</wind>   <winp>小於3級</winp>   <temp_high>29</temp_high>   <temp_low>24</temp_low>   <humi_high>84.2</humi_high>   <humi_low>75.2</humi_low>   <weatid>3</weatid>   <weatid1>1</weatid1>   <windid>1</windid>   <winpid>2</winpid>   </result>   </root>

         引數說明:其中 ,wedid 是城市氣象編號,與中國天氣網編號一致,key和sign是身份驗證,註冊一個可以換成自己的,上例中的10003是公眾帳號,formt是返回格式,支援 json,xml,除了formt不是必須的以外,其他引數都是必須提供的。

  比如 我想獲得深圳的今日資料:

  第一步: 首先查詢深圳的城市程式碼

   經查詢,深圳的地方程式碼是 101280601

 第二步: 通過地方程式碼獲取今日天氣

          深圳的今天天氣資料就是:

  2.3  獲取未來五天

      請求示例(Xml)

 返回示例:

 <?xml version="1.0" encoding="utf-8" ?>

- <root>   <success>1</success> - <result> - <item_0>   <weaid>1</weaid>   <days>2014-07-30</days>   <week>星期三</week>   <cityno>beijing</cityno>   <citynm>北京</citynm>   <cityid>101010100</cityid>   <temperature>29℃/24℃</temperature>   <humidity>84.2℉/75.2℉</humidity>   <weather>陰轉晴</weather>   <weather_icon>http://api.k780.com:88/upload/weather/d/2.gif</weather_icon>   <weather_icon1>http://api.k780.com:88/upload/weather/d/0.gif</weather_icon1>   <wind>微風</wind>   <winp>小於3級</winp>   <temp_high>29</temp_high>   <temp_low>24</temp_low>   <humi_high>84.2</humi_high>   <humi_low>75.2</humi_low>   <weatid>3</weatid>   <weatid1>1</weatid1>   <windid>1</windid>   <winpid>2</winpid>   </item_0> - <item_1>   <weaid>1</weaid>   <days>2014-07-31</days>   <week>星期四</week>   <cityno>beijing</cityno>   <citynm>北京</citynm>   <cityid>101010100</cityid>   <temperature>31℃/24℃</temperature>   <humidity>87.8℉/75.2℉</humidity>   <weather></weather>   <weather_icon>http://api.k780.com:88/upload/weather/d/0.gif</weather_icon>   <weather_icon1>http://api.k780.com:88/upload/weather/d/0.gif</weather_icon1>   <wind>微風</wind>   <winp>小於3級</winp>   <temp_high>31</temp_high>   <temp_low>24</temp_low>   <humi_high>87.8</humi_high>   <humi_low>75.2</humi_low>   <weatid>1</weatid>   <weatid1>1</weatid1>   <windid>1</windid>   <winpid>2</winpid>   </item_1> - <item_2>   <weaid>1</weaid>   <days>2014-08-01</days>   <week>星期五</week>   <cityno>beijing</cityno>   <citynm>北京</citynm>   <cityid>101010100</cityid>   <temperature>33℃/25℃</temperature>   <humidity>91.4℉/77℉</humidity>   <weather></weather>   <weather_icon>http://api.k780.com:88/upload/weather/d/0.gif</weather_icon>   <weather_icon1>http://api.k780.com:88/upload/weather/d/0.gif</weather_icon1>   <wind>微風</wind>   <winp>小於3級</winp>   <temp_high>33</temp_high>   <temp_low>25</temp_low>   <humi_high>91.4</humi_high>   <humi_low>77</humi_low>   <weatid>1</weatid>   <weatid1>1</weatid1>   <windid>1</windid>   <winpid>2</winpid>   </item_2> - <item_3>   <weaid>1</weaid>   <days>2014-08-02</days>   <week>星期六</week>   <cityno>beijing</cityno>   <citynm>北京</citynm>   <cityid>101010100</cityid>   <temperature>34℃/24℃</temperature>   <humidity>93.2℉/75.2℉</humidity>   <weather></weather>   <weather_icon>http://api.k780.com:88/upload/weather/d/0.gif</weather_icon>   <weather_icon1>http://api.k780.com:88/upload/weather/d/0.gif</weather_icon1>   <wind>微風</wind>   <winp>小於3級</winp>   <temp_high>34</temp_high>   <temp_low>24</temp_low>   <humi_high>93.2</humi_high>   <humi_low>75.2</humi_low>   <weatid>1</weatid>   <weatid1>1</weatid1>   <windid>1</windid>   <winpid>2</winpid>   </item_3> - <item_4>   <weaid>1</weaid>   <days>2014-08-03</days>   <week>星期日</week>   <cityno>beijing</cityno>   <citynm>北京</citynm>   <cityid>101010100</cityid>   <temperature>33℃/25℃</temperature>   <humidity>91.4℉/77℉</humidity>   <weather>晴轉多雲</weather>   <weather_icon>http://api.k780.com:88/upload/weather/d/0.gif</weather_icon>   <weather_icon1>http://api.k780.com:88/upload/weather/d/1.gif</weather_icon1>   <wind>微風</wind>   <winp>小於3級</winp>   <temp_high>33</temp_high>   <temp_low>25</temp_low>   <humi_high>91.4</humi_high>   <humi_low>77</humi_low>   <weatid>1</weatid>   <weatid1>2</weatid1>   <windid>1</windid>   <winpid>2</winpid>   </item_4> - <item_5>   <weaid>1</weaid>   <days>2014-08-04</days>   <week>星期一</week>   <cityno>beijing</cityno>   <citynm>北京</citynm>   <cityid>101010100</cityid>   <temperature>33℃/25℃</temperature>   <humidity>91.4℉/77℉</humidity>   <weather>多雲</weather>   <weather_icon>http://api.k780.com:88/upload/weather/d/1.gif</weather_icon>   <weather_icon1>http://api.k780.com:88/upload/weather/d/1.gif</weather_icon1>   <wind>微風</wind>   <winp>小於3級</winp>   <temp_high>33</temp_high>   <temp_low>25</temp_low>   <humi_high>91.4</humi_high>   <humi_low>77</humi_low>   <weatid>2</weatid>   <weatid1>2</weatid1>   <windid>1</windid>   <winpid>2</winpid>   </item_5>   </result>   </root>

   轉換方法與前面類似,這裡就不需要重複了。

3. 綜合方案

    3. 1 實時天氣

    3.2  今天天氣

         2個選擇: 

     3.3  未來幾天天氣

           今天天氣及未來五天天氣 :

    3.4    生活指數

 4. 隨身雲 天氣API介面

     4.1 簡介

         APP "中華萬年曆"使用的API介面,查詢速度很快,唯一的缺點是沒有天氣標誌圖片,提供2個介面,一個簡化版,一個詳細版,詳細說明如下:

    4.2 簡化版介面

         引數citykey就是設定地方程式碼,和中國天氣網的地方程式碼一樣,替換要查詢的地方程式碼即可,下同。

返回示例:

     {"desc":"OK","status":1000,"data":{"wendu":"28","ganmao":"相對今天出現了較大幅度降溫,較易發生感冒,體質較弱的朋友請注意適當防護。","forecast":[{"fengxiang":"微風","fengli":"小於3級","high":"高溫 29℃","type":"陰","low":"低溫 24℃","date":"30日星期三"},{"fengxiang":"微風","fengli":"小於3級","high":"高溫 31℃","type":"晴","low":"低溫 24℃","date":"31日星期四"},{"fengxiang":"微風","fengli":"小於3級","high":"高溫 33℃","type":"晴","low":"低溫 25℃","date":"1日星期五"},{"fengxiang":"微風","fengli":"小於3級","high":"高溫 34℃","type":"晴","low":"低溫 24℃","date":"2日星期六"},{"fengxiang":"微風","fengli":"小於3級","high":"高溫 33℃","type":"晴","low":"低溫 25℃","date":"3日星期天"},{"fengxiang":"微風","fengli":"小於3級","high":"高溫 33℃","type":"多雲","low":"低溫 25℃","date":"4日星期一"},{"fengxiang":"微風","fengli":"小於3級","high":"高溫 33℃","type":"多雲","low":"低溫 25℃","date":"5日星期二"}],"yesterday":{"fl":"小於3級","fx":"微風","high":"高溫 29℃","type":"中雨","low":"低溫 22℃","date":"29日星期二"},"aqi":"186","city":"北京"}}

     4.3. 詳細版介面

返回示例:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. - <resp>
  3. <city>北京</city>
  4. <updatetime>16:05</updatetime>
  5. <wendu>28</wendu>
  6. <fengli>2級</fengli>
  7. <shidu>66%</shidu>
  8. <fengxiang>東風</fengxiang>
  9. <sunrise_1>05:10</sunrise_1>
  10. <sunset_1>19:31</sunset_1>
  11. <sunrise_2 />
  12. <sunset_2 />
  13. - <environment>
  14. <aqi>186</aqi>
  15. <pm25>140</pm25>
  16. <suggest>...適量減少戶外運動</suggest>
  17. <quality>中度汙染</quality>
  18. <MajorPollutants>顆粒物(PM2.5)</MajorPollutants>
  19. <o3>142</o3>
  20. <co>2</co>
  21. <pm10>0</pm10>
  22. <so2>4</so2>
  23. <no2>24</no2>
  24. <time>15:00:00</time>
  25. </environment>
  26. - <yesterday>
  27. <date_1>29日星期二</date_1>
  28. <high_1>高溫 29℃</high_1>
  29. <low_1>低溫 22℃</low_1>
  30. - <day_1>
  31. <type_1>中雨</type_1>
  32. <fx_1>微風</fx_1>
  33. <fl_1>小於3級</fl_1>
  34. </day_1>
  35. - <night_1>
  36. <type_1>中雨</type_1>
  37. <fx_1>微風</fx_1>
  38. <fl_1>小於3級</fl_1>
  39. </night_1>
  40. </yesterday>
  41. - <forecast>
  42. - <weather>
  43. <date>30日星期三</date>
  44. <high>高溫 29℃</high>
  45. <low>低溫 24℃</low>
  46. - <day>
  47. <type></type>
  48. <fengxiang>微風</fengxiang>
  49. <fengli>小於3級</fengli>
  50. </day>
  51. - <night>
  52. <type></type>
  53. <fengxiang>微風</fengxiang>
  54. <fengli>小於3級</fengli>
  55. </night>
  56. </weather>
  57. - <weather>
  58. <date>31日星期四</date>
  59. <high>高溫 31℃</high>
  60. <low>低溫 24℃</low>
  61. - <day>
  62. <type></type>
  63. <fengxiang>微風</fengxiang>
  64. <fengli>小於3級</fengli>