Este é o sétimo tutorial dos complementos do Google Sala de Aula série de tutoriais.
Neste tutorial, você vai adicionar um comportamento a um aplicativo da Web para criar um complemento
anexos de fora do Google Sala de Aula. Use esse comportamento para permitir
os usuários criam anexos de complementos do seu produto ou site. Isso é
Essa é uma ótima contribuição para a integração do CourseWork
, já que você direciona clientes existentes
tráfego para a experiência do usuário aprimorada oferecida por seu complemento sem alterar
fluxo. O processo sugerido é apresentado na página Criar anexos
fora do Google Sala de Aula.
Você também pode adicionar um comportamento ao seu complemento para modificar uma atividade com o complemento anexos de maneira programática. Você pode modificar qualquer atribuição que tenha um os anexos dos complementos, independentemente de quem criou a atividade. Isso é especialmente úteis para entregar tarefas depois que um aluno tiver concluído uma atividade, sinalizando para o professor que as tarefas atribuídas foram concluídas e o o trabalho do estudante está pronto para ser analisado.
Você estende a versão final do seu complemento compatível com content-type ou anexos do tipo atividade. O anexo de tipo de conteúdo é usado neste guia.
Adicionar o escopo do OAuth de gerenciamento de atribuições
Verifique se o aplicativo solicita os seguintes escopos:
https://www.googleapis.com/auth/classroom.addons.teacher
https://www.googleapis.com/auth/classroom.addons.student
https://www.googleapis.com/auth/classroom.coursework.students
O escopo classroom.coursework.students
não era necessário anteriormente e é
usado para criar ou modificar atribuições de CourseWork
. Adicionar este escopo às listas
de escopos do projeto do Cloud
SDK do Google Workspace Marketplace, a tela de consentimento do OAuth e seus
o código do servidor de aplicativos.
Python
SCOPES = [
"https://www.googleapis.com/auth/classroom.addons.teacher",
"https://www.googleapis.com/auth/classroom.addons.student",
"https://www.googleapis.com/auth/classroom.coursework.students",
]
Criar uma atividade no Google Sala de Aula
Adicionar botões a uma página da Web sem iframe
O fluxo descrito neste tutorial permite que um usuário crie
atividades e anexos do Google Sala de Aula de um produto que não é do Google; Em
provavelmente é seu site ou aplicativo atual. Para este exemplo,
você precisa criar uma página da Web fictícia para agir como site externo. Você precisa de um botão
ou um link que, quando clicado, abre um novo trajeto que executa a solicitação
CourseWork
para criar uma atividade.
Você também precisa adicionar um botão ou link para permitir que o usuário faça login se você ainda não tem uma. Você vai precisar de credenciais de usuário para fazer as solicitações de API, portanto, devem concluir o handshake do OAuth 2.0. Consulte a página de tutorial para orientações específicas.
Python
O exemplo de Python fornecido modifica a rota /index
que foi introduzida
na etapa do primeiro tutorial.
<!-- /webapp/templates/index.html -->
<a href="clear-credentials.html">Logout</a>
<a href="start-auth-flow.html">Login</a>
<br>
<a href="create-coursework-assignment.html">Create a CourseWork Assignment</a>
Adicione um modelo HTML para representar um destino no seu site. Esta página
representará o conteúdo que será anexado ao seu CourseWork
atribuição.
<!-- /webapp/templates/example-coursework-assignment.html -->
<h1>CourseWork assignment loaded!</h1>
<p>You've loaded a CourseWork assignment! It was created from an external web page.</p>
Crie um novo arquivo de módulo do Python para processar as rotas relacionadas ao CourseWork.
No exemplo mostrado, é coursework_routes.py
. Adicione o seguinte:
três rotas: você vai preencher parte do conteúdo depois.
# /webapp/coursework_routes.py
@app.route("/create-coursework-assignment")
def create_coursework_assignment():
"""
Completes the assignment creation flow.
"""
# Check that the user is signed in. If not, perform the OAuth 2.0
# authorization flow.
credentials = get_credentials()
if not credentials:
return start_auth_flow("coursework_assignment_callback")
# Construct the Google Classroom service.
classroom_service = get_classroom_service()
pass # To be completed later.
@app.route("/example-coursework-assignment/<assignment_type>")
def example_coursework_assignment(assignment_type):
"""
Renders the "example-coursework-assignment.html" template.
"""
return flask.render_template(
"example-coursework-assignment.html", assignment_type=assignment_type
)
@app.route("/coursework-assignment-callback")
def coursework_assignment_callback():
"""
Completes the OAuth 2.0 handshake and stores credentials in the session.
This is identical to the callback introduced in the sign-in walkthrough,
but redirects the user to the index page instead of the attachment
discovery page.
"""
flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file(
CLIENT_SECRETS_FILE,
scopes=SCOPES,
state=flask.session["state"],
redirect_uri=flask.url_for("coursework_assignment_callback", _external=True),
)
flow.fetch_token(authorization_response=flask.request.url)
credentials = flow.credentials
flask.session["credentials"] = session_credentials_to_dict(
credentials
)
# Close the current window and redirect the user to the index page.
return flask.render_template("close-me.html", redirect_destination="index")
Verificar se um usuário está qualificado para criar complementos
Há vários pré-requisitos que um usuário deve atender antes que você possa criar
em nome deles. Para sua conveniência, o Google fornece
Método courses.checkAddOnCreationEligibility
para determinar se um usuário
atenda a esses pré-requisitos. Um usuário que atende aos pré-requisitos é chamado de
um usuário qualificado.
Adicione a verificação de qualificação à implementação da rota de criação de CourseWork
.
Em seguida, teste o campo isCreateAttachmentEligible
na resposta. Para qualificação
usuários, siga a lógica para criar uma atividade com complemento
anexo. Caso contrário, crie um objeto Link
Material Design. Você precisa saber o ID do curso
em que o usuário quer criar uma atribuição. Normalmente, você faz uma solicitação ao usuário
para especificar qual curso usar. Para simplificar, usamos um valor codificado em
neste exemplo.
Python
# /webapp/coursework_routes.py
@app.route("/create-coursework-assignment")
def create_coursework_assignment():
"""
Completes the assignment creation flow.
"""
# ... Check that the user is signed in and get the Classroom service ...
# The ID of the course to which the assignment will be added.
course_id = 1234567890 # TODO(developer) Replace with an actual course ID.
# Check whether the user can create add-on attachments.
eligibility_response = (
classroom_service.courses()
.checkAddOnCreationEligibility(courseId=course_id)
.execute()
)
is_create_attachment_eligible = eligibility_response.get("isCreateAttachmentEligible")
if is_create_attachment_eligible:
# See the "Create an assignment with add-on attachment for eligible users" section for implementation.
if not is_create_attachment_eligible:
# See the "Create a Link Material" section for implementation.
Criar uma atividade com um anexo de complementos para os usuários qualificados
Se o usuário estiver qualificado para criar anexos de complementos, faça o seguinte:
- Envie uma solicitação de API para criar uma atribuição
courseWork
em Google Sala de Aula sem anexos. - Extraia o
id
da atribuição recém-criada. - Crie um novo CourseWork
AddOnAttachment
. - Envie uma solicitação para criar um anexo de complemento no arquivo recém-criado. uma atividade no Google Sala de Aula.
Python
# /webapp/coursework_routes.py
if is_create_attachment_eligible:
# Create an assignment.
coursework = {
"title": "My CourseWork Assignment with Add-on Attachment",
"description": "Created using the Classroom CourseWork API.",
"workType": "ASSIGNMENT",
"state": "DRAFT", # Set to 'PUBLISHED' to assign to students.
}
# Issue a request to create the assignment.
create_assignment_response = (
classroom_service.courses()
.courseWork()
.create(courseId=course_id, body=coursework)
.execute()
)
# Create an add-on attachment that links to the selected content and
# associate it with the new assignment.
content_url = flask.url_for(
"example_coursework_assignment",
assignment_type="add-on-attachment",
_scheme="https",
_external=True,
)
# Construct an AddOnAttachment instance.
attachment = {
"teacherViewUri": {"uri": content_url},
"studentViewUri": {"uri": content_url},
"title": f'Test Attachment for Assignment {create_assignment_response.get("id")}',
}
# Issue a request to create the attachment.
add_on_attachment_response = (
classroom_service.courses()
.courseWork()
.addOnAttachments()
.create(
courseId=course_id,
itemId=create_assignment_response.get("id"), # ID of the new assignment.
body=attachment,
)
.execute()
)
Criar um Material de link
Se o usuário não estiver qualificado para criar anexos de complementos, crie um link. Material, em vez disso, faça o seguinte:
Python
if not is_create_attachment_eligible:
coursework = {
"title": "My CourseWork Assignment with Link Material",
"description": "Created using the Classroom CourseWork API.",
"workType": "ASSIGNMENT",
"state": "DRAFT", # Set to 'PUBLISHED' to assign to students.
# Specify the URL for your content as a Link Material.
"materials": [
{
"link": {
"url": flask.url_for(
"example_coursework_assignment",
assignment_type="link-material",
_scheme="https",
_external=True,
)
}
}
],
}
# Issue a request to create the assignment.
assignment_response = (
classroom_service.courses()
.courseWork()
.create(courseId=course_id, body=coursework)
.execute()
)
Modificar uma atribuição já criada
Você pode acessar, modificar, entregar, recuperar ou devolver qualquer app do Google Sala de Aula
item de stream com pelo menos um dos seus anexos de complemento, independentemente de quem
criou o item de fluxo. Os itens do stream são qualquer Announcement
, CourseWork
atribuição, ou CourseWorkMaterial
.
Para demonstrar isso, você vai adicionar uma rota para modificar um determinado item de stream. Usar para verificar se você pode acessar e modificar os itens de stream criados por você usando a API e criada por um professor na interface do Google Sala de Aula.
Adicione mais um link ou botão à página da Web que você editou pela primeira vez em
neste tutorial. Uma nova rota será aberta para modificar um CourseWork
.
atribuição.
Python
O exemplo de Python fornecido modifica a rota /index
que foi modificada
mais cedo neste tutorial.
<!-- /webapp/templates/index.html -->
<a href="modify-coursework-assignment.html">Create a CourseWork Assignment</a>
Crie um novo trajeto para processar os trajetos relacionados ao CourseWork. Ela está na
coursework_routes.py
no exemplo fornecido.
# Check that the user is signed in.
credentials = get_credentials()
if not credentials:
return start_auth_flow("coursework_assignment_callback")
# Get the Google Classroom service.
classroom_service = get_classroom_service()
# The ID of the course to which the assignment will be added.
# Ordinarily, you'll prompt the user to specify which course to use. For
# simplicity, we use a hard-coded value in this example.
course_id = 1234567890 # TODO(developer) Replace with an actual course ID.
assignment_id = 1234567890 # TODO(developer) Replace with an actual assignment ID.
# Retrieve details about the CourseWork assignment.
get_coursework_response = (
classroom_service.courses()
.courseWork()
.get(courseId=course_id, id=assignment_id)
.execute()
)
# Alter the current title.
assignment_title = f"{get_coursework_response.get('title')} (Modified by API request)"
# Issue a request to modify the assignment.
modify_coursework_response = (
classroom_service.courses()
.courseWork()
.patch(
courseId=course_id,
id=assignment_id,
updateMask="title",
body={"title": assignment_title},
)
.execute()
)
Testar o complemento
Para simplificar, os exemplos fornecidos usam curso codificado e
identificadores de atribuição. Você pode obter esses identificadores fazendo solicitações com
credenciais de professor para os métodos get
e list
das classes courses
e
courseWork
. Eles também são retornados na resposta ao criar
courseWork
atividades.
Testar a criação do Material Design do link
Execute seu servidor, navegue até a página de índice e faça login como usuário professor sem a certificação Teaching and Learning Upgrade do Google Workspace for Education Learning ou Plus. É possível alternar uma o status da licença do usuário na tabela Admin Console.Clique em Criar uma atividade do curso botão, abra a interface do Google Sala de Aula e verifique se uma tarefa com um O anexo de link do Material Design foi criado. O anexo deve mostrar o título a página da Web vinculada e um URL.
Testar a criação de anexos de complementos
Volte à página de índice e faça login como professor com uma conta do Google Workspace for Education Teaching & Learning ou Plus. Clique em Create a CourseWork Assignment. , abra a interface do Google Sala de Aula e verifique se uma atividade com um anexo de complemento foi criado. O anexo deve mostrar o nome aplicativo complementar e o título especificado no código.
Testar a modificação da atribuição
Volte à página de índice e verifique se você fez login como usuário professor com o curso Teaching and Learning ou Plus. Clique no botão Modificar um trabalho do curso Atividade, depois retorne à interface do Google Sala de Aula e verifique se o título da atividade foi alterado.
Parabéns! Você concluiu a série de tutoriais.