initial commit
This commit is contained in:
208
api/actions.py
Normal file
208
api/actions.py
Normal file
@@ -0,0 +1,208 @@
|
||||
import requests
|
||||
import json
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
|
||||
|
||||
def getGroups(returnJson = 0):
|
||||
headers = {'X-Requested-With': 'XMLHttpRequest',
|
||||
'User-Agent': 'Mozilla/5.0',
|
||||
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
|
||||
|
||||
url = "http://tplan.madi.ru/tasks/task3,7_fastview.php"
|
||||
|
||||
|
||||
response = requests.get(url = url, headers=headers)
|
||||
response.encoding = 'utf-8'
|
||||
|
||||
soup = BeautifulSoup(response.content, 'lxml')
|
||||
|
||||
groups = {}
|
||||
for td in soup.findAll("ul"):
|
||||
for a in td.findAll("li"):
|
||||
groups[a.text.lower()] = a['value']
|
||||
|
||||
if returnJson:
|
||||
return json.dumps(groups, ensure_ascii=False)
|
||||
|
||||
return(groups)
|
||||
|
||||
def getGroupsList(returnJson = 0):
|
||||
headers = {'X-Requested-With': 'XMLHttpRequest',
|
||||
'User-Agent': 'Mozilla/5.0',
|
||||
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
|
||||
|
||||
url = "http://tplan.madi.ru/tasks/task3,7_fastview.php"
|
||||
|
||||
|
||||
response = requests.get(url = url, headers=headers)
|
||||
response.encoding = 'utf-8'
|
||||
|
||||
soup = BeautifulSoup(response.content, 'lxml')
|
||||
|
||||
groups = {}
|
||||
for td in soup.findAll("ul"):
|
||||
for a in td.findAll("li"):
|
||||
groups[a.text.lower()] = a.text.lower()
|
||||
|
||||
if returnJson:
|
||||
return json.dumps(groups, ensure_ascii=False)
|
||||
|
||||
return(groups)
|
||||
|
||||
|
||||
def getDepart(returnJson = 0):
|
||||
headers = {'X-Requested-With': 'XMLHttpRequest',
|
||||
'User-Agent': 'Mozilla/5.0',
|
||||
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
|
||||
|
||||
url = "http://tplan.madi.ru/tasks/task11_kafview.php"
|
||||
|
||||
|
||||
response = requests.get(url = url, headers=headers)
|
||||
response.encoding = 'utf-8'
|
||||
|
||||
soup = BeautifulSoup(response.content, 'lxml')
|
||||
|
||||
departaments = {}
|
||||
for td in soup.findAll('tr'):
|
||||
for t in td.findAll('td'):
|
||||
for a in t.findAll('option'):
|
||||
departaments[a.text.lower()] = a['value']
|
||||
|
||||
if returnJson:
|
||||
return json.dumps(departaments, ensure_ascii=False)
|
||||
|
||||
return(departaments)
|
||||
|
||||
def getTeach(returnJson = 0):
|
||||
headers = {'X-Requested-With': 'XMLHttpRequest',
|
||||
'User-Agent': 'Mozilla/5.0',
|
||||
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
|
||||
|
||||
url = "http://tplan.madi.ru/tasks/task8_prepview.php"
|
||||
|
||||
|
||||
response = requests.get(url = url, headers=headers)
|
||||
response.encoding = 'utf-8'
|
||||
|
||||
soup = BeautifulSoup(response.content, 'lxml')
|
||||
|
||||
teaches = {}
|
||||
for td in soup.findAll('tr'):
|
||||
for t in td.findAll('td'):
|
||||
for a in t.findAll('option'):
|
||||
teaches[a.text.lower()] = a['value']
|
||||
|
||||
if returnJson:
|
||||
return json.dumps(teaches, ensure_ascii=False)
|
||||
|
||||
return(teaches)
|
||||
|
||||
|
||||
def getFastPlan(gp_name, gp_id):
|
||||
headers = {'X-Requested-With': 'XMLHttpRequest',
|
||||
'User-Agent': 'Mozilla/5.0',
|
||||
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
|
||||
|
||||
url = "http://tplan.madi.ru/tasks/tableFiller.php"
|
||||
params = {
|
||||
'tab': '7',
|
||||
'gp_name': gp_name,
|
||||
'gp_id': gp_id}
|
||||
response = requests.post(url = url, data = params, headers=headers)
|
||||
response.encoding = 'utf-8'
|
||||
|
||||
table_data = [[cell.text for cell in row()]
|
||||
for row in BeautifulSoup(response.text, 'lxml')("tr")]
|
||||
|
||||
|
||||
|
||||
dictOfWords = { i : table_data[i] for i in range(0, len(table_data) ) }
|
||||
|
||||
|
||||
return(json.dumps(dict(dictOfWords), ensure_ascii=False))
|
||||
|
||||
|
||||
def getExtPlan(gp_name, gp_id, sem_no, tp_year):
|
||||
headers = {'X-Requested-With': 'XMLHttpRequest',
|
||||
'User-Agent': 'Mozilla/5.0',
|
||||
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
|
||||
|
||||
url = "http://tplan.madi.ru/tasks/tableFiller.php"
|
||||
params = {
|
||||
'tab': '7',
|
||||
'gp_name': gp_name,
|
||||
'gp_id': gp_id,
|
||||
'sem_no': sem_no,
|
||||
'tp_year': tp_year}
|
||||
response = requests.post(url = url, data = params, headers=headers)
|
||||
response.encoding = 'utf-8'
|
||||
|
||||
table_data = [[cell.text for cell in row()]
|
||||
for row in BeautifulSoup(response.text, 'lxml')("tr")]
|
||||
|
||||
|
||||
|
||||
dictOfWords = { i : table_data[i] for i in range(0, len(table_data) ) }
|
||||
|
||||
|
||||
return(json.dumps(dict(dictOfWords), ensure_ascii=False))
|
||||
|
||||
|
||||
def getDeptPlan(dep_name, dep_id, sem_no, tp_year):
|
||||
headers = {'X-Requested-With': 'XMLHttpRequest',
|
||||
'User-Agent': 'Mozilla/5.0',
|
||||
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
|
||||
|
||||
url = "http://tplan.madi.ru/tasks/tableFiller.php"
|
||||
params = {
|
||||
'tab': '11',
|
||||
'kf_name': dep_name,
|
||||
'kf_id': dep_id,
|
||||
'sort': 1,
|
||||
'sem_no': sem_no,
|
||||
'tp_year': tp_year}
|
||||
response = requests.post(url = url, data = params, headers=headers)
|
||||
response.encoding = 'utf-8'
|
||||
|
||||
table_data = [[cell.text for cell in row()]
|
||||
for row in BeautifulSoup(response.text, 'lxml')("tr")]
|
||||
|
||||
|
||||
|
||||
dictOfWords = { i : table_data[i] for i in range(0, len(table_data) ) }
|
||||
|
||||
|
||||
return(json.dumps(dict(dictOfWords), ensure_ascii=False))
|
||||
|
||||
|
||||
def getTeachPlan(teach_name, teach_id, sem_no, tp_year):
|
||||
headers = {'X-Requested-With': 'XMLHttpRequest',
|
||||
'User-Agent': 'Mozilla/5.0',
|
||||
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
|
||||
|
||||
url = "http://tplan.madi.ru/tasks/tableFiller.php"
|
||||
params = {
|
||||
'tab': '8',
|
||||
'pr_name': teach_name,
|
||||
'pr_id': teach_id,
|
||||
'sem_no': sem_no,
|
||||
'tp_year': tp_year}
|
||||
response = requests.post(url = url, data = params, headers=headers)
|
||||
response.encoding = 'utf-8'
|
||||
|
||||
table_data = [[cell.text for cell in row()]
|
||||
for row in BeautifulSoup(response.text, 'lxml')("tr")]
|
||||
|
||||
|
||||
|
||||
dictOfWords = { i : table_data[i] for i in range(0, len(table_data) ) }
|
||||
|
||||
|
||||
return(json.dumps(dict(dictOfWords), ensure_ascii=False))
|
||||
|
||||
if __name__ == '__main__':
|
||||
getGroups()
|
||||
|
||||
|
||||
113
api/app.py
Normal file
113
api/app.py
Normal file
@@ -0,0 +1,113 @@
|
||||
from flask import Flask, redirect, request
|
||||
from manual import man
|
||||
import actions
|
||||
import table_actions as t_actions
|
||||
|
||||
app = Flask(__name__)
|
||||
groups = actions.getGroups()
|
||||
dept = actions.getDepart()
|
||||
teach = actions.getTeach()
|
||||
|
||||
@app.route('/')
|
||||
def hello():
|
||||
return redirect("/api/v1.0/manual", code=302)
|
||||
|
||||
@app.errorhandler(404)
|
||||
def not_found(e):
|
||||
return redirect("/api/v1.0/manual", code=302)
|
||||
|
||||
@app.route('/api/v1.0/tplan1', methods=['GET'])
|
||||
def getTplan1():
|
||||
# http://127.0.0.1:5000/api/v1.0/tplan1?gp_name=2мбд1
|
||||
gp_name = request.args.get('gp_name', None)
|
||||
gp_id = groups[gp_name.lower()]
|
||||
return actions.getFastPlan(gp_name, gp_id)
|
||||
|
||||
@app.route('/api/v1.0/table/tplan1', methods=['GET'])
|
||||
def getTableTplan1():
|
||||
# http://127.0.0.1:5000/api/v1.0/table/tplan1?gp_name=2мбд1
|
||||
gp_name = request.args.get('gp_name', None)
|
||||
gp_id = groups[gp_name.lower()]
|
||||
return t_actions.getFastPlanTable(gp_name, gp_id)
|
||||
|
||||
@app.route('/api/v1.0/tplan2', methods=['GET'])
|
||||
def getTplan2():
|
||||
# http://127.0.0.1:5000/api/v1.0/tplan2?gp_name=2мбд1&sem_no=1&tp_year=19
|
||||
gp_name = request.args.get('gp_name', None)
|
||||
sem_no = request.args.get('sem_no', None)
|
||||
tp_year = request.args.get('tp_year', None)
|
||||
gp_id = groups[gp_name.lower()]
|
||||
return actions.getExtPlan(gp_name, gp_id, sem_no, tp_year)
|
||||
|
||||
@app.route('/api/v1.0/table/tplan2', methods=['GET'])
|
||||
def getTableTplan2():
|
||||
# http://127.0.0.1:5000/api/v1.0/table/tplan2?gp_name=2мбд1&sem_no=1&tp_year=19
|
||||
gp_name = request.args.get('gp_name', None)
|
||||
sem_no = request.args.get('sem_no', None)
|
||||
tp_year = request.args.get('tp_year', None)
|
||||
gp_id = groups[gp_name.lower()]
|
||||
return t_actions.getExtPlanTable(gp_name, gp_id, sem_no, tp_year)
|
||||
|
||||
@app.route('/api/v1.0/dep_plan', methods=['GET'])
|
||||
def getDplan():
|
||||
# http://127.0.0.1:5000/api/v1.0/dep_plan?dep_name=физики&sem_no=1&tp_year=19
|
||||
dep_name = request.args.get('dep_name', None)
|
||||
sem_no = request.args.get('sem_no', None)
|
||||
tp_year = request.args.get('tp_year', None)
|
||||
dep_id = dept[dep_name.lower()]
|
||||
return actions.getDeptPlan(dep_name, dep_id, sem_no, tp_year)
|
||||
|
||||
@app.route('/api/v1.0/table/dep_plan', methods=['GET'])
|
||||
def getTableDplan():
|
||||
# http://127.0.0.1:5000/api/v1.0/table/dep_plan?dep_name=физики&sem_no=1&tp_year=19
|
||||
dep_name = request.args.get('dep_name', None)
|
||||
sem_no = request.args.get('sem_no', None)
|
||||
tp_year = request.args.get('tp_year', None)
|
||||
dep_id = dept[dep_name.lower()]
|
||||
return t_actions.getDeptPlanTable(dep_name, dep_id, sem_no, tp_year)
|
||||
|
||||
@app.route('/api/v1.0/teach_plan', methods=['GET'])
|
||||
def getTeacPlan():
|
||||
# http://127.0.0.1:5000/api/v1.0/teach_plan?teach_name=суркова%20н.е.&sem_no=1&tp_year=19
|
||||
teach_name = request.args.get('teach_name', None)
|
||||
sem_no = request.args.get('sem_no', None)
|
||||
tp_year = request.args.get('tp_year', None)
|
||||
teach_id = teach[teach_name.lower()]
|
||||
return actions.getTeachPlan(teach_name, teach_id, sem_no, tp_year)
|
||||
|
||||
@app.route('/api/v1.0/table/teach_plan', methods=['GET'])
|
||||
def getTableTeacPlan():
|
||||
# http://127.0.0.1:5000/api/v1.0/table/teach_plan?teach_name=суркова%20н.е.&sem_no=1&tp_year=19
|
||||
teach_name = request.args.get('teach_name', None)
|
||||
sem_no = request.args.get('sem_no', None)
|
||||
tp_year = request.args.get('tp_year', None)
|
||||
teach_id = teach[teach_name.lower()]
|
||||
return t_actions.getTeachPlanTable(teach_name, teach_id, sem_no, tp_year)
|
||||
|
||||
@app.route('/api/v1.0/groups', methods=['GET'])
|
||||
def getGroupsDict():
|
||||
# http://127.0.0.1:5000/api/v1.0/groups
|
||||
return actions.getGroups(returnJson = 1)
|
||||
|
||||
@app.route('/api/v1.0/groupslist', methods=['GET'])
|
||||
def getGroupsListDict():
|
||||
# http://127.0.0.1:5000/api/v1.0/groups
|
||||
return actions.getGroupsList(returnJson = 1)
|
||||
|
||||
@app.route('/api/v1.0/departaments', methods=['GET'])
|
||||
def getDepartDict():
|
||||
# http://127.0.0.1:5000/api/v1.0/departaments
|
||||
return actions.getDepart(returnJson = 1)
|
||||
|
||||
@app.route('/api/v1.0/teaches', methods=['GET'])
|
||||
def getTeachDict():
|
||||
# http://127.0.0.1:5000/api/v1.0/teaches
|
||||
return actions.getTeach(returnJson = 1)
|
||||
|
||||
@app.route('/api/v1.0/manual', methods=['GET'])
|
||||
def getManual():
|
||||
# http://127.0.0.1:5000/api/v1.0/manual
|
||||
return man()
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(debug=True, port=5501)
|
||||
47
api/manual.py
Normal file
47
api/manual.py
Normal file
@@ -0,0 +1,47 @@
|
||||
def man():
|
||||
return(
|
||||
'''
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>Инструкция к API "Расписание МАДИ"</title>
|
||||
</head>
|
||||
<body>
|
||||
<h2>Получить список групп</h2>
|
||||
<p><a href=/api/v1.0/groups>/api/v1.0/groups</a></p>
|
||||
|
||||
<h2>Получить список кафедр</h2>
|
||||
<p><a href=/api/v1.0/departaments>/api/v1.0/departaments</a></p>
|
||||
|
||||
<h2>Получить список преподавателей</h2>
|
||||
<p><a href=/api/v1.0/teaches>/api/v1.0/teaches</a></p>
|
||||
|
||||
<h2>Получить расписание для группы в json (метод GET)</h2>
|
||||
<p><a href=/api/v1.0/tplan1?gp_name=2мбд1>/api/v1.0/tplan1?<gp_name></a></p>
|
||||
|
||||
<h2>Получить расписание для группы в HTML (метод GET)</h2>
|
||||
<p><a href=/api/v1.0/table/tplan1?gp_name=2мбд1>/api/v1.0/table/tplan1?<gp_name></a></p>
|
||||
|
||||
<h2>Получить расширенное расписание для группы в json (метод GET)</h2>
|
||||
<p><a href=/api/v1.0/tplan2?gp_name=2мбд1&sem_no=1&tp_year=19>/api/v1.0/tplan2?<gp_name>&<sem_no>&<tp_year></a></p>
|
||||
|
||||
<h2>Получить расширенное расписание для группы в HTML (метод GET)</h2>
|
||||
<p><a href=/api/v1.0/table/tplan2?gp_name=2мбд1&sem_no=1&tp_year=19>/api/v1.0/table/tplan2?<gp_name>&<sem_no>&<tp_year></a></p>
|
||||
|
||||
<h2>Получить расписание по кафедре в json (метод GET)</h2>
|
||||
<p><a href=/api/v1.0/dep_plan?dep_name=физики&sem_no=1&tp_year=19>/api/v1.0/dep_plan?<dep_name>&<sem_no>&<tp_year></a></p>
|
||||
|
||||
<h2>Получить расписание по кафедре в HTML (метод GET)</h2>
|
||||
<p><a href=/api/v1.0/table/dep_plan?dep_name=физики&sem_no=1&tp_year=19>/api/v1.0/table/dep_plan?<dep_name>&<sem_no>&<tp_year></a></p>
|
||||
|
||||
<h2>Получить расписание по преподавателю в json (метод GET)</h2>
|
||||
<p><a href=/api/v1.0/teach_plan?teach_name=суркова%20н.е.&sem_no=1&tp_year=19>/api/v1.0/teach_plan?<teach_name>&<sem_no>&<tp_year></a></p>
|
||||
|
||||
<h2>Получить расписание по преподавателю в HTML (метод GET)</h2>
|
||||
<p><a href=/api/v1.0/table/teach_plan?teach_name=суркова%20н.е.&sem_no=1&tp_year=19>/api/v1.0/table/teach_plan?<teach_name>&<sem_no>&<tp_year></a></p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
'''
|
||||
)
|
||||
76
api/table_actions.py
Normal file
76
api/table_actions.py
Normal file
@@ -0,0 +1,76 @@
|
||||
import requests
|
||||
|
||||
def getFastPlanTable(gp_name, gp_id):
|
||||
headers = {'X-Requested-With': 'XMLHttpRequest',
|
||||
'User-Agent': 'Mozilla/5.0',
|
||||
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
|
||||
|
||||
url = "http://tplan.madi.ru/tasks/tableFiller.php"
|
||||
params = {
|
||||
'tab': '7',
|
||||
'gp_name': gp_name,
|
||||
'gp_id': gp_id}
|
||||
response = requests.post(url = url, data = params, headers=headers)
|
||||
response.encoding = 'utf-8'
|
||||
|
||||
return(response.text)
|
||||
|
||||
def getExtPlanTable(gp_name, gp_id, sem_no, tp_year):
|
||||
headers = {'X-Requested-With': 'XMLHttpRequest',
|
||||
'User-Agent': 'Mozilla/5.0',
|
||||
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
|
||||
|
||||
url = "http://tplan.madi.ru/tasks/tableFiller.php"
|
||||
params = {
|
||||
'tab': '7',
|
||||
'gp_name': gp_name,
|
||||
'gp_id': gp_id,
|
||||
'sem_no': sem_no,
|
||||
'tp_year': tp_year}
|
||||
response = requests.post(url = url, data = params, headers=headers)
|
||||
response.encoding = 'utf-8'
|
||||
|
||||
return(response.text)
|
||||
|
||||
|
||||
def getDeptPlanTable(dep_name, dep_id, sem_no, tp_year):
|
||||
headers = {'X-Requested-With': 'XMLHttpRequest',
|
||||
'User-Agent': 'Mozilla/5.0',
|
||||
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
|
||||
|
||||
url = "http://tplan.madi.ru/tasks/tableFiller.php"
|
||||
params = {
|
||||
'tab': '11',
|
||||
'kf_name': dep_name,
|
||||
'kf_id': dep_id,
|
||||
'sort': 1,
|
||||
'sem_no': sem_no,
|
||||
'tp_year': tp_year}
|
||||
response = requests.post(url = url, data = params, headers=headers)
|
||||
response.encoding = 'utf-8'
|
||||
|
||||
return(response.text)
|
||||
|
||||
|
||||
def getTeachPlanTable(teach_name, teach_id, sem_no, tp_year):
|
||||
headers = {'X-Requested-With': 'XMLHttpRequest',
|
||||
'User-Agent': 'Mozilla/5.0',
|
||||
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
|
||||
|
||||
url = "http://tplan.madi.ru/tasks/tableFiller.php"
|
||||
params = {
|
||||
'tab': '8',
|
||||
'pr_name': teach_name,
|
||||
'pr_id': teach_id,
|
||||
'sem_no': sem_no,
|
||||
'tp_year': tp_year}
|
||||
response = requests.post(url = url, data = params, headers=headers)
|
||||
response.encoding = 'utf-8'
|
||||
|
||||
return(response.text)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
getFastPlanTable()
|
||||
|
||||
|
||||
16
api/tests.py
Normal file
16
api/tests.py
Normal file
@@ -0,0 +1,16 @@
|
||||
#!flask/bin/python
|
||||
|
||||
import unittest
|
||||
import os
|
||||
from app import app
|
||||
|
||||
class BasicTestCase(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.app = app.test_client()
|
||||
|
||||
def test_main_page(self):
|
||||
response = self.app.get('/api/v1.0/manual', content_type='html/text')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user