Giter Site home page Giter Site logo

nkust-ap-api's People

Contributors

abc873693 avatar dependabot[bot] avatar macs1207 avatar takidog avatar vn7n24fzkq avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nkust-ap-api's Issues

修改時間格式錯誤

/server/info
/login

目前時間格式符合ISO-8601
實際上時間需求是要帶有timezone 只求秒數的格式

[功能] 切換驗證伺服器

目前使用學校校務系統當驗證伺服器使用,需要有在校務系統維護時可以作為驗證使用的伺服器

目前有的登入系統

驗證伺服器 問題
校車系統 非原高應沒有辦法登入
圖書館系統 延遲不穩定,不論正確或失敗的帳號
請假系統 正確帳號下,驗證速度很快,但錯誤帳號延遲非常高

可能需要尋找可以驗證學生狀態
對正確錯誤帳號處理延遲不高的系統

最新消息 改善

有鑒於v2 已提供基本的參數可以使用
以下列出可以參考的參數:

  • tag:提供標籤例如系所, 年級,校區等參數,過濾最新消息的內容
  • location:活動位置,提供若是社團活動的活動地點,可以是地理位置或是由其他api提供學校建築位置

若有其他建議可以在此issue提出

成績查詢失敗

截圖 2019-11-28 上午2 25 59

學校加了這行,並且把班排百分比移除了

導致解析出錯

API文件 Bus部分

bus部分的status code 需要修改
新增403給非[燕巢/建工]校區的請求
503 504整合

支持 mutlipart 小寫MIME格式

部分request content MIME為小寫
content-disposition>> Content-Disposition
content-type >> Content-Type

會造成python cgi 沒辦法正確解析

請假功能 導師選擇問題

導師選擇問題

第一個問在discord上有提,研究生/沒有預設導師的學生,會需要手動去選擇導師,
gist json
並且在/leaves/submit/info 添加欄位,讓前端可以得知使用者需不需要手動選擇導師.

最新消息 額外的管理員登入方式

目前最新消息的管理員驗證,是透過校務系統登入後
判斷JWT裡的username是否為管理員的帳號

在校務系統維護時,會有沒有辦法管理最新消息的問題

  1. 在環境變數中,輸入管理員帳號密碼
    透過/oauth/token做判斷
    (可以在falcon JWT middleware 就判斷並返回)

  2. 在環境變數中,輸入管理員帳號密碼
    額外開設一組管理員的登入API 來發 JWT
    像是 /oauth/admin/token
    (可以在討論)

最新消息 新增/刪除/更新 的API

從SQLite改為Redis 不像是v2有flask的框架可以快速修改內容

開出API並且驗證管理員等等

管理介面前端再另討論 (github page or more ...)

修正 leaves 字眼至 leave

文件初是只有查詢請假單,leaves 指複數資料

目前 leave 下擁有較多功能,Python上是採用學校的命名方法 leave

統一 api route

/leaves >> /leave/all
/leaves/submit >> /leave/submit
/leaves/submit/info >> /leave/submit/info

請假功能 送出假單的資料格式問題

目前請假功能爬蟲部分已經完成
但在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!!!!!"
}

欄位上資料上並沒有任何問題

問題

這次請假功能是需要包含「請假證明」的,必須要有傳遞圖片的方式

提供以下幾種討論


1. 改為multipart/form-data

跟基本的form-data並無太大差異
POST的資料

leavesData: "{"days":"2019/03/03".....}"
leavesProof: image file  

如果將leavesData中的json改成form-data的欄位
會造成後端資料處理繁瑣,我的建議是 我給的POST資料這樣
(falcon 現階段不支援 multipart 可以透過內建cgi 或是外部庫擴充 )
(falcon 官方說是未來功能之一)


2-1. 一樣為json ,但透過第三方圖片伺服器

(前端可串接第三方的圖片上傳服務)

在原有的POST資料中加入proof_url的欄位
後端再依據欄位中的url去下載圖片並上傳給學校


2-2. 一樣為json ,但透過我們開的API上傳圖片

