# 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: `報告`