計算機程式第三週課程內容. 各教學影片均需透過 @nfu 登錄的 Onedrive 帳號登入後, 才能觀看.
針對 Proxy 設定無法存檔
有關電腦輔助設計室中, 代理主機設定無法存檔的問題, 可以參考cp2022 w3 cadlab 網路設定影片 (必須登入 @nfu Teams 帳號) 中的說明, 主要設定流程為直接進入 Windows Registry 進行設定後, 將設定內容匯出為 .reg 檔案後, 放入隨身碟, 下一次重新開機後, 可以利用滑鼠左鍵雙點擊 .reg 檔案, 就可以完成自動設定.
網誌與課程內容回顧
教學影片: 課程網誌製作與先前課程內容回顧
ethercalc 登錄與 RDT
教學影片: ethercalc登錄 Github 帳號 - 遠端桌面與虛擬主機介紹
倉儲與 Github Pages
教學影片: 課程倉儲與 Github Pages 網頁設定教學
從教務主機擷取學員名單
原先配置在 Heroku 的 [nfulist] 網際程式, 由於校務主機已經排除台灣境外網段連接, 且 Heroku 也即將終止免費帳號使用. 因此只能將程式配置在系工作站室中的電腦. 程式如下, 目前以 Ubuntu 22.04 實體主機下的 Virtualbox Win10 虛擬主機運行. 採 waitress 模式配置, 以 nssm 安排成為系統服務.
# 以 Flask 作為網際框架,
from flask import Flask, request
# 允許跨網站擷取資料
from flask_cors import CORS
# 利用 requests 取回網站中的頁面資料
import requests
# 利用 beautifulsoup 解讀超文件網頁內容
import bs4
# 若在近端啟動也要採用 SSL 時導入
#import ssl
'''
2022 Fall 各班課程代號
1a - 2b
?semester=1111&courseno=0747&column=True
?semester=1111&courseno=0761&column=True
?semester=1111&courseno=0773&column=True
?semester=1111&courseno=0786&column=True
'''
proxies ={
'http': 'http://account:password@[2001:288:6004:17::4]:3128',
'https': 'http://account:password@[2001:288:6004:17::4]:3128'
}
app = Flask(__name__)
CORS(app)
@app.route('/studlist')
@app.route('/')
def studlist():
semester = request.args.get('semester')
courseno = request.args.get('courseno')
column = request.args.get('column')
if semester == None:
semester = '1091'
if courseno == None:
courseno = '0762'
headers = {'X-Requested-With': 'XMLHttpRequest'}
url = 'https://qry.nfu.edu.tw/studlist_ajax.php'
post_var = {'pselyr': semester, 'pseqno': courseno}
# 可透過 Proxy server 執行程式
#result = requests.post(url, data = post_var, headers = headers, proxies = proxies)
result = requests.post(url, data = post_var, headers = headers)
soup = bs4.BeautifulSoup(result.content, 'lxml')
table = soup.find('table', {'class': 'tbcls'})
data = []
rows = table.find_all('tr')
for row in rows:
cols = row.find_all('td')
cols = [ele.text.strip() for ele in cols]
data.append([ele for ele in cols if ele]) # Get rid of empty values
output = ""
for i in data[2:]:
#print(i[0])
if column == "True":
output +=i[0] + ""
else:
output +=i[0] + "\n"
return output
#return str(pselyr) + " + " +str(pseqno)
# 即使在近端仍希望以 https 模式下執行
#context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
#context.load_cert_chain('localhost.crt', 'localhost.key')
if __name__ == '__main__':
app.run(host='127.0.0.1', port=8080, debug=True)
2022 Fall 學員名單:
- 1a 計算機程式修課學員名單 (取自教務主機)
- 1b 計算機程式修課學員名單 (取自教務主機)
- 2a 電腦輔助設計與實習修課學員名單 (取自教務主機)
- 2b 電腦輔助設計與實習修課學員名單 (取自教務主機)