python vs json 玩open data

32
Python vs Json 玩 OpenData

Upload: -

Post on 16-Jan-2017

111 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Python vs json 玩open data

Python vs Json 玩 OpenData

Page 2: Python vs json 玩open data

學習主題• 社群成立目的簡介• 自我介紹與哈啦• 功力複習• 程式實作 (Python)

• 問題與交流

Page 3: Python vs json 玩open data

社群成立目的簡述:  諸葛魔斌來自只會拼觀光的資訊沙漠城市,也不是正統資訊相關背景出身,在程式設計領域算是半調子,靠著自學與個人摸索,在沙漠城市中奮戰不懈。懷抱著讓資訊沙漠城市的子弟能無門檻的學習,輕鬆簡單的跨入資訊程式的領域的癡傻夢想的非主流程式創作者成立目的:  為有心想要進入程式設計的門檻,並共同在資訊科技這個領域一起努力學習的朋友所成立的社團。這裡沒有資訊人藏步的銅牆鐵壁,只要願意在荒漠台灣努力,不僅看得到釣竿,還能親手揮竿,絕不只有紙上談兵,一定讓努力學習者得其門而入。  歡迎有心想要跨入程式設計領域的初學者加入,更歡迎願意並有熱忱的程式高手加入指導。

Page 4: Python vs json 玩open data

個人簡介諸葛魔斌工作室:諸葛魔斌科技創作室學歷:高應大 --- 工管系 ( 非資訊科系 )E-Mail : [email protected]官方網站: http://twcts.comFacebook : https://goo.gl/volM7Z粉絲團 : https://goo.gl/LI08wh 諸葛魔斌科技創作室社群 : https://goo.gl/kjCsz1 高雄資訊程式群學社Line (id) : http://goo.gl/ayGW7dLine@ : http://goo.gl/TxeXkiLine Bot : http://goo.gl/BrdyZlPlay 商店: http://goo.gl/CkVdsdApp Store : http://apple.co/1Qehd64專長: VB(VBA) 、 C# 、 Java(Android) 、 Swift(iOS) 、 PHP 、 Python 、 Conrona 、 Golang 、 Unity 、 MySQL 、 FreeBSD 、 Server 架設、 CAD 、 ……

楊政斌

Page 5: Python vs json 玩open data

學習程式的歷程學生時期:打電動,沒有日夜的界限二專畢業:初次接觸 dBase 、 Lotus 使用 Clipper 做經銷存、應收付帳系統

工作階段 1 :接觸 Office ,開始使用 Excel(Lotus)

工作階段 2 :品保工作,自學圖表、函數、 VBA ,做出自動化品管系統興趣展開:自學 VB ,製作 ERP 系統,接觸 Linux 、 FreeBSD ,自學架設 Server

諸葛魔斌誕生

大學時期:半自學 Android App(Java) 、 C# 、 iOS App(Swift)

工作轉變:成立諸葛魔斌科技創作室,接案學習,救國團電腦資訊講師實績:

Page 6: Python vs json 玩open data

Open Data & JSON

Python vs Json 玩 OpenData

Page 7: Python vs json 玩open data

Open Data :指的是一種經過挑選與許可的資料,這些資料不受著作權、專利權,以及其他管理機制所限制,可以開放給社會公眾,任何人都可以自由出版使用,不論是要拿來出版或是做其他的運用都不加以限制。XML :可延伸標記式語言(英語: Extensible Markup Language ,簡稱:XML),是一種標記式語言。標記指電腦所能理解的資訊符號,通過此種標記,電腦之間可以處理包含各種資訊的文章等。如何定義這些標記,既可以選擇國際通用的標記式語言,比如 HTML,也可以使用像 XML 這樣由相關人士自由決定的標記式語言,這就是語言的可延伸性。 XML 是從標準通用標記式語言( SGML)中簡化修改出來的。它主要用到的有可延伸標記式語言、可延伸樣式語言( XSL)、 XBRL和 XPath等。

Python vs Json 玩 OpenData

Page 9: Python vs json 玩open data

JSON 用於描述資料結構,有以下形式存在。•物件( object):一個物件以「 {」開始,並以「 }」結束。一個物件包含一系列非排序的名稱/值對,每個名稱/值對之間使用「 ,」分割。•名稱/值( collection):名稱和值之間使用「:」隔開,一般的形式是: {name:value} 一個名稱是一個字串; 一個值可以是一個字串,一個數值,一個物件,一個布林值,一個有序列表,或者一個 null值。•值的有序列表( Array):一個或者多個值用「 ,」分割後,使用「 [」,「 ]」括起來就形成了這樣的列表,形如: [collection, collection] •字串:以 ""括起來的一串字元。•數值:一系列 0-9 的數字組合,可以為負數或者小數。還可以用「 e」或者「 E」表示為指數形式。•布林值:表示為 true或者 false 。

Python vs Json 玩 OpenData

Page 10: Python vs json 玩open data

{ "firstName": "John", "lastName": "Smith", "sex": "male", "age": 25, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021" }, "phoneNumber": [ { "type": "home", "number": "212 555-1234" }, { "type": "fax", "number": "646 555-4567" } ] }

[ { "text":"This is the text","color":"dark_red","bold":"true","strikethough":"true","clickEvent": {"action":"open_url","value":"zh.wikipedia.org"}, "hoverEvent": {"action":"show_text","value": {"extra":"something"} } }, { "translate":"item.dirt.name","color":"blue","italic":"true" } ]

Python vs Json 玩 OpenData

Page 11: Python vs json 玩open data

Python vs Json 玩 OpenData

語法參考前次課程彙整的資料http://www.slideshare.net/ssuser1f2dfd/python-68494493

Page 12: Python vs json 玩open data

Python vs Json 玩 OpenData

實作1. Python 讀取 Json 文字檔2. Python 讀取存於網頁上之 Json 文字檔3. Python 讀取存於網頁上之 Json 內容4. Python 存取 FireBase 查詢、新增、取代、刪除5. Python 讀取 Open Data 之 Json 存入 FireBase

Page 13: Python vs json 玩open data

Python vs Json 玩 OpenData

使用 Anaconda

Page 14: Python vs json 玩open data

Python vs Json 玩 OpenData

使用 Jupyter notebook

Page 15: Python vs json 玩open data

Python vs Json 玩 OpenData

填入 Python 程式指令

Page 16: Python vs json 玩open data

Python 讀取 Json 文字檔1. 建立 Json 檔案 (camera.json)

2. Python 程式 (camera.py)

import json # 載入 json## 1. 讀取 "camera.json" ,並把它轉成 "object”open_file = open('camera.json', 'r', encoding = 'utf-8') # 將讀取編碼設為 "utf-8”tmp_files = open_file.read()input_data = json.loads(tmp_files) # 把 json 檔案改成 objectopen_file.close() # 關閉檔案## 2. 提示使用者輸入欲查詢的路名 ( 要用中文 )# 讓使用者輸入資料user_input = input('Please use chinese to enter road name in Kaohsiung :')# 過濾資料user_input = user_input.replace(' 路 ', '')

Python vs Json 玩 OpenData

Page 17: Python vs json 玩open data

Python 讀取 Json 文字檔## 3. 在查詢結果前,在螢幕上顯示 " 項目意義”print(' 行政區 \t 測照方向 \t 測照地點 ')print('*' * 50) # 用來產生分隔線## 4. 查詢輸入的資料for data in input_data: # 依照資料的筆數 ("input_data") 進行迴圈# 判斷資料裡面是否有我們要找的東西 if user_input in data[' 測照地點 ']: print('%s\t%s\t\t%s' % (data[' 行政區 '], data[' 測照方向 '], data[' 測照地點 ']))

Python vs Json 玩 OpenData

Page 18: Python vs json 玩open data

Python 讀取存於網頁上之 Json 文字檔1. 存放 Json 檔在網頁上 http://203.64.91.58/camera.json

2. Python 程式 (camera1.py)

import jsonimport requests

r=requests.get('http://203.64.91.58/camera.json')r.json()json_obj = json.loads(r.text)

user_input = input(' 高雄市區監視器分佈位置查詢 ( 請輸入路名 ):')user_input = user_input.replace(' 路 ', '')

Python vs Json 玩 OpenData

Page 19: Python vs json 玩open data

Python 讀取存於網頁上之 Json 文字檔print(' 行政區 \t 測照方向 \t 測照地點 ')print('*' * 50) # 用來產生分隔線for obj in json_obj: if user_input in obj[' 測照地點 ']: print('%s\t%s\t\t%s' % (obj[' 行政區 '], obj[' 測照方向 '], obj[' 測照地點 ']) )

Python vs Json 玩 OpenData

Page 20: Python vs json 玩open data

Python 讀取存於網頁上之 Json 內容1. 選擇 OpenData 網頁。https://data.kaohsiung.gov.tw/opendata/DownLoad.aspx?Type=2&CaseNo1=AG&CaseNo2=31&FileType=2&Lang=C&FolderType=O 將 https 改為 httphttp://data.kaohsiung.gov.tw/opendata/DownLoad.aspx?Type=2&CaseNo1=AG&CaseNo2=31&FileType=2&Lang=C&FolderType=O

2. Python 程式 (water.py)

import jsonimport requests

url = 'http://data.kaohsiung.gov.tw/opendata/DownLoad.aspx?Type=2&CaseNo1=AG&CaseNo2=31&FileType=2&Lang=C&FolderType=O'

Python vs Json 玩 OpenData

Page 21: Python vs json 玩open data

Python 讀取存於網頁上之 Json 內容r=requests.get(url)r.json()json_obj = json.loads(r.text)

user_input = input(' 高雄市區加水站地址位置查詢 ( 請輸入行政區 ):')user_input = user_input.replace(' 區 ', '')

print(' 加水站名稱 \t\t 加水站地址 \t\t 聯絡電話 ')print('='* 50 )

for obj in json_obj: if user_input in obj[' 加水站地址 ']: print('%s\t%s\t%s' % (obj[' 加水站名稱 '], obj[' 加水站地址 '], obj[' 聯絡電話 ']) )

Python vs Json 玩 OpenData

Page 22: Python vs json 玩open data

Python 存取 FireBase 之 查詢、新增、取代、刪除1. FireBase Database 設置 / 建立可參考http://www.slideshare.net/ssuser1f2dfd/ios-swift-firebasehttp://www.slideshare.net/ssuser1f2dfd/android-amp-fire-base

2. 安裝 python-firebase sudo pip install python-firebase

3. Python 程式 ( 使用 jupyter notebook)

Python vs Json 玩 OpenData

Page 23: Python vs json 玩open data

Python 存取 FireBase 之 查詢、新增、取代、刪除查詢 :

from firebase import firebasefirebase = firebase.FirebaseApplication('https://twcts-iapp.firebaseio.com/', None)result = firebase.get('/myfbapp', None)print(result)

from firebase import firebasefirebase = firebase.FirebaseApplication('https://twcts-iapp.firebaseio.com/', None)result = firebase.get('/myfbapp', 1)print(result)

Python vs Json 玩 OpenData

Page 24: Python vs json 玩open data

Python 存取 FireBase 之 查詢、新增、取代、刪除新增 :

from firebase import firebasefirebase = firebase.FirebaseApplication('https://twcts-iapp.firebaseio.com', None)data = [{'name': 'KKK'}]result = firebase.put('/myfbapp','2' , data)print(result)

Python vs Json 玩 OpenData

Page 25: Python vs json 玩open data

Python 存取 FireBase 之 查詢、新增、取代、刪除取代 :

from firebase import firebasefirebase = firebase.FirebaseApplication('https://twcts-iapp.firebaseio.com', None)data = [{'name': 'JJJ'}]firebase.put('/myfbapp','2' , data)result = firebase.get('/myfbapp', 2)print(result)

Python vs Json 玩 OpenData

Page 26: Python vs json 玩open data

Python 存取 FireBase 之 查詢、新增、取代、刪除刪除 :

from firebase import firebasefirebase = firebase.FirebaseApplication('https://twcts-iapp.firebaseio.com', None)firebase.delete('/myfbapp/2', None)result = firebase.get('/myfbapp', None)print(result)

Python vs Json 玩 OpenData

Page 27: Python vs json 玩open data

Python vs Json 玩 OpenData

Python 讀取 Open Data 之 Json 存入 FireBase

1. 選擇 OpenData 網頁。https://data.kaohsiung.gov.tw/opendata/DownLoad.aspx?Type=2&CaseNo1=AG&CaseNo2=31&FileType=2&Lang=C&FolderType=O 將 https 改為 httphttp://data.kaohsiung.gov.tw/opendata/DownLoad.aspx?Type=2&CaseNo1=AG&CaseNo2=31&FileType=2&Lang=C&FolderType=O

2. Python 程式 (water_firebase.py)

from firebase import firebaseimport jsonimport requests

Page 28: Python vs json 玩open data

Python vs Json 玩 OpenData

Python 讀取 Open Data 之 Json 存入 FireBase

url = 'http://data.kaohsiung.gov.tw/opendata/DownLoad.aspx?Type=2&CaseNo1=AG&CaseNo2=31&FileType=2&Lang=C&FolderType=O’r=requests.get(url)r.json()json_obj = json.loads(r.text)

i = 0firebase = firebase.FirebaseApplication('https://twcts-iapp.firebaseio.com', None)for obj in json_obj: data = [{' 加水站名稱 ': obj[' 加水站名稱 ']}, {' 加水站地址 ': obj[' 加水站地址 ']}, {'聯絡電話 ': obj['聯絡電話 ']}] result = firebase.put('/myfbapp', str(i) , data) i+=1 print(result)

Page 29: Python vs json 玩open data

Python vs Json 玩 OpenData

Python 讀取 Open Data 之 Json 存入 FireBase

欄位整併 (Part 2)

from firebase import firebaseimport jsonimport requests

url = 'http://data.kaohsiung.gov.tw/opendata/DownLoad.aspx?Type=2&CaseNo1=AG&CaseNo2=31&FileType=2&Lang=C&FolderType=O’r=requests.get(url)r.json()json_obj = json.loads(r.text)

Page 30: Python vs json 玩open data

Python vs Json 玩 OpenData

Python 讀取 Open Data 之 Json 存入 FireBase

i = 0firebase = firebase.FirebaseApplication('https://twcts-iapp.firebaseio.com', None)for obj in json_obj: data = [{' 加水站名稱 ': obj[' 加水站名稱 '], ' 加水站地址 ': obj[' 加水站地址 '], '聯絡電話 ': obj['聯絡電話 ']}] result = firebase.put('/myfbapp', str(i) , data) i+=1 print(result)

Page 31: Python vs json 玩open data

Python vs Json 玩 OpenData結論後續可以開發 (1) Python & Firebase 整合應用 (2) 物聯網控制和資料存取

Page 32: Python vs json 玩open data

Python vs Json 玩 OpenData