再另開一個API提供上傳圖片的服務
舉例/leaves/submit/proof/upload
並返回一組

{
    "imageHash":"fovobgpsd33dfefp"
}

在原有的API POST資料上加入這個欄位


2-3. 一樣為json ,但透過base64包含在原json

圖片轉為base64後,放入原POST json資料中

學期成績新增系排欄位

現行學校有支援查詢系排名
API /user/scores
新增欄位 departmentRank
API格式

{
   "detail": {
       "conduct": 82,
       "average": 39,
       "classRank": "57/57",
       "departmentRank":"12/123",
       "classPercentage": 100
    }
}

bus 部分格式錯誤

/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

請假申請 爬蟲選擇日期出錯

使用者輸入西元年後需要轉換成民國年

遺漏了捕0 造成無法正確選擇日期

2019/10/01 >> 108/10/1

學校格式為 108/10/01
造成無法選擇日期

處理反爬的部分

IP被阻擋,也有可能是有錯誤登入太多次

  • Proxy Pool (get_session 使用者自行設定)

  • 登入問題

bus 預約status code 錯誤

在預定校車/取消預約
原有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並不能返回資料給使用者,必須更改

修正proofImage 檔名的檢驗

這個無關dio的問題

 if leave_proof_image_bytes.multipart_filename[-3:] not in ['png', 'jpg', 'jpeg', 'PNG', "JPG", "JPEG"]:

如是-3的話不應該有4個字做判斷

臨時的切換驗證伺服器

因學校校務系統近期暫時關閉
臨時切換至請假系統做帳號驗證

當使用請假伺服器做驗證時,關閉部分校務系統api (404)

API 文件問題User部分

部分status code 過多
學校網站並沒有一個正常的status code來判斷
故簡化

學校課表/教室查詢,有些許修改,需要修改回傳格式

請假功能 流程問題

導師選擇問題

move #43 .


流程問題

這邊提出一個想法

使用者發送請假資訊&請假證明 >> API接收,檢查欄位是否正確後,立即返回一組task id(隨機) >> (後端再慢慢的幫他送請假)

  1. 使用者可以透過task id 查詢到目前後端處理的進度 (開一個新的API)
    成功失敗都顯示
  2. 使用者可以查詢自己所有的請假進度(後端的請假進度) (也是開一個新的API)
    (或是以上2個擇一,我比較傾向使用第2點)

後端請假紀錄保存24h
後續要查詢請假紀錄,如果是成功的,應該會在假單查詢看到(學校架單)


跨日請假, 請的節數越多,花費的時間就越久
可能需要這樣來減少使用者等待的時間

什麼爛請假系統,最難爬的網站沒有之一

JWT secret key 透過其他外部變數設定

如題

之後可能會有服務拆分或是有新的服務(選課評價)

目前�JWT secret key 只透過第一次產生,後續保存在redis

並不能從外部用其他方式指定

docker secrets
或是環境變數

請假系統多項bug

  1. 請假節次順序都偏移一節課
  2. 事假請假失敗
    3 .無法請"武漢肺炎防疫假" "出國請假"

支援學校各項QR掃描

除課堂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

更好的校車時刻表

在獲取單天時刻表,需要約1s上下的延遲

一般的時刻表,上面會有這個user預約狀態
講白了就是一份普通的時刻表自己預定的表單的融合

但在獲取自己的校車預約表單只需要 100~200ms

可以做到
全部學生共用一份時刻表 並且延長cache過期時間
(過期時間可以設定為那一天時刻表+1 day)
在單獨載入 自己預定的表單做合併

可以讓第一次讀入的時間加快許多

至於 校車過了預約時間
可以利用json檢查,去算時間並且阻擋預約

[文件] 修改news/school回傳資訊

/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的欄位可以爬
需要移除

校車時刻表,短時間請求cache仍需要等待

�再book or unbook 在時刻表還沒更新之前就先做了刪除時刻表的動作

應該要修改成只需更新時刻表,不需要事先刪除

會造成再短時間請求,時刻表被刪除了,還是需要等待的狀況

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.