From 6c812d3cce6ed89f90ac95665406682384147237 Mon Sep 17 00:00:00 2001 From: EeOneDown Date: Tue, 26 Sep 2017 23:43:01 +0300 Subject: [PATCH 1/2] rename some functions --- flask_app.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/flask_app.py b/flask_app.py index 2527c38..181eaa2 100644 --- a/flask_app.py +++ b/flask_app.py @@ -1036,7 +1036,7 @@ 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) @@ -1044,7 +1044,7 @@ def another_day_handler(call_back): @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] @@ -1182,7 +1182,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, @@ -1195,7 +1195,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="Обратная связь", From 03cf27274712dcbfaa0062e6b3c73a74582f3412 Mon Sep 17 00:00:00 2001 From: EeOneDown Date: Sat, 7 Oct 2017 17:17:24 +0300 Subject: [PATCH 2/2] new api requests and bug fixes --- flask_app.py | 11 +++++++---- functions.py | 15 +++++++++------ registration_functions.py | 23 +++++++++++------------ sql_updater.py | 4 ++-- test_test.py | 22 ++++++++++------------ 5 files changed, 39 insertions(+), 36 deletions(-) diff --git a/flask_app.py b/flask_app.py index 181eaa2..8e1959a 100644 --- a/flask_app.py +++ b/flask_app.py @@ -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: @@ -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): @@ -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 @@ -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( @@ -1295,7 +1298,7 @@ def change_template_group_handler(call_back): in call_back.message.text) def select_master_id_handler(call_back): answer = "{} Расписание преподавателя: {}\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"], diff --git a/functions.py b/functions.py index cd00053..426ad72 100644 --- a/functions.py +++ b/functions.py @@ -86,7 +86,7 @@ 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 @@ -94,11 +94,10 @@ def get_json_week_data(user_id, next_week=False): 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 @@ -177,6 +176,10 @@ def create_schedule_answer(day_info, full_place, user_id=None, personal=True, location["EducatorIds"]] answer += "; ".join(educators) + ")\n" answer += "\n" + + if len(answer.strip().split("\n\n")) == 1: + return emoji["sleep"] + " Выходной" + return answer diff --git a/registration_functions.py b/registration_functions.py index e9b019b..566853a 100644 --- a/registration_functions.py +++ b/registration_functions.py @@ -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("Другое направление") @@ -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() @@ -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"]) @@ -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: @@ -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() @@ -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: diff --git a/sql_updater.py b/sql_updater.py index 470f9a1..d66c9f2 100644 --- a/sql_updater.py +++ b/sql_updater.py @@ -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 diff --git a/test_test.py b/test_test.py index 2840fb2..f01e3e1 100644 --- a/test_test.py +++ b/test_test.py @@ -1,5 +1,4 @@ import requests -import time import unittest from random import randint from functions import create_schedule_answer @@ -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"]) @@ -20,7 +19,8 @@ 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[ @@ -28,20 +28,18 @@ def all_group_ids_for_alias(alias): 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, @@ -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 @@ -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)