Bu, Classroom eklentileriyle ilgili adım adım açıklamalı serinin yedinci kılavuzudur.
Bu adım adım açıklamalı kılavuzda, Google Classroom dışından eklenti ekleri oluşturmak için bir web uygulamasına davranış ekleyeceksiniz. Kullanıcılarınızın mevcut ürününüzden veya web sitenizden eklenti ekleri oluşturmasına izin vermek için bu davranışı uygulayın. Bu, CourseWork
entegrasyonuna mükemmel bir katkıdır. Bunun nedeni, mevcut trafiği, eklentinizin akışını değiştirmeden eklentinizin sunduğu iyileştirilmiş kullanıcı deneyimine yönlendirmenizi sağlamaktır. Önerilen süreç Classroom dışında ek oluşturma kılavuz sayfamızda sunulmaktadır.
Ayrıca, eklenti ekleriyle bir ödevi programatik olarak değiştirmek için eklentinize davranış da ekleyebilirsiniz. Eklenti eklerinizden birine sahip tüm ödevleri değiştirebilirsiniz. Ödevi kimin oluşturduğundan bağımsız olarak bu ödevde değişiklik yapabilirsiniz. Bu yöntem, özellikle öğrenci bir etkinliği tamamladıktan sonra ödevleri teslim etmek için kullanışlıdır. Bu sayede, öğretmene atanan görevlerin tamamlandığı ve öğrencinin çalışmasının incelenmeye hazır olduğu bildirilir.
Eklentinizin content-type veya activity-type ekleri destekleyen son sürümünü genişletir. Bu kılavuzdaki içerik türü eki kullanılmıştır.
Ödev yönetimi OAuth kapsamını ekleme
Uygulamanızın aşağıdaki kapsamları istediğinden emin olun:
https://www.googleapis.com/auth/classroom.addons.teacher
https://www.googleapis.com/auth/classroom.addons.student
https://www.googleapis.com/auth/classroom.coursework.students
Daha önce ihtiyaç duyulmayan classroom.coursework.students
kapsamı, CourseWork
atamalarını oluşturmak veya değiştirmek için kullanılır. Bu kapsamı, Cloud projenizin Google Workspace Marketplace SDK'sı, OAuth izin ekranı ve sunucu kodunuzdaki kapsam listelerine ekleyin.
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",
]
Classroom'da ödev oluşturma
iframe içermeyen web sayfalarına düğme ekleme
Bu adım adım açıklamalı kılavuzda açıklanan akış, kullanıcıların Google dışındaki bir üründen Google Classroom ödevleri ve ekleri oluşturmasına olanak tanır. Pratikte bu, muhtemelen mevcut web siteniz veya uygulamanızdır. Bu örnekte, harici bir site gibi davranacak bir web sayfası örneği oluşturmanız gerekir. Yeni bir atama oluşturmak için tıklandığında önerilen CourseWork
akışını gerçekleştiren yeni bir rota açan düğme veya bağlantıya ihtiyacınız vardır.
Henüz yoksa kullanıcının oturum açmasına izin vermek için bir düğme veya bağlantı eklemeniz gerekir. Sonraki API isteklerinde bulunmak için kullanıcı kimlik bilgilerine ihtiyacınız olacaktır. Bu nedenle bu isteklerin OAuth 2.0 el sıkışmasını tamamlaması gerekir. Ayrıntılı bilgi için oturum açma adımlarını inceleyin.
Python
Sağlanan Python örneği, ilk adım adım açıklamalı kılavuz adımında açıklanan /index
rotasını değiştirir.
<!-- /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>
Web sitenizdeki bir hedefi temsil edecek bir HTML şablonu ekleyin. Bu sayfa, CourseWork
ödevinize eklenecek içeriği temsil eder.
<!-- /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>
CourseWork ile ilgili rotaları işlemek için yeni bir Python modül dosyası oluşturun.
Sağladığımız örneğimizde bu, coursework_routes.py
. Aşağıdaki üç yolu ekleyin; içeriğin bir kısmını daha sonra dolduracağınızı unutmayın.
# /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")
Kullanıcının eklenti oluşturmaya uygunluğunu kontrol etme
Kullanıcı adına eklenti ekleri oluşturabilmeniz için kullanıcının karşılaması gereken birkaç ön koşul vardır. Google, kolaylık sağlamak amacıyla kullanıcının bu ön koşulları karşılayıp karşılamadığını belirlemek için courses.checkAddOnCreationEligibility
yöntemini sunar. Ön koşulları karşılayan bir kullanıcı uygun kullanıcı olarak tanımlanır.
CourseWork
oluşturma rotası uygulamasına uygunluk kontrolünü ekleyin.
Ardından yanıttaki isCreateAttachmentEligible
alanını test edin. Uygun kullanıcılar için eklenti eki olan bir atama oluşturma mantığını uygulayın. Aksi takdirde, Link Material oluşturun. Kullanıcının ödev oluşturmak istediği dersin kimliğini bilmeniz gerekir. Normalde kullanıcıdan hangi kursu
kullanacağını belirtmesi istenir. Kolaylık sağlaması açısından bu örnekte sabit kodlu bir değer kullanılmıştır.
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.
Uygun kullanıcılar için eklenti eki olan bir ödev oluşturma
Kullanıcı, eklenti eki oluşturmaya uygunsa aşağıdakileri yapın:
- Google Classroom'da ek olmadan bir
courseWork
ödevi oluşturmak için API isteği gönderin. - Yeni oluşturulan ödevden
id
öğesini çıkarın. - Yeni bir CourseWork
AddOnAttachment
oluşturun. - Google Classroom'da yeni oluşturulan ödevle ilgili bir eklenti eki oluşturmak için istek gönderin.
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()
)
Bağlantı Materyali Oluşturma
Kullanıcı, eklenti ekleri oluşturmaya uygun değilse aşağıdakileri yaparak bir Bağlantı Materyali oluşturun:
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()
)
Daha önce oluşturulmuş bir ödevi değiştirme
Akış öğesini kimin oluşturduğundan bağımsız olarak eklenti eklerinizden en az birine sahip herhangi bir Google Classroom akış öğesine erişebilir, bu öğeleri değiştirebilir, teslim edebilir, geri alabilir veya iade edebilirsiniz. Akış öğeleri herhangi bir Announcement
, CourseWork
atımı veya CourseWorkMaterial
olabilir.
Bunu göstermek amacıyla belirli bir akış öğesini değiştirecek bir rota ekleyeceksiniz. API'yi kullanarak oluşturduğunuz ve Google Classroom kullanıcı arayüzü üzerinden bir öğretmen tarafından oluşturulan akış öğelerine erişebildiğinizi ve bunları değiştirebildiğinizi doğrulamak için bu yöntemi kullanın.
Bu adım adım açıklamalı kılavuzda ilk düzenlediğiniz web sayfasına bir bağlantı veya düğme daha ekleyin. Bir CourseWork
atamasını değiştirmek için yeni bir rota açmalıdır.
Python
Sağlanan Python örneği, bu adım adım açıklamalı kılavuzun daha önceki bölümlerinde değiştirilen /index
rotasını değiştirir.
<!-- /webapp/templates/index.html -->
<a href="modify-coursework-assignment.html">Create a CourseWork Assignment</a>
CourseWork ile ilgili rotaları işlemek için yeni bir rota oluşturun. Bu, verdiğimiz örneğimizde yer alan coursework_routes.py
dosyasındadır.
# 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()
)
Eklentiyi test etme
İşleri basitleştirmek adına, verilen örneklerde sabit kodlu kurs ve ödev tanımlayıcıları kullanılmaktadır. Bu tanımlayıcıları, courses
ve courseWork
kaynaklarının get
ve list
yöntemlerine öğretmen kimlik bilgileriyle istekte bulunarak alabilirsiniz. Bunlar, courseWork
atamaları oluşturulurken de yanıtta döndürülür.
Test Bağlantısı Materyali oluşturma
Sunucunuzu çalıştırın, ardından dizin sayfanıza gidin ve Google Workspace for Education Teaching & Learning veya Plus lisansı olmadan öğretmen kullanıcısı olarak oturum açın. Test alanınızın Yönetici Konsolu'nda kullanıcının lisans durumunu değiştirebilirsiniz.CourseWork Ödevi Oluştur düğmesini tıklayın ve Google Classroom kullanıcı arayüzünü açın ve Materyal Materyal eki içeren bir ödevin oluşturulduğunu doğrulayın. Ekte, bağlantı verilen web sayfasının başlığı ve bir URL gösterilmelidir.
Eklenti eki oluşturmayı test etme
Dizin sayfasına dönün ve Google Workspace for Education Teaching & Learning or Plus lisansına sahip öğretmen kullanıcısı olarak oturum açın. Create a CourseWork Assignment (CourseWork Ödevi Oluştur) düğmesini tıklayın, ardından Google Classroom kullanıcı arayüzünü açın ve eklenti eki olan bir ödevin oluşturulduğunu doğrulayın. Ekte, eklenti uygulamanızın adı ve kodunuzda belirtilen başlık gösterilmelidir.
Atama değişikliğini test et
Dizin sayfasına dönün ve Teaching & Learning or Plus lisansına sahip öğretmen kullanıcısı olarak oturum açtığınızdan emin olun. CourseWorks Ödevini Değiştir düğmesini tıklayın, ardından Google Classroom kullanıcı arayüzüne dönün ve ödev başlığının değiştirildiğini doğrulayın.
Tebrikler! Adım adım açıklamalı kılavuz serisini tamamladınız.