---
# System prepended metadata

title: 2020/3/19專題報告
tags: [報告]

---

# 2020/3/19專題報告

[toc]
## 進度規劃
目前計畫照這架構依序實現功能
* 個人帳號系統(瑞成)
    * 註冊與登入系統
    * 個人頁面
    * 
* 首頁與推薦系統
    * 首頁架構（徐園）
    * 課程導入(串接API)
    * 課程推薦(演算法)、評分、收藏
    * 討論區
    * 爬蟲(自動導入)
# 登入系統
## Django

原本打算用手刻出登入系統的，但經過同學建議之後選擇使用Django，因為登入系統及資料庫應用網路上應該已經被大量使用了，如果能站在前人肩膀上，應該能在這一年做出更多東西，而這也符合Django社群中提倡ㄉDRY的概念

### 架構

Django是一個建立在python上的套件，有很多前人已經寫好的模組可以使用，在系統主要架構上分為以下幾個檔案
![](https://i.imgur.com/c4E46T2.png)
* init.py:宣告是一個套件
* urls.py:發送請求
* views.py:跟urls.py做搭配，處理請求，把資料送到前端
* models.py:建構資料庫


### Install
install python and pip
```bash=
sudo apt-get install python3
sudo apt install python3-pip
```

make an vitural env
```bash=
sudo pip3 install virtualenvwrapper
```

install Django
```bash=
pip3 install django
python3 -m django --version
# 3.1.7
```
we use **python 3.8.5** and **django 3.1.7** as our version
### Create projects and apps
APP is like server, while project is a collection of APPs

run server
```bash=
python3 manage.py runserver
#default is port 8000
python manage.py runserver 8080
# to set in another port
```
the success page
![](https://i.imgur.com/Qtm4JFh.png)

lost the path
![](https://i.imgur.com/mSSm6IY.png)


:::info
**reference**
* [Mozilla教學系列](https://developer.mozilla.org/zh-TW/docs/Learn/Server-side/Django/Introduction)
* [Django教學](https://docs.djangoproject.com/en/3.1/intro/tutorial01/)
:::
# API
> 全名 Application Programming Interface ，中文為應用程式介面，是用來交換資訊的管道

- Web API：是一種基於 Http 協定下運算的 API，一切透過網路進行交換資料的操作都是 Web API。
- API 常見的 **CRUD** 功能:分別指的是：Create 新增、Read 讀取、Update 更新、Delete 刪除，有時候會聽到五項功能，多了一個 List 列表。
- RESTful: 目前主流軟體架構風格，大部分的 API 都是造著此風格實作。全名 Representational State Transfer 中文為「表現層狀態轉換」。是一種語意化、嚴謹的描述 API 方式。統一介面(唯一URI),並可通過URI操作資源，改變資源狀態

**RESTful 風格的 API :**
![](https://miro.medium.com/max/918/1*41RxVJfDAL878wRbdhEhuA.png)
:::info
### XML:
- XML和HTML的寫法非常相似，兩個都是『標記語言』的形式，也就是會把資料儲存在以下的形式中:
> <language>中文</language>
- XML資料格式的結構，相較 JSON 龐大，除了資料本身較大外，程式在處理時也較花時間。而處理的方式也會根據程式語言和資料源方有很多種變化，較無統一的作法。
:::
:::danger
### JSON
![](https://ithelp.ithome.com.tw/upload/images/20181021/20107758FgoZAOjBbX.png)
- JSON 在撰寫時，會先用一對大括號『 {} 』，包住所有的資料，這也是程式語言一個很重要的概念-物件。
- 冒號後就是資料，是字串的資料型態
- JSON 因為資料結構體積小，因此傳遞快速方便，而且解析上比 XML 方便許多，不會眼花瞭亂，而且由於編寫非常相似於寫程式的方式，各大程式語言都有方便的解析工具以及支援慣用的許多資料格式。
:::

## 取得中央氣象局API

### 線上說明文件(測試)
Step:
1. 申辦中央氣象局會員，並在會員專區取得授權碼
2. 在開發指南專區打開資料擷取API線上說明文件
3. 選擇好需要測試的API後try it out
4. 在Authorization剛剛登入後取得的「API 授權碼」
5. 執行
![](https://i.imgur.com/k68Q2Na.png)
- curl 指令:[curl指令教學](https://miahsuwork.medium.com/curl-%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C%E8%88%87%E6%8C%87%E4%BB%A4-%E6%90%AD%E9%85%8D-lidemy-http-challenge-%E5%AF%A6%E4%BD%9C-39b79511eb9e)
- Request URL:因為使用的是 GET 請求，所以若把這串 Request URL 貼到瀏覽器網址列將一樣可以看到回傳的結果

### 利用Python抓取資料
```python=
import requests
def get(city):
    token = '' #這裡記得換成剛剛生成的 Token
    url = 'https://opendata.cwb.gov.tw/api/v1/rest/datastore/F-C0032-001?Authorization=' + token + '&format=JSON&locationName='
    Data = requests.get(url)
    print(Data)
```


###### tags: `報告`
