# 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