Harici ekler ve teslim etme

Bu, Classroom eklentileri adım adım açıklamalı kılavuz serisinin 7. adım adım açıklamalı kılavuzudur.

Bu adım adım açıklamalı kılavuzda, Google Classroom'un dışından eklenti ekleri oluşturmak için bir web uygulamasına davranış ekleyeceksiniz. Bu davranışı, kullanıcılarınızın mevcut ürün veya web sitenizden eklenti ekleri oluşturmasına olanak tanımak için kullanın. Mevcut trafiği, akışını değiştirmeden eklentiniz tarafından sunulan iyileştirilmiş kullanıcı deneyimine yönlendirdiğiniz için bu özellik, CourseWork entegrasyonuna da mükemmel bir katkı sağlar. Önerilen süreç, Classroom dışında ek oluşturma rehber sayfamızda sunulmaktadır.

Eklenti ekleriyle bir atamayı programatik olarak değiştirmek için eklentinize davranış da ekleyebilirsiniz. Eklenti eklerinizden birini içeren ödevlerde, atamayı kimin oluşturduğundan bağımsız olarak değişiklik yapabilirsiniz. Bu, özellikle ödevin öğrenci bir etkinliği tamamladıktan sonra teslim edilmesi 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 etkinlik türü ekleri destekleyen son sürümünü genişletirsiniz. İçerik türü eki bu kılavuzda kullanılmıştır.

Atama yönetimi OAuth kapsamını ekleyin

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

classroom.coursework.students kapsamı daha önce ihtiyaç duyulmamıştır ve CourseWork atamalarını oluşturmak veya değiştirmek için kullanılır. Bu kapsamı, Cloud projenizin Google Workspace Marketplace SDK'sında, OAuth izin ekranında 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'siz bir web sayfasına düğme ekleme

Bu adım adım açıklamalı kılavuzda açıklanan akış, kullanıcının Google dışı bir üründen Google Classroom ödevleri ve ekleri oluşturmasına olanak tanır. Pratikte bu, büyük olasılıkla mevcut web siteniz veya uygulamanızdır. Bu örnekte, harici site işlevi görecek bir web sayfası oluşturmanız gerekir. Tıklandığında yeni bir ödev oluşturmak için ö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 yapmadıysanız kullanıcının oturum açmasına izin vermek için bir düğme veya bağlantı eklemeniz gerekir. Sonraki API isteklerini yapmak için kullanıcı kimlik bilgilerine ihtiyacınız olacaktır. Bu nedenle, kullanıcı kimlik bilgilerinin OAuth 2.0 el sıkışmasını tamamlaması gerekir. Özel bir kılavuz için oturum açma adım adım açıklamalı kılavuzuna bakın.

Python

Sağlanan Python örneği, adım adım açıklamalı ilk adımda 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 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. Bu, sağladığımız örnekte coursework_routes.py'dir. Aşağıdaki üç rotayı ekleyin. İç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 uygun olup olmadığını kontrol etme

Bir kullanıcı adına eklenti eki oluşturabilmeniz için kullanıcının karşılaması gereken birkaç ön koşul vardır. Google, kolaylık sağlamak amacıyla bir 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 kullanıcılar, uygun kullanıcı olarak adlandırılır.

CourseWork rota oluşturma uygulamasına uygunluk kontrolünü ekleyin. Ardından yanıttaki isCreateAttachmentEligible alanını test edin. Uygun kullanıcılar için şu mantığı uygulayarak eklenti eki ile atama oluşturabilirsiniz. Aksi takdirde, bir LinkMaterial 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. Basitlik sağlaması için bu örnekte sabit kodlu bir değer kullanıyoruz.

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 ekleri oluşturmaya uygunsa aşağıdakileri yapın:

  1. Google Classroom'da ek olmadan bir courseWork ödevi oluşturmak için API isteği gönderin.
  2. Yeni oluşturulan ödevin id dosyasını çıkarın.
  3. Yeni bir CourseWorkAddOnAttachment oluşturun.
  4. Google Classroom'da yeni oluşturulan ödevde eklenti eki oluşturma isteği 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()
  )

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()
    )

Önceden oluşturulmuş bir ödevi değiştirme

Akış öğesini kimin oluşturduğundan bağımsız olarak eklenti eklerinizden en az birini içeren tüm Google Classroom akış öğelerine erişebilir, bunları değiştirebilir, teslim edebilir, yeniden talep edebilir veya iade edebilirsiniz. Akış öğeleri herhangi bir Announcement, CourseWork atama veya CourseWorkMaterial olabilir.

Bunu göstermek için belirli bir yayın öğesinde değişiklik yapmak üzere rota eklemeniz gerekir. 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çılır.

Python

Sağlanan Python örneği, bu adım adım açıklamalı kılavuzun başlarında 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, sağladığımız örnekteki 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

İşin basitliğini korumak adına, verilen örneklerde sabit kodlu kurs ve atama tanımlayıcıları kullanılmıştır. Bu tanımlayıcıları, courses ve courseWork kaynaklarının get ve list yöntemlerine öğretmen kimlik bilgileriyle istek göndererek alabilirsiniz. Bunlar ayrıca courseWork atamaları oluşturulurken yanıtta da döndürülür.

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 konsolundan bir kullanıcının lisans durumunu değiştirebilirsiniz.CourseWork Ödevi Oluştur düğmesini tıklayın ve ardından Google Classroom kullanıcı arayüzünü açın ve Materyal Bağlantısı ekine sahip 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 veya 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.

Test ataması değişikliği

Dizin sayfasına dönün ve Teaching & Learning veya Plus lisansına sahip öğretmen kullanıcısı olarak oturum açtığınızdan emin olun. Bir Sınıf Çalışması Ö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.