Olá pessoal tudo bem?,
Conteúdo com objetivo de explicar passo a passo o funcionamento de um script Python que autentica um usuário, lista cursos no Google Classroom e permite a adição de alunos aos cursos. Este script utiliza várias bibliotecas da API do Google para autenticação e acesso ao Google Classroom.
E com isto nos é exibido também o ID da sala criada.
Bibliotecas Utilizadas :
os.path: Para verificar a existência de arquivos.
google.auth.transport.requests.Request: Para fazer solicitações de autenticação.
google.oauth2.credentials.Credentials: Para gerenciar credenciais OAuth 2.0.
google_auth_oauthlib.flow.InstalledAppFlow: Para gerenciar o fluxo de OAuth 2.0.
googleapiclient.discovery.build: Para construir o serviço de API do Google.
googleapiclient.errors.HttpError: Para tratar erros da API do Google.
Escopos necessários para pesquisa de módulos de ensalamento : SCOPES = [ "https://www.googleapis.com/auth/classroom.courses.readonly", "https://www.googleapis.com/auth/classroom.rosters" ]
Função Principal
Definição e Objetivo
A função main() é responsável por gerenciar todo o fluxo de autenticação e execução das ações principais do script:
def main(): """ Código usado para poder criar e exibir as salas do Google criadas e adicionar alunos aos cursos e exibir também o ID do curso criado. """
Autenticação
Verificação de Credenciais Existentes:
Verifica se o arquivo token.json (contendo credenciais salvas) existe.
Se existir, carrega as credenciais a partir desse arquivo.
creds = None if os.path.exists("token.json"): creds = Credentials.from_authorized_user_file("token.json", SCOPES)
*A token JSON é gerada na hora de autorizar o aplicativo para tal, existe uma, as tokens são diferentes das chaves criadas no ambiente *
**Autenticação e Renovação de Credenciais:
**
Se as credenciais não existem ou são inválidas, o script solicita autenticação.
Utiliza o fluxo de autenticação OAuth 2.0 para obter novas credenciais e salva em token.json.
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( "credentials.json", SCOPES ) creds = flow.run_local_server(port=0) with open("token.json", "w") as token: token.write(creds.to_json())
*Construção do Serviço e Listagem de Cursos
*
**Construção do Serviço:
**
- Usa as credenciais para construir o serviço da API do Google Classroom.
service = build("classroom", "v1", credentials=creds)
Listagem de Cursos:
Chama a API para listar até 1000 cursos. (lembrando que este valor de 1000, foi utilizado de exemplos, mas você pode definir qual valor quiser).
Verifica se há cursos e imprime os nomes e IDs dos cursos encontrados.
results = service.courses().list(pageSize=1000).execute() courses = results.get("courses", []) if not courses: print("No courses found.") return print("Courses:") for course in courses: print(f'{course["name"]} (ID: {course["id"]})')
Adição de Aluno ao Curso
Solicitação de Dados do Usuário:
- Solicita ao usuário o ID do curso e o e-mail do aluno a ser adicionado.
course_id = input("Digite o ID do curso para adicionar um aluno: ") student_email = input("Digite o e-mail do aluno: ")
Chamada da Função de Adição:
- Chama a função add_student_to_course passando o serviço, o ID do curso e o e-mail do aluno.
add_student_to_course(service, course_id, student_email)
Tratamento de Erros
- Qualquer erro na execução da API é capturado e impresso no console.
except HttpError as error: print(f"An error occurred: {error}")
Função para Adicionar Aluno
Definição e Execução
A função add_student_to_course adiciona um aluno a um curso específico:
def add_student_to_course(service, course_id, student_email): try: student = { 'userId': student_email } student = service.courses().students().create(courseId=course_id, body=student).execute() print(f"Student {student_email} added to course {course_id}") except HttpError as error: print(f"An error occurred: {error}")
Passos
Criação do Corpo da Requisição:
Define o corpo da requisição com o e-mail do aluno.
student = { 'userId': student_email }
Chamada da API para Adicionar o Aluno:
- Usa a API do Classroom para adicionar o aluno ao curso.
student = service.courses().students().create(courseId=course_id, body=student).execute()
Execução do Script
- Ao executar o script, ele primeiro remove qualquer arquivo token.json existente para forçar a reautenticação, garantindo que as credenciais estão atualizadas:
if __name__ == "__main__": if os.path.exists("token.json"): os.remove("token.json") main()
CÓDIGO COMPLETO
import os.path from google.auth.transport.requests import Request from google.oauth2.credentials import Credentials from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build from googleapiclient.errors import HttpError # Escopos necessários para listar cursos e adicionar alunos no Google Classroom SCOPES = [ "https://www.googleapis.com/auth/classroom.courses.readonly", "https://www.googleapis.com/auth/classroom.rosters" ] def main(): """ Código usado para poder criar e exibir as salas do Google criadas e adicionar alunos aos cursos. """ creds = None if os.path.exists("token.json"): creds = Credentials.from_authorized_user_file("token.json", SCOPES) # Vai pedir autenticação 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( "credentials.json", SCOPES ) creds = flow.run_local_server(port=0) # Salva as credenciais e mostra os cursos with open("token.json", "w") as token: token.write(creds.to_json()) try: service = build("classroom", "v1", credentials=creds) # Chama a API Do classroom para ver os cursos deixar em 1000 results = service.courses().list(pageSize=1000).execute() courses = results.get("courses", []) if not courses: print("No courses found.") return # Mostra na tela o nome dos cursos criados e salas print("Courses:") for course in courses: print(f'{course["name"]} (ID: {course["id"]})') # Adicionar aluno ao curso course_id = input("Digite o ID do curso para adicionar um aluno: ") student_email = input("Digite o e-mail do aluno: ") add_student_to_course(service, course_id, student_email) except HttpError as error: print(f"An error occurred: {error}") def add_student_to_course(service, course_id, student_email): try: student = { 'userId': student_email } student = service.courses().students().create(courseId=course_id, body=student).execute() print(f"Student {student_email} added to course {course_id}") except HttpError as error: print(f"An error occurred: {error}") if __name__ == "__main__": # Apagar o arquivo token.json para forçar a reautenticação if os.path.exists("token.json"): os.remove("token.json") main()
Top comments (0)