mirror of
https://github.com/Faridik/Carolyn.git
synced 2026-07-08 13:21:53 +00:00
add read-only working with sheets
This commit is contained in:
parent
aac92a8d75
commit
cfd42275f6
4
.gitignore
vendored
4
.gitignore
vendored
@ -1 +1,3 @@
|
||||
.vscode
|
||||
.vscode
|
||||
/SpreadsheetsService/client_secret.json
|
||||
/SpreadsheetsService/token.json
|
||||
|
||||
127
SpreadsheetsService/sheets.py
Normal file
127
SpreadsheetsService/sheets.py
Normal file
@ -0,0 +1,127 @@
|
||||
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()
|
||||
Loading…
x
Reference in New Issue
Block a user