nkust-itc / nkust-ap-api Goto Github PK
View Code? Open in Web Editor NEWNKUST-AP-v3-完善計畫
License: MIT License
NKUST-AP-v3-完善計畫
License: MIT License
使用者輸入西元年後需要轉換成民國年
遺漏了捕0 造成無法正確選擇日期
2019/10/01
>> 108/10/1
學校格式為 108/10/01
造成無法選擇日期
如題
部分request content MIME為小寫
content-disposition
>> Content-Disposition
content-type
>> Content-Type
會造成python cgi 沒辦法正確解析
在預定校車/取消預約
原有v2會轉回覆學校的回應資料
{
"success": false,
"code": 400,
"message": "該班次已預約,不可重覆預約",
"count": 0,
"data": {
"startTime": "/Date(1566896400000)/",
"budId": 45414
}
}
PUT
/bus/reservations
DELETE
/bus/reservations
在v3中,不應該回覆204
也沒有其他status code是在表示預定的錯誤訊息
204並不能返回資料給使用者,必須更改
如題
需要回應過期時間
目前時間計算遇到負數會出現問題
一併修正
除課堂QR code掃描之外
也許會同時有多個需要掃QR code的服務
應該要像請假系統可以讓使用者選擇對應的服務(?
e.g. GET
/xxx/info
{
"data": [
{
"service_id": "service_1234",
"name": "上課掃QR",
"description": "就是要你上課掃",
"require": [
"GPS"
]
},
{
"service_id": "service_4567",
"name": "其他掃QR",
"description": "說明",
"require": []
}
],
"default": {
"service_id": "abcd123",
"name": "上課掃QR",
"description": "就是要你上課掃",
"require": [
"GPS"
]
}
}
POST
or PUT
/xxx/xxx?service_id=abcd123
request body
{
"service_id": "service_1234",
"require": {
"longitude": 12.1,
"latitude": 12.1
}
}
service_id 看要放在內requests內還是query string
/news/school
{
"link": "http://kuasnews.kuas.edu.tw/files/13-1018-70766-1.php",
"info": {
"id": "1",
"title": "2019年高科大高雄亮點日語導覽競賽",
"department": "觀光系",
"date": "2019-03-13"
}
}
目前爬NKUST教務處資訊
並沒有department
的欄位可以爬
需要移除
文件初是只有查詢請假單,leaves 指複數資料
目前 leave 下擁有較多功能,Python上是採用學校的命名方法 leave
統一 api route
將
/leaves
>> /leave/all
/leaves/submit
>> /leave/submit
/leaves/submit/info
>> /leave/submit/info
在獲取單天時刻表,需要約1s上下的延遲
一般的時刻表,上面會有這個user預約狀態
講白了就是一份普通的時刻表
跟自己預定的表單
的融合
但在獲取自己的校車預約表單只需要 100~200ms
可以做到
全部學生共用一份時刻表 並且延長cache過期時間
(過期時間可以設定為那一天時刻表+1 day)
在單獨載入 自己預定的表單做合併
可以讓第一次讀入的時間加快許多
至於 校車過了預約時間
可以利用json檢查,去算時間並且阻擋預約
可以考慮在後端加入教室的經緯度位置
但此資料需要手動搜集
IP被阻擋,也有可能是有錯誤登入太多次
Proxy Pool (get_session 使用者自行設定)
登入問題
如題
之後可能會有服務拆分或是有新的服務(選課評價)
目前�JWT secret key 只透過第一次產生,後續保存在redis
並不能從外部用其他方式指定
docker secrets
或是環境變數
現行學校有支援查詢系排名
API /user/scores
新增欄位 departmentRank
API格式
{
"detail": {
"conduct": 82,
"average": 39,
"classRank": "57/57",
"departmentRank":"12/123",
"classPercentage": 100
}
}
部分查詢可能會有空資料的問題,缺少對應status code回應
有鑒於v2 已提供基本的參數可以使用
以下列出可以參考的參數:
若有其他建議可以在此issue提出
move #43 .
這邊提出一個想法
使用者發送請假資訊&請假證明 >> API接收,檢查欄位是否正確後,立即返回一組task id(隨機) >> (後端再慢慢的幫他送請假)
後端請假紀錄保存24h
後續要查詢請假紀錄,如果是成功的,應該會在假單查詢看到(學校架單)
跨日請假, 請的節數越多,花費的時間就越久
可能需要這樣來減少使用者等待的時間
什麼爛請假系統,最難爬的網站沒有之一
目前學校webap 已經移除班名次百分比了
可能要換成前後端計算或是移除這個欄位
查看log後有發現爬蟲在爬總平均時部分會報錯
異常處理需要補上
Does need add docker deploy setting?
從SQLite改為Redis 不像是v2有flask的框架可以快速修改內容
開出API並且驗證管理員等等
管理介面前端再另討論 (github page or more ...)
文件上有標403 User can't user this feature
當初沒有實作出來�
有需要修改其他回傳值嗎
先前v2有提供 weight 供前端
做最新消息的優先顯示
目前文件尚未定義此參數
�再book or unbook 在時刻表還沒更新之前就先做了刪除時刻表的動作
應該要修改成只需更新時刻表,不需要事先刪除
會造成再短時間請求,時刻表被刪除了,還是需要等待的狀況
第一個問在discord上有提,研究生/沒有預設導師的學生,會需要手動去選擇導師,
gist json
並且在/leaves/submit/info
添加欄位,讓前端可以得知使用者需不需要手動選擇導師.
如題
如題
因:學校把第C節拿掉了
🛸
部分status code 過多
學校網站並沒有一個正常的status code來判斷
故簡化
學校課表/教室查詢,有些許修改,需要修改回傳格式
如表題
所有需要 Bearer token的API
都缺少這個參數的描述
這個無關dio的問題
if leave_proof_image_bytes.multipart_filename[-3:] not in ['png', 'jpg', 'jpeg', 'PNG', "JPG", "JPEG"]:
如是-3的話不應該有4個字做判斷
因學校校務系統近期暫時關閉
臨時切換至請假系統做帳號驗證
當使用請假伺服器做驗證時,關閉部分校務系統api (404)
目前請假功能爬蟲部分已經完成
但在API串接上有部份格式需要討論
目前的/leaves/submit
需要post的資料是
application/json
{
"days": [
{
"day": "2019/03/03",
"class": [
"A",
"3",
"5"
]
},
{
"day": "2019/03/05",
"class": [
"2",
"3"
]
}
],
"leaveType": "21",
"teacherId": "10041",
"reasonText": "我不當人類拉 JOJO!!!!!"
}
欄位上資料上並沒有任何問題
這次請假功能是需要包含「請假證明」的,必須要有傳遞圖片的方式
提供以下幾種討論
multipart/form-data
跟基本的form-data並無太大差異
POST的資料
leavesData: "{"days":"2019/03/03".....}"
leavesProof: image file
如果將leavesData
中的json改成form-data的欄位
會造成後端資料處理繁瑣,我的建議是 我給的POST資料這樣
(falcon 現階段不支援 multipart 可以透過內建cgi 或是外部庫擴充 )
(falcon 官方說是未來功能之一)
(前端可串接第三方的圖片上傳服務)
在原有的POST資料中加入proof_url
的欄位
後端再依據欄位中的url去下載圖片並上傳給學校
再另開一個API提供上傳圖片的服務
舉例/leaves/submit/proof/upload
並返回一組
{
"imageHash":"fovobgpsd33dfefp"
}
在原有的API POST資料上加入這個欄位
圖片轉為base64後,放入原POST json資料中
bus部分的status code 需要修改
新增403給非[燕巢/建工]校區的請求
503 504整合
如題,v2 api 會有頁數的參數,
對應到原網頁的頁數。
無法正常請假,爬蟲問題
目前使用學校校務系統當驗證伺服器使用,需要有在校務系統維護時可以作為驗證使用的伺服器
目前有的登入系統
驗證伺服器 | 問題 |
---|---|
校車系統 | 非原高應沒有辦法登入 |
圖書館系統 | 延遲不穩定,不論正確或失敗的帳號 |
請假系統 | 正確帳號下,驗證速度很快,但錯誤帳號延遲非常高 |
可能需要尋找可以驗證學生狀態
對正確錯誤帳號處理延遲不高的系統
目前最新消息的管理員驗證,是透過校務系統登入後
判斷JWT裡的username是否為管理員的帳號
在校務系統維護時,會有沒有辦法管理最新消息的問題
在環境變數中,輸入管理員帳號密碼
透過/oauth/token
做判斷
(可以在falcon JWT middleware 就判斷並返回)
在環境變數中,輸入管理員帳號密碼
額外開設一組管理員的登入API 來發 JWT
像是 /oauth/admin/token
(可以在討論)
/bus/violation-records
{
"reservation": [
{
"time": "2019-03-17T16:51:57Z",
"startStation": "建工",
"homeCharteredBus": false,
"amountend": 30,
"isPayment": ""
}
]
}
isPayment 應為 boolean
/bus/timetables
{
"endEnrollDateTime": "2019-03-17T16:51:57Z",
"departureTime": "2019-03-17T16:51:57Z",
"startStation": "建工",
"busId": "42705",
"reserveCount": 2,
"limitCount": 999,
"isReserve": true,
"specialTrain": "0",
"discription": "",
"cancelKey": 0,
"homeCharteredBus": false
}
timetable 無法查詢到cancelKey,應移除
20190901 @abc873693 補充
discription 應該為 description
/server/info
/login
目前時間格式符合ISO-8601
實際上時間需求是要帶有timezone 只求秒數的格式
登入webap 帳號密碼錯誤會跳alert
維護也是跳alert
(目前僅判斷有沒有alert)
需要判斷alert文字給予相對應的status code
/user/scores
/user/coursetable
/user/reward-and-penalty
/user/midterm-alerts
文件中parameters是year,semester
實作成year,value 需要更改
校車系統的加密段落已經解析成Python版本
故可以移除PyExecJS
改進效能,也不需要NodeJS了
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.