選課小幫手後端 Trace Code 紀錄 === 神秘 api  主要API如上,U、G、N、O代表大學部、研究所等 系所關鍵檔案  可能須每學期手動整理,可在登入後於 [https://onepiece2-sso.nchu.edu.tw/cofsys/plsql/crseqry_home](https://onepiece2-sso.nchu.edu.tw/cofsys/plsql/crseqry_home) 利用JavaScript ```javascript= document.querySelector("body > p > table:nth-child(9) > tbody > tr:nth-child(2) > td > table > tbody > tr:nth-child(2) > td:nth-child(2) > table:nth-child(1) > tbody > tr:nth-child(1) > td:nth-child(16) > span > select").innerText ``` 取得資料 稍微看了一下[課程查詢](https://onepiece2-sso.nchu.edu.tw/cofsys/plsql/crseqry_home)的post參數如下,滿直覺的。 ``` v_year: // 年分,空白預設就是最新的 v_career: U // 大學部 v_excel: 0 // 跟匯出excel有關,不太重要 v_dept: U56 // 系級代碼 v_level: 3 // 年級 v_text: // 課程名稱 v_teach: // 授課老師 v_week: // 禮拜幾 v_mtg: // 第幾節 v_lang: // 授課語言 ``` --- ## File Tree 重點都在apps資料夾裡,以下只看/apps ### /apps/scrawler 利用`subprocess`每0.6秒跑一次爬蟲(頻率應該不用這麼高),無窮迴圈 #### /apps/scrawler/scrawler/spiders/NCHU.py 爬蟲本身,利用 https://onepiece.nchu.edu.tw/cofsys/plsql/json_for_course 查尋,後方可接上參數`?p_career=U(, G, O, N)`查尋特定學制的課表 似乎有使用資料庫,但目前找不到code,之後可以考慮是否要用資料庫 API回傳的是json,看看有沒有其他直接parse的方法 #### /apps/scrawler/scrawler/spiders/NCHU/department.json 系所資料,之後要重抓 ### /apps/cal ~~前端處理,用智慧行事曆改來的,使用`django`編寫 `django`這邊不太熟,看有沒有熟的來解析一下~~ - urls .py (cal/cal/) - 根據request URL將HTTP request重定向到相應的view - 依序run每個URL pattern,符合則call後面的function(在view.py內) - django 1.0 -> 3.0 - 設定urlpatterns : url()->path(),re_path()(正規,用法同url()) - models .py - 管理和查詢數據 - view .py - Web客戶端接收HTTP request並返回HTTP response #### timetable - 課表 - urls.py 根據request呼叫view.py內的function,並以此去決定要以何方法查詢models.py內的數據 #### tiagenda - 排課小幫手 --- ## Reborn(? * 如果是API可以用`FastAPI`寫就好 * 界面看要用`FastAPI + ninja2`還是`Django`寫 * 夠閒的話可以寫`line bot`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up