Merge branch 'dev' into tkinter
This commit is contained in:
commit
95a2bad77b
37
API_Usage.py
37
API_Usage.py
@ -1,7 +1,8 @@
|
|||||||
from config import CONFIG
|
from config import CONFIG
|
||||||
from api.moodle import Moodle
|
from api.moodle import MoodleAPI
|
||||||
from api.ncnuMain import NcnuMain
|
from api.ncnuMain import NcnuMainAPI
|
||||||
from api.ncnu import NCNU
|
from api.ncnu import NcnuAPI
|
||||||
|
from api.eventRigestry import EventRegistry
|
||||||
|
|
||||||
def space():
|
def space():
|
||||||
print("\n" + "="*20 + "\n")
|
print("\n" + "="*20 + "\n")
|
||||||
@ -9,7 +10,7 @@ def space():
|
|||||||
# =================== TEST Moodle API ==========================
|
# =================== TEST Moodle API ==========================
|
||||||
|
|
||||||
# ===== Test 登入 =====
|
# ===== Test 登入 =====
|
||||||
moodle = Moodle(CONFIG['moodle']['username'], CONFIG['moodle']['password'])
|
moodle = MoodleAPI(CONFIG['moodle']['username'], CONFIG['moodle']['password'])
|
||||||
if moodle.status:
|
if moodle.status:
|
||||||
|
|
||||||
# ===== Test 取得該學期課程資料 =====
|
# ===== Test 取得該學期課程資料 =====
|
||||||
@ -40,7 +41,7 @@ else:
|
|||||||
# =================== Test 暨大官網 API ==========================
|
# =================== Test 暨大官網 API ==========================
|
||||||
|
|
||||||
# ===== Test 取得暨大官網最新消息 =====
|
# ===== Test 取得暨大官網最新消息 =====
|
||||||
main = NcnuMain()
|
main = NcnuMainAPI()
|
||||||
for anno in main.getAnno():
|
for anno in main.getAnno():
|
||||||
print(anno)
|
print(anno)
|
||||||
space()
|
space()
|
||||||
@ -50,7 +51,7 @@ space()
|
|||||||
# =================== Test 暨大教務系統 API ==========================
|
# =================== Test 暨大教務系統 API ==========================
|
||||||
|
|
||||||
# ===== Test 登入 =====
|
# ===== Test 登入 =====
|
||||||
ncnu = NCNU(CONFIG['NCNU']['username'], CONFIG['NCNU']['password'])
|
ncnu = NcnuAPI(CONFIG['NCNU']['username'], CONFIG['NCNU']['password'])
|
||||||
if ncnu.status:
|
if ncnu.status:
|
||||||
|
|
||||||
# ===== Test 下載課表 =====
|
# ===== Test 下載課表 =====
|
||||||
@ -99,3 +100,27 @@ if ncnu.status:
|
|||||||
space()
|
space()
|
||||||
else:
|
else:
|
||||||
print("NCNU 教務系統登入失敗")
|
print("NCNU 教務系統登入失敗")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# =================== Test 暨大活動報名系統 API ==========================
|
||||||
|
|
||||||
|
# ===== Test 登入 =====
|
||||||
|
eventReg = EventRegistry(CONFIG['NCNU']['username'], CONFIG['NCNU']['password'])
|
||||||
|
if eventReg.status:
|
||||||
|
print("登入成功")
|
||||||
|
space()
|
||||||
|
|
||||||
|
# ===== Test 取得所有活動第一頁的列表 =====
|
||||||
|
for event in eventReg.getEventsList():
|
||||||
|
print(event)
|
||||||
|
space()
|
||||||
|
|
||||||
|
# ===== Test 報名前準備 request body =====
|
||||||
|
requestBody = eventReg.signUpPrepare('3010')
|
||||||
|
for key, value in requestBody.items():
|
||||||
|
print("{}: {}".format(key, value))
|
||||||
|
space()
|
||||||
|
else:
|
||||||
|
print("登入失敗")
|
||||||
|
|||||||
106
api/eventRigestry.py
Normal file
106
api/eventRigestry.py
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
import requests
|
||||||
|
from api.tools import *
|
||||||
|
|
||||||
|
class EventRegistry():
|
||||||
|
def __init__(self, username, password):
|
||||||
|
'''
|
||||||
|
initial 就登入
|
||||||
|
根據 self.status 判斷成功與否
|
||||||
|
'''
|
||||||
|
self.username = username # 學號
|
||||||
|
self.session = requests.Session()
|
||||||
|
self.status = self.login(username, password)
|
||||||
|
|
||||||
|
def login(self, username, password):
|
||||||
|
'''
|
||||||
|
登入活動報名系統
|
||||||
|
return bool
|
||||||
|
'''
|
||||||
|
# get login token
|
||||||
|
response = self.session.get('https://ccweb.ncnu.edu.tw/SLLL/login.asp')
|
||||||
|
loginToken = find(response, 'input', param={'name': 'token'}).get('value')
|
||||||
|
|
||||||
|
# request login page
|
||||||
|
response = self.session.post(
|
||||||
|
"https://ccweb.ncnu.edu.tw/SLLL/login.asp",
|
||||||
|
data={
|
||||||
|
'token': loginToken,
|
||||||
|
'username': username,
|
||||||
|
'password': password,
|
||||||
|
'type': ''
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
# 成功的話 return http 302, redirect
|
||||||
|
if len(response.history)!=0:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def getEventsList(self):
|
||||||
|
'''
|
||||||
|
取得活動列表中的第一頁
|
||||||
|
包含所有狀態的活動
|
||||||
|
'''
|
||||||
|
url = "https://ccweb.ncnu.edu.tw/SLLL/z6D3B52D553CA5831540D8CC7659967E58A62list.asp"
|
||||||
|
response = self.session.get(url)
|
||||||
|
|
||||||
|
with open('test.html') as fp:
|
||||||
|
response = fp.read()
|
||||||
|
|
||||||
|
root = BeautifulSoup(response, 'html.parser')
|
||||||
|
events = root.find('table').findAll('tr')
|
||||||
|
|
||||||
|
return [{
|
||||||
|
'id': getUrlParam(data[0].find('a').get('href').replace('&', '&'), 'RowID'),
|
||||||
|
# 活動詳細:
|
||||||
|
# https://ccweb.ncnu.edu.tw/SLLL/z6D3B52D553CA5831540D8CC7659967E58A62view.asp?showdetail=&RowID={}
|
||||||
|
|
||||||
|
'semester': data[1].text.replace('\n', ''),
|
||||||
|
'status': data[2].text.replace('\n', ''), # 活動報名狀態
|
||||||
|
'name': data[3].text.replace('\n', ''),
|
||||||
|
'time': data[4].text.replace('\n', ''), # 活動開始時間
|
||||||
|
'method': data[5].text.replace('\n', ''), # 報名方式
|
||||||
|
'hour': data[6].text.replace('\n', ''), # 時數
|
||||||
|
'speaker': data[7].text.replace('\n', ''), # 講師
|
||||||
|
'teacherEvent': data[8].text.replace('\n', ''), # 申請為教師知能活動
|
||||||
|
} for data in (event.findAll('td') for event in events[1:])]
|
||||||
|
|
||||||
|
def signUpPrepare(self, eventID):
|
||||||
|
'''
|
||||||
|
報名活動前的資料確認
|
||||||
|
return 報名系統預設給的資料,供使用者確認
|
||||||
|
'''
|
||||||
|
url = "https://ccweb.ncnu.edu.tw/SLLL/z7DDA4E0A5831540Dadd.asp?showmaster=z958B653E5831540D4E4B6D3B52D5660E7D30&fk_RowID={}"
|
||||||
|
response = self.session.get(url.format(eventID))
|
||||||
|
inputs = find(response, 'form').findAll('input')
|
||||||
|
|
||||||
|
values = [inputData.get('value') for inputData in inputs]
|
||||||
|
names = [inputData.get('name') for inputData in inputs]
|
||||||
|
|
||||||
|
# 僅下列資料可更改
|
||||||
|
# - x_iphone 校內分機
|
||||||
|
# - x_phone 聯絡電話
|
||||||
|
# - x_zemail EMAIL
|
||||||
|
# - x_remark 備註
|
||||||
|
|
||||||
|
ans = {}
|
||||||
|
for index in range(len(values)):
|
||||||
|
ans[names[index]] = values[index]
|
||||||
|
|
||||||
|
return ans
|
||||||
|
|
||||||
|
# 前端接收後,僅可更改上述四項 value
|
||||||
|
# 更改後送到 signUp(requestBody) function 中送出請求
|
||||||
|
|
||||||
|
def signUp(self, requestBody):
|
||||||
|
'''
|
||||||
|
目前禁止使用!!!
|
||||||
|
'''
|
||||||
|
url = "https://ccweb.ncnu.edu.tw/SLLL/z7DDA4E0A5831540Dadd.asp"
|
||||||
|
response = self.session.post(url, data=requestBody)
|
||||||
|
|
||||||
|
if response.status_code == 200:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
@ -4,7 +4,7 @@ from bs4 import BeautifulSoup
|
|||||||
from api.tools import *
|
from api.tools import *
|
||||||
import json
|
import json
|
||||||
|
|
||||||
class Moodle():
|
class MoodleAPI():
|
||||||
def __init__(self, username, password):
|
def __init__(self, username, password):
|
||||||
'''
|
'''
|
||||||
Create a Moodle object to handle Session
|
Create a Moodle object to handle Session
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import requests
|
import requests
|
||||||
from api.tools import *
|
from api.tools import *
|
||||||
|
|
||||||
class NCNU():
|
class NcnuAPI():
|
||||||
def __init__(self, username, password):
|
def __init__(self, username, password):
|
||||||
'''
|
'''
|
||||||
initial 就登入
|
initial 就登入
|
||||||
|
|||||||
@ -2,7 +2,7 @@ from api.tools import *
|
|||||||
import requests
|
import requests
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
class NcnuMain():
|
class NcnuMainAPI():
|
||||||
def getAnno(self):
|
def getAnno(self):
|
||||||
response = requests.get('https://www.ncnu.edu.tw/ncnuweb/ann/tabs.aspx?homeType=ncnu&unit=ncnu')
|
response = requests.get('https://www.ncnu.edu.tw/ncnuweb/ann/tabs.aspx?homeType=ncnu&unit=ncnu')
|
||||||
block = find(response, 'div', param={'id': 'annNews'})
|
block = find(response, 'div', param={'id': 'annNews'})
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user