Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New SPbU Timetable API #15

Merged
merged 2 commits into from
Oct 7, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 11 additions & 8 deletions flask_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ def start_handler(message):
if message.text == "/start":
answer += "Приветствую!\n"
answer += "Укажи свое направление:"
divisions = requests.get(
"https://timetable.spbu.ru/api/v1/divisions").json()
url = "https://timetable.spbu.ru/api/v1/study/divisions"
divisions = requests.get(url).json()
division_names = [division["Name"] for division in divisions]
divisions_keyboard = telebot.types.ReplyKeyboardMarkup(True, False)
for division_name in division_names:
Expand Down Expand Up @@ -503,6 +503,8 @@ def schedule_update_handler(message):
bot.reply_to(message, answer)


# TODO educator schedule
'''
@bot.message_handler(func=lambda mess: mess.text == emoji["bust_in_silhouette"],
content_types=["text"])
def educator_schedule_handler(message):
Expand All @@ -511,6 +513,7 @@ def educator_schedule_handler(message):
markup = telebot.types.ForceReply(False)
bot.send_message(message.chat.id, answer, reply_markup=markup,
parse_mode="HTML")
'''


@bot.message_handler(func=lambda mess: mess.reply_to_message is not None and
Expand All @@ -522,7 +525,7 @@ def write_educator_name_handler(message):
bot.send_chat_action(message.chat.id, "typing")
answer = ""
name = message.text
url = "https://timetable.spbu.ru/api/v1/educators?q={}".format(name)
url = "https://timetable.spbu.ru/api/v1/educators/search/{}".format(name)
educators_data = requests.get(url).json()

if educators_data["Educators"] is None or len(
Expand Down Expand Up @@ -1036,15 +1039,15 @@ def select_day_handler(call_back):

@bot.callback_query_handler(func=lambda call_back:
call_back.data == "Отмена")
def another_day_handler(call_back):
def cancel_handler(call_back):
answer = "Отмена"
bot.edit_message_text(text=answer, chat_id=call_back.message.chat.id,
message_id=call_back.message.message_id)


@bot.callback_query_handler(func=lambda call_back:
"Выбери занятие:" in call_back.message.text)
def select_day_handler(call_back):
def select_lesson_handler(call_back):
answer = "Доступные занятия "
answer += call_back.message.text.split("\n\n")[0][17:] + "\n\n"
events = call_back.message.text.split("\n\n")[1:-1]
Expand Down Expand Up @@ -1182,7 +1185,7 @@ def statistics_handler(call_back):
answer = "Пока что нет оценок."
else:
rate = emoji["star"] * round(data[0])
answer = "Средняя оценка: {}\n".format(data[0])
answer = "Средняя оценка: {}\n".format(round(data[0], 1))
answer += "{} ({})".format(rate, data[1])
try:
bot.edit_message_text(text=answer,
Expand All @@ -1195,7 +1198,7 @@ def statistics_handler(call_back):

@bot.callback_query_handler(func=lambda call_back:
call_back.data == "Связь")
def statistics_handler(call_back):
def feedback_handler(call_back):
markup = telebot.types.ForceReply(False)
try:
bot.edit_message_text(text="Обратная связь",
Expand Down Expand Up @@ -1295,7 +1298,7 @@ def change_template_group_handler(call_back):
in call_back.message.text)
def select_master_id_handler(call_back):
answer = "{} Расписание преподавателя: <b>{}</b>\n\n{} {}"
url = "https://timetable.spbu.ru/api/v1/educator/{}/events".format(
url = "https://timetable.spbu.ru/api/v1/educators/{}/events".format(
call_back.data)
educator_schedule = requests.get(url).json()
answer = answer.format(emoji["bust_in_silhouette"],
Expand Down
15 changes: 9 additions & 6 deletions functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,19 +86,18 @@ def get_json_week_data(user_id, next_week=False):
sql_con = sqlite3.connect("Bot_db")
cursor = sql_con.cursor()
if next_week:
cursor.execute("""SELECT groups_data.alias, group_id, json_week_data
cursor.execute("""SELECT group_id, json_week_data
FROM groups_data
JOIN user_data
ON (groups_data.id = user_data.group_id AND
groups_data.alias = user_data.alias)
WHERE user_data.id= ?""", (user_id,))
data = cursor.fetchone()

alias, group_id = data[0], data[1]
next_week_monday = json.loads(data[2])["NextWeekMonday"]
url = "https://timetable.spbu.ru/api/v1/{}/".format(alias) + \
"studentgroup/{}/events".format(group_id) + \
"?weekMonday={}".format(next_week_monday)
group_id = data[0]
next_week_monday = json.loads(data[1])["NextWeekMonday"]
url = "https://timetable.spbu.ru/api/v1/groups/{}/events/{}".format(
group_id, next_week_monday)
json_week_data = requests.get(url).json()
else:
cursor.execute("""SELECT json_week_data
Expand Down Expand Up @@ -177,6 +176,10 @@ def create_schedule_answer(day_info, full_place, user_id=None, personal=True,
location["EducatorIds"]]
answer += "; ".join(educators) + ")</i>\n"
answer += "\n"

if len(answer.strip().split("\n\n")) == 1:
return emoji["sleep"] + " Выходной"

return answer


Expand Down
23 changes: 11 additions & 12 deletions registration_functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,9 @@ def select_division(message):
study_programs_keyboard = telebot.types.ReplyKeyboardMarkup(True, False)
index = division_names.index(message.text)
alias = aliases[index]
study_programs = requests.get(
"https://timetable.spbu.ru/api/v1/{}/studyprograms".format(alias)
).json()
url = "https://timetable.spbu.ru/api/v1/study/divisions/{}/" \
"programs/levels".format(alias)
study_programs = requests.get(url).json()
for study_program in study_programs:
study_programs_keyboard.row(study_program["StudyLevelName"])
study_programs_keyboard.row("Другое направление")
Expand Down Expand Up @@ -210,7 +210,7 @@ def select_admission_year(message):
sql_con = sqlite3.connect("Bot_db")
cursor = sql_con.cursor()
cursor.execute("""SELECT study_programs_json, study_level_name,
study_program_combination_name, alias
study_program_combination_name
FROM user_choice
WHERE user_id = ?""", (message.chat.id,))
data = cursor.fetchone()
Expand All @@ -220,7 +220,6 @@ def select_admission_year(message):
study_programs = json.loads(data[0])
study_level_name = data[1]
study_program_combination_name = data[2]
alias = data[3]
study_level_names = []
for study_program in study_programs:
study_level_names.append(study_program["StudyLevelName"])
Expand All @@ -241,11 +240,11 @@ def select_admission_year(message):
answer += "Укажи группу:"
index = admission_year_names.index(message.text)
study_program_id = admission_years[index]["StudyProgramId"]
url = "https://timetable.spbu.ru/api/v1/{}/".format(alias) + \
"studyprogram/{}/studentgroups".format(study_program_id)
url = "https://timetable.spbu.ru/api/v1/progams/{}/groups".format(
study_program_id)
student_groups = requests.get(url).json()
student_group_names = []
for student_group in student_groups:
for student_group in student_groups["Groups"]:
student_group_names.append(student_group["StudentGroupName"])
student_groups_keyboard = telebot.types.ReplyKeyboardMarkup(True, False)
for student_group_name in student_group_names:
Expand Down Expand Up @@ -302,11 +301,11 @@ def select_student_group(message):

student_groups = json.loads(data)
student_group_names = []
for student_group in student_groups:
for student_group in student_groups["Groups"]:
student_group_names.append(student_group["StudentGroupName"])
if message.text in student_group_names:
index = student_group_names.index(message.text)
student_group_id = student_groups[index]["StudentGroupId"]
student_group_id = student_groups["Groups"][index]["StudentGroupId"]

sql_con = sqlite3.connect("Bot_db")
cursor = sql_con.cursor()
Expand Down Expand Up @@ -382,8 +381,8 @@ def confirm_choice(message):
cursor.execute("""DELETE FROM user_choice WHERE user_id = ?""",
(message.chat.id,))
sql_con.commit()
url = "https://timetable.spbu.ru/api/v1/{}/".format(alias) + \
"studentgroup/{}/events".format(group_id)
url = "https://timetable.spbu.ru/api/v1/groups/{}/events".format(
group_id)
week_data = requests.get(url).json()
data = json.dumps(week_data)
try:
Expand Down
4 changes: 2 additions & 2 deletions sql_updater.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ def schedule_update():
groups = cursor.fetchall()
for group in groups:
group_id, alias = group[0], group[1]
url = "https://timetable.spbu.ru/api/v1/{}/".format(alias) + \
"studentgroup/{}/events".format(group_id)
url = "https://timetable.spbu.ru/api/v1/groups/{}/events".format(
group_id)
json_week_data = requests.get(url).json()
data = json.dumps(json_week_data)
cursor.execute("""UPDATE groups_data
Expand Down
22 changes: 10 additions & 12 deletions test_test.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import requests
import time
import unittest
from random import randint
from functions import create_schedule_answer
Expand All @@ -11,7 +10,7 @@ def everything_ok():

def get_all_aliases():
aliases = []
url = "https://timetable.spbu.ru/api/v1/divisions"
url = "https://timetable.spbu.ru/api/v1/study/divisions"
data = requests.get(url).json()
for alias in data:
aliases.append(alias["Alias"])
Expand All @@ -20,28 +19,27 @@ def get_all_aliases():

def all_group_ids_for_alias(alias):
group_ids = []
url = "https://timetable.spbu.ru/api/v1/{}/studyprograms".format(alias)
url = "https://timetable.spbu.ru/api/v1/study/divisions/{}/" \
"programs/levels".format(alias)
study_programs_data = requests.get(url).json()
for study_program in study_programs_data:
for study_program_combination in study_program[
"StudyProgramCombinations"]:
for admission_year in study_program_combination["AdmissionYears"]:
if not admission_year["IsEmpty"]:
study_program_id = admission_year["StudyProgramId"]
url = "https://timetable.spbu.ru/api/v1/{}/studyprogram" \
"/{}/studentgroups".format(alias, study_program_id)
url = "https://timetable.spbu.ru/api/v1/progams/{}/" \
"groups".format(study_program_id)
groups_data = requests.get(url).json()
for group in groups_data:
for group in groups_data["Groups"]:
group_ids.append(group["StudentGroupId"])
time.sleep(2)
print(alias, "Done")
return group_ids


def get_group_week_schedules(alias, group_id):
def get_group_week_schedules(group_id):
answers = []
url = "https://timetable.spbu.ru/api/v1/{}/studentgroup/{}/" \
"events".format(alias, group_id)
url = "https://timetable.spbu.ru/api/v1/groups/{}/events".format(group_id)
json_data = requests.get(url).json()
for day_info in json_data["Days"]:
answer = create_schedule_answer(day_info, full_place=True,
Expand All @@ -54,7 +52,7 @@ def get_all_schedules():
all_answer = []
for alias in get_all_aliases():
for group_id in all_group_ids_for_alias(alias):
all_answer.append(get_group_week_schedules(alias, group_id))
all_answer.append(get_group_week_schedules(group_id))
return all_answer


Expand All @@ -64,7 +62,7 @@ def test_string(self):
aliases = get_all_aliases()
alias = aliases[randint(0, len(aliases) - 1)]
for group_id in all_group_ids_for_alias(alias):
for day_answer in get_group_week_schedules(alias, group_id):
for day_answer in get_group_week_schedules(group_id):
print(alias, group_id, day_answer.split("\n")[0][2:])
self.assertTrue(day_answer)

Expand Down