2021-07-25 11:13:58 +03:00

127 lines
5.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from __future__ import print_function
import os.path
from googleapiclient.discovery import _MEDIA_SIZE_BIT_SHIFTS, build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
# If modifying these scopes, delete the file token.json.
SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly']
# ID таблицы и range (страница + интересующие ячейки).
# Эти данные скрывать не нужно, так как таблица не доступна другим пользователям
SAMPLE_SPREADSHEET_ID = '1peseFgZ-Or5N711ja4po05dyM6gzPzFTtvQWk3jR2eM'
SAMPLE_RANGE_NAME = 'Успеваемость!A1:AAA'
STUDENT_NAME = 'Бронвальд Леонид'
def main():
creds = None
# The file token.json stores the user's access and refresh tokens, and is
# created automatically when the authorization flow completes for the first
# time.
if os.path.exists('token.json'):
creds = Credentials.from_authorized_user_file('token.json', SCOPES)
# If there are no (valid) credentials available, let the user log in.
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(
'client_secret.json', SCOPES)
creds = flow.run_local_server(port=0)
# Save the credentials for the next run
with open('token.json', 'w') as token:
token.write(creds.to_json())
service = build('sheets', 'v4', credentials=creds)
# Создание запроса и получение значений таблицы
sheet = service.spreadsheets()
result = sheet.values().get(spreadsheetId=SAMPLE_SPREADSHEET_ID,
range=SAMPLE_RANGE_NAME).execute()
values = result.get('values', [])
# Генерация ответа на запрос
message = f'Рада тебя видеть, {STUDENT_NAME}! '
# Нахождение номера студента со смещением для поиска в таблице
# (можно пользоваться номером студента, а не его именем, но список студентов может меняться
# из-за отчислений других студентов)
studentNumber = -1
for row, value in enumerate(values):
if STUDENT_NAME in value:
studentNumber = row
break
# Ошибка поиска
if studentNumber == -1:
message += 'К сожалению, не удалось найти тебя в таблице успеваемости. За помощью обратись к Фариду.'
print(message)
return message
message += 'На данный момент твои результаты выглядят следующим образом:\n\n'
# Поиск типов заданий и генерация сообщений по этим заданиям
isWritten = True # Переменная из-за нулей в пустой сумме
for col, value in enumerate(values[0]):
# Обработка ИДЗ и ДЗ в таблице
if 'ДЗ' in value:
message += f'\t{value}\n'
for colTask, numberTask in enumerate(values[1][col:]):
if numberTask:
message += f'{numberTask}. '
if values[studentNumber][col + colTask] == '1':
message += 'Засчитан.\n'
else:
message += 'Не засчитан.\n'
else:
break
# Обработка КР в таблице
elif 'КР' in value:
message += f'\t{value}\n'
if values[studentNumber][col]:
for colTask, numberTask in enumerate(values[1][col:]):
if numberTask:
message += f'{numberTask}. {values[studentNumber][col + colTask]}\n'
else:
break
else:
message += 'КР не проверена или не написана.\n\n'
isWritten = False
# Обработка штрафов
elif 'Ш' in value:
if values[studentNumber][col] == '0':
message += 'Штраф по этой работе отсутствует\n\n'
else:
message += f'Штраф по этой работе составляет {values[studentNumber][col]}\n\n'
# Обработка суммы в таблице (после кр и после дз)
elif 'S' in value:
if isWritten:
message += f'Сумма работы составляет: {values[studentNumber][col]}\n\n'
isWritten = True
# Обработка итоговой оценки в таблице (пример по матану, с оценкой и без допуска)
elif 'Итого' in value:
if values[studentNumber][col]:
message += f'Итоговая оценка составляет: {values[studentNumber][col]}\n'
else:
message += 'Итоговая оценка ещё не выставлена.\n'
# Обработка количества баллов
elif 'Баллы' in value:
message += f'Баллов за семестр набрано: {values[studentNumber][col]}\n\n'
# Проверка
print(message)
return message
if __name__ == '__main__':
main()