# web-programming **目錄:** [toc] **額外資料**: - [郭老的網站](https://sites.google.com/mail.ntut.edu.tw/jong-yih-kuo/network-programming?authuser=0) ### 說明 這是郭老網路程式設計的課程紀錄,你可以在這邊紀錄或者查看上課的命令。 *(我懶得寫作業要怎麼做,一步一步~~交~~教很麻煩)* | **VMWare** | Ubuntu ISO | Zuvio | Putty | | -------- | -------- | -------- | --- | | [Download](https://www.vmware.com/go/getplayer-win) | [Download](https://releases.ubuntu.com/22.04.3/ubuntu-22.04.3-desktop-amd64.iso?_ga=2.46118561.469095181.1694608194-1520807449.1694608194) | [URL](https://irs.zuvio.com.tw/student5/irs/clickers/1136996)| [Download](https://the.earth.li/~sgtatham/putty/latest/w64/putty-64bit-0.79-installer.msi)| ## The 1th week | 命令 | 說明 | | -------- | -------- | | `shutdown` |關機| |`restart`|重新啟動| |`sudo + {其他命令}`|使用管理員才能使用的命令| |`ifconfig`|查看電腦的IP| |`sudo apt install net-tools`|下載網路工具套件| |`sudo apt install ssh`|下載ssh套件| |`iptables -nvL`|查看防火牆輸出輸入規則| |`iptables -A INPUT -s <ip> -j DROP`|使用防火牆拒絕IP訪問| |`ssh <username>@<IP>`|使用ssh 連線| <br> ## The 2th week 新北市公共自行車即時資訊 - https://data.ntpc.gov.tw/datasets/71CD1490-A2DF-4198-BEF1-318479775E8A 你可以改`row[]`的欄位,之後可以看到你要印的資料型態。 考試可能會考說,當前區域會有多少有空的車輛。你要去了解資料欄位的意義。 您可以參考任何的資料來完成你的程式。 ```python= import urllib.request #匯入套件 import zipfile import csv # 公開資料檔案 url ='https://data.ntpc.gov.tw/api/datasets/71CD1490-A2DF-4198-BEF1-318479775E8A/csv/zip' zipName = 'F.zip' #壓縮檔案名稱 urllib.request.urlretrieve(url,zipName) #下載壓縮檔 f=zipfile.ZipFile(zipName) #開啟壓縮檔 #file_dir = './FF' file_dir = './' #解壓縮目錄 for fileName in f.namelist(): #壓縮檔案列表檔名 f.extract(fileName,file_dir) #擷取壓縮檔案 print(fileName) #印出解壓縮檔案名稱 f.close() #關檔 f = open(fileName,'r',encoding = 'utf8') #開啟CSV檔案,,唯讀 utf-8解碼 plots = csv.reader(f, delimiter=',') #讀取CSV檔案間隔逗號,設定給plots串列物件 for row in plots: #印出UBIKE資料 print('%5s' %row[0], '%15s' %row[1], '%5s' %row[3], '%5s' %row[12]) f.close() ``` --- 所有網頁都是用request的方式獲取。 ```python= import urllib.request ``` 用壓所檔案的方式開啟 ```python= request.urlretieve(url, filename) # url 下載的網址,filename下載的文件名稱。 ``` 解壓娑zip ```python! import zipfile file_dir = ./ # 在當前的目錄 ``` zip 裡面所有的檔案名稱的取得下來 ```python! f.namelist() # 壓縮檔案的列表清單 for filename in f.namelist() : # 因為只有一個檔案,所以只執行一次 ... f.extract(filename, file_dir) # 開啟壓縮檔案。 # filename 檔案名城 # file_dir 要放到哪裡。 print(filename); # 印出檔案名稱 ``` csv 都是用逗號隔開的。 ### 第二題 全國環境輻射偵測即時資訊 - https://www.aec.gov.tw/dataopen/index.php?id=2 手動下載到pmi.csv檔案。編碼風格utf8,唯讀模式 。 如果uft-8打不開的話,可以使用Big-5的編碼方式。 ```python! import csv with open('pmi.csv', 'r',encoding = 'utf8') as csvfile: plots = csv.reader(csvfile, delimiter=',') for row in plots: print(row[0]+" "+row[2]+" "+row[3]); # 或者使用 print(*row); ``` ### JSON 什麼是JSON **去看維基**(沒 JSON是一種資料格式,其中的物件是用{}做開頭和結尾,陣列是用[]做開頭和結尾。每個成員都是key-value,key只能是字串並用""包起來,value可以是數值、字串、bool、陣列、物件及空值。 參考下面範例和說明 Ex1: ```json { "name":"onon", "age":19, "isGay":false, "boyfriend":null, "language":[ "C++", "Java", "Python" ] } ``` 這個範例是有一個物件,他的成員有name、age、isGay、girlfriend和language;當中name的值是字串,age的值是數值,isGay的值是bool,girlfriend的值是null,language的值是陣列。 Ex2: ```json { "電神":{ "name":"onon", "age":19, "isGay":false, "boyfriend":null, "language":[ "C++", "Java", "Python" ] } } ``` 這個範例是key是電神,而value是Ex1的物件。 Ex3: ```json [ { "name":"onon", "age":19, "isGay":false, "boyfriend":null, "language":[ "C++", "Java", "Python" ] }, { "name":"意昌", "age":5, "isGay":true, "boyfriend":"多喝熱水", "language":[ "中文", "汐止", "ㄐㄒ" ] } ] ``` 這個範例是有一個陣列,裡面包含了兩個物件。 #### json.load 把JSON字串解碼python ```python! import json jsondata = {'a':5, 'g':5}; text = json.load(jsondata); print(text); ``` #### json.dumps python 轉乘 JSON ```python! json.dumps(['two', {'bar' : ('jar', ...)}]); ``` ### XML 什麼是XML