python練習 weather API

參照文章出處: http://motherboard.vice.com/read/hack-this-scripting-deeper-better-hacks-in-python

https://straymarcs.net/2014/12/how-to-create-your-own-weather-forecast-program-using-python/


1) 申請https://www.wunderground.com帳號,透過API()來取得其網站上的氣象資料
到https://www.wunderground.com申請(免費)帳號,以便透過API方式來使用它網站上的某些氣象資料。當然免費帳戶相對能取得的東西會比較少,不過既然這裏只能簡單的練習,先用免費帳號就好了。成功申請好免費帳戶登入https://www.wunderground.com之後,請到「more」選項底下的「Weather API for Developer」頁面來申請一組API Key 密鑰,接下來申請密鑰的頁面,同樣也是選擇免費方案即可。



在API Key 資料畫面中,就是給它填入一些關於這個API要用來做什麼的基本資訊,其實這裏隨便亂填就好,不必太認真。把資料都填好後送出(purchase key),系統會自動回覆一組密鑰,這是接下來在撰寫天氣詢問的python程式碼會用到的資訊,暫時先把它存好。


2) 滙入urllib2, json 模組
在python 3的版本,urllib2改名為urllib,不過我還是習慣先學好python2,故它用來讀取網址協議的模組是urllib2。它的使用文件在https://docs.python.org/2/library/urllib2.html,例如等一下會使用到urlopen 功能,它要放入的參數是一組網址與相關要求的list
urllib2.urlopen(url[, data[, timeout[, cafile[, capath[, cadefault[, context]]]]])
url参数可以是字串string或者是Request object。而透過這個功能,它會抓取所放入list中的網址資料,以字串string或物件object形態呈現。
我個人覺得python 官網上對於urlib2/ urllib的說明文件寫得並不清楚,讓我常有一頭霧水之感,這可能也涉及到網路上各台機器之間協議規範的複雜。反正先記得urllib2最常用也最簡單的就是.openurl(),作用是開啟一個網址,並回傳網址上的內容(object/ instance)。
其它urllib/ urllib2的中文學習介紹,請參考: http://www.cnblogs.com/wly923/archive/2013/05/07/3057122.html
而JSON (JavaScript Object Notation)這個網頁資料交換格式在python程式下的用法 https://docs.python.org/2.7/library/json.html ,同樣看得我一知半解。簡言之它提供了一種JSON資料型態編碼與解碼的方法,其主要兩個最常用到的函式為:json.dumps() 和 json.loads(),前者是把python 的資料型態轉成json,後者則是把json資料轉成python資料結構。

3)程式碼主體

7 url = 'http://api.wunderground.com/api/' + key + '/geolookup/conditions/q/PA/' + zip + '.json' ##這會依據所輸入的zip郵編資料而傳回當地的天氣(json格式資訊之網址),至於https://www.wunderground.com API的用法,可進一步參考其官網上的指引文件
8 f = urllib2.urlopen(url) ##上述網址中的json資料,先以變數f存在某個記憶體位置,也因為它是透過模組類別(class)urllib2的urlopen方式來取得,故為一個instance 
9 json_string = f.read() ##再將變數f代表某記憶體位置的內容(json型態)給讀取出來,因為python本身的資料形態並不包括python,所以這裏透過read()函式傳遞給變數json_str的是一個字串的資料型態
10 parsed_json = json.loads(json_string) ##再透過json.loads把抓回來的天氣json資料轉成dicitionary資料形態,以便接下來利用其key來抽出想讀取的value
如果稍檢視一下原始的json資料內容,其資料前半段的key為"version","termsofService","features","geolookup","conditions","location", "current_observation",其中我們主要需要的進一步了解其中"current_observation"底下的天氣狀況。(底下json檔案第306行~336行的資訊)
11 weather = parse_json['current_observation']['weather'] ##既然parse_json為dictionary型態,要讀取它的value就是用其應對key
12 temperature = parse_json['current_observation']['temp_f'] ##同上一行,這裏要取得的是華氏氣溫(F)的資訊
14 print "How about this" + weather +"?" ##打印出天氣的狀況
15 print temperature,"F degree ? This is terrible !"  ##打印出氣溫
f.close() ##最後記得把佔記憶體的instance 清除
以下是這支簡單程式執行傳回的結果(我另外加了一個打印指令,好讓我看看到底某個東西是什麼樣的資料型態)


以上是照本宣科地練習使用氣象網站資訊來查詢天氣狀況,但示範案例是以美國地區的郵編作為地理資訊查詢依據,當然學習者最好能在了解基礎之後,再進一步地運用在本地資料的API連結與查詢。

0 意見:

Security First: umbrella app 中文化滙整

之前提過會作一篇 Security First's umbrella app 滙整與中文化超連結整合,以讓未下載使用、觀看過原手機應用的讀者(其實指的就是錯亂的我自己本人)稍能有全盤的概念來想像這個手機應用程式(或更精準的說:一個手機上的隨身電子書)的內容。好了,本文...

Videos

Contact Form

Name

Email *

Message *

Home Top Ad

Responsive Ads Here

Post Bottom Ad

Responsive Ads Here

Author Details

Templatesyard is a blogger resources site is a provider of high quality blogger template with premium looking layout and robust design. The main mission of templatesyard is to provide the best quality blogger templates which are professionally designed and perfectlly seo optimized to deliver best result for your blog.

Tags

Categories

Contact


Breaking

Recent News

Pages

Recent

Fashion

Connect With us

Comments

News

Food

Sports

test banner

Food

Technology

Featured