Puan anahtarlarını kullanmaya başlama

rubric, öğretmenlerin öğrencilere not verirken kullanabileceği bir şablondur gönderimler. Classroom API, söz konusu Google çalışanının adına işlem yapmanıza olanak tanır. bu puan anahtarlarını yönetmesi için bir öğretmen.

Classroom kullanıcı arayüzünde bir puan anahtarı görünümü. Şekil 1. Classroom ödevindeki örnek bir puan anahtarının görünümü.

Bu kılavuzda, Rubrics API'nin temel kavramları ve işlevleri açıklanmaktadır. Görüntüleyin bu Yardım Merkezi makalelerini Puan anahtarının yapısına ve puan anahtarının notlandırma Classroom kullanıcı arayüzünde yapılır.

Ön koşullar

Bu kılavuzda aşağıdakilere sahip olduğunuz varsayılmaktadır:

Masaüstü uygulaması için kimlik bilgilerini yetkilendirme

Son kullanıcı olarak kimlik doğrulamak ve uygulamanızdaki kullanıcı verilerine erişmek için şunları yapmanız gerekir: En az bir OAuth 2.0 İstemci Kimliği oluşturun. Client-ID, bir tek bir uygulamayı Google'ın OAuth sunucularına göndermesini sağlar. Uygulamanız birden fazla platformda çalışıyorsa her platform için ayrı bir istemci kimliği oluşturmanız gerekir.

  1. Google Cloud Kimlik Bilgileri sayfasına gidin. Google Cloud konsolunu kullanın.
  2. Kimlik Bilgisi Oluştur'u tıklayın > OAuth istemci kimliği.
  3. Uygulama türü'nü tıklayın > Masaüstü uygulaması.
  4. Ad alanına kimlik bilgisi için bir ad yazın. Bu ad yalnızca Google Cloud Console'da görebilirsiniz. Örneğin, "Puan Anahtarları Önizleme istemcisi".
  5. Oluştur'u tıklayın. OAuth istemcisi oluşturuldu ekranı görünür ve yeni istemcinizi gösterir İstemci kimliği ve İstemci gizli anahtarı.
  6. JSON'u indir'i ve ardından Tamam'ı tıklayın. Yeni oluşturulan kimlik bilgisi OAuth 2.0 İstemci Kimlikleri altında görünür.
  7. İndirilen JSON dosyasını credentials.json olarak kaydedin ve dosyayı şu konuma taşıyın: oluşturmanız gerekir.
  8. Kimlik Bilgisi Oluştur'u tıklayın > API Anahtarı'na gidin ve API anahtarını not edin.

Daha fazla bilgi edinmek için Erişim kimlik bilgileri oluşturma başlıklı makaleye bakın.

OAuth kapsamlarını yapılandırın

Projenizin mevcut OAuth kapsamlarına bağlı olarak kapsam dışı görülür.

  1. OAuth izin ekranına gidin.
  2. Uygulamayı Düzenle'yi tıklayın > Kaydet ve Devam Et'i tıklayın.
  3. Kapsam Ekle veya Kaldır'ı tıklayın.
  4. Aşağıdaki kapsamları henüz eklemediyseniz ekleyin:
    • https://www.googleapis.com/auth/classroom.coursework.students
    • https://www.googleapis.com/auth/classroom.courses
  5. Ardından Güncelle'yi tıklayın > Kaydet ve Devam Et > Kaydet ve Devam Et > Kontrol Paneline Dön.

Öğrenmek için OAuth izin ekranını yapılandırma başlıklı makaleyi inceleyin. daha fazla.

classroom.coursework.students kapsamı, aşağıdakilere okuma ve yazma erişimi sağlar: puan anahtarları (CourseWork erişimiyle birlikte) ve classroom.courses kapsamı Okuma ve yazma derslerine olanak tanır.

Belirli bir yöntem için gereken kapsamlar, referans belgelerinde listelenmiştir belirtiliyor. courses.courseWork.rubrics.create yetkilendirme kapsamını inceleyin açıklayacağım. Tüm Classroom kapsamlarını Google için OAuth 2.0 Kapsamları bölümünde görebilirsiniz. API'ler. API hâlâ önizleme aşamasında olduğundan burada puan anahtarlarından bahsedilmez.

Örneği yapılandırma

Çalışma dizininizde Python için Google istemci kitaplığını yükleyin:

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

İstemci kitaplığını oluşturan vemain.py kullanıcı, YOUR_API_KEY yerine API anahtarınızı kullanarak:

import json
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

# If modifying these scopes, delete the file token.json.
SCOPES = ['https://www.googleapis.com/auth/classroom.courses',
          'https://www.googleapis.com/auth/classroom.coursework.students']

def build_authenticated_service(api_key):
    """Builds the Classroom service."""
    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(
                'credentials.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())

    try:
        # Build the Classroom service.
        service = build(
            serviceName="classroom",
            version="v1",
            credentials=creds,
            discoveryServiceUrl=f"https://classroom.googleapis.com/$discovery/rest?labels=DEVELOPER_PREVIEW&key={api_key}")

        return service

    except HttpError as error:
        print('An error occurred: %s' % error)

if __name__ == '__main__':
    service = build_authenticated_service(YOUR_API_KEY)

Komut dosyasını python main.py kullanarak çalıştırın. Oturum açmanız ve OAuth kapsamlarına izin verin.

Ödev oluşturma

Puan anahtarı bir ödev veya CourseWork ile ilişkilidir ve yalnızca söz konusu CourseWork bağlamında anlamlıdır. Puan anahtarları yalnızca şu kullanıcılar tarafından oluşturulabilir: üst CourseWork öğesini oluşturan Google Cloud projesi. Amaçları: Bu kılavuzda, komut dosyasıyla yeni bir CourseWork ödevi oluşturun.

Şunları main.py içine ekleyin:

def get_latest_course(service):
    """Retrieves the last created course."""
    try:
        response = service.courses().list(pageSize=1).execute()
        courses = response.get("courses", [])
        if not courses:
            print("No courses found. Did you remember to create one in the UI?")
            return
        course = courses[0]
        return course

    except HttpError as error:
        print(f"An error occurred: {error}")
        return error

def create_coursework(service, course_id):
    """Creates and returns a sample coursework."""
    try:
        coursework = {
            "title": "Romeo and Juliet analysis.",
            "description": """Write a paper arguing that Romeo and Juliet were
                                time travelers from the future.""",
            "workType": "ASSIGNMENT",
            "state": "PUBLISHED",
        }
        coursework = service.courses().courseWork().create(
            courseId=course_id, body=coursework).execute()
        return coursework

    except HttpError as error:
        print(f"An error occurred: {error}")
        return error

Şimdi az önce aldığınız test sınıfının course_id bilgisini almak için main.py uygulamasını güncelleyin yeni bir örnek atama oluşturun ve ödevin coursework_id:

if __name__ == '__main__':
    service = build_authenticated_service(YOUR_API_KEY)

    course = get_latest_course(service)
    course_id = course.get("id")
    course_name = course.get("name")
    print(f"'{course_name}' course ID: {course_id}")

    coursework = create_coursework(service, course_id)
    coursework_id = coursework.get("id")
    print(f"Assignment created with ID {coursework_id}")

    #TODO(developer): Save the printed course and coursework IDs.

course_id ve coursework_id kaydedin. Bunlar tüm puan anahtarları için gereklidir CRUD anlamına gelir.

Artık Classroom'da örnek bir CourseWork kullanabilirsiniz.

Ödevleri Classroom kullanıcı arayüzünde görüntüleme. Şekil 2. Classroom'daki örnek bir ödevin görünümü.

Puan anahtarı oluşturma

Artık puan anahtarlarını yönetmeye hazırsınız.

Create çağrısıyla CourseWork üzerinde puan anahtarı oluşturulabilir. ölçütler ve düzeyler için kimlik özelliklerinin atlandığı tam puan anahtarı nesnesi (bunlar oluşturma sırasında oluşturulur).

Şu işlevi main.py hedefine ekleyin:

def create_rubric(service, course_id, coursework_id):
    """Creates an example rubric on a coursework."""
    try:
        body = {
            "criteria": [
                {
                    "title": "Argument",
                    "description": "How well structured your argument is.",
                    "levels": [
                        {"title": "Convincing",
                         "description": "A compelling case is made.", "points": 30},
                        {"title": "Passable",
                         "description": "Missing some evidence.", "points": 20},
                        {"title": "Needs Work",
                         "description": "Not enough strong evidence..", "points": 0},
                    ]
                },
                {
                    "title": "Spelling",
                    "description": "How well you spelled all the words.",
                    "levels": [
                        {"title": "Perfect",
                         "description": "No mistakes.", "points": 20},
                        {"title": "Great",
                         "description": "A mistake or two.", "points": 15},
                        {"title": "Needs Work",
                         "description": "Many mistakes.", "points": 5},
                    ]
                },
                {
                    "title": "Grammar",
                    "description": "How grammatically correct your sentences are.",
                    "levels": [
                        {"title": "Perfect",
                         "description": "No mistakes.", "points": 20},
                        {"title": "Great",
                         "description": "A mistake or two.", "points": 15},
                        {"title": "Needs Work",
                         "description": "Many mistakes.", "points": 5},
                    ]
                },
            ]
        }

        rubric = service.courses().courseWork().rubrics().create(
            courseId=course_id, courseWorkId=coursework_id, body=body,
            # Specify the preview version. Rubrics CRUD capabilities are
            # supported in V1_20231110_PREVIEW and later.
            previewVersion="V1_20231110_PREVIEW"
            ).execute()
        print(f"Rubric created with ID {rubric.get('id')}")
        return rubric

    except HttpError as error:
        print(f"An error occurred: {error}")
        return error

Ardından, Course öğenizi kullanarak örnek puan anahtarını oluşturmak için main.py uygulamasını güncelleyin ve çalıştırın ve önceki CourseWork kimlik:

if __name__ == '__main__':
    service = build_authenticated_service(YOUR_API_KEY)

    rubric = create_rubric(service, YOUR_COURSE_ID, YOUR_COURSEWORK_ID)
    print(json.dumps(rubric, indent=4))

Puan anahtarı temsiliyle ilgili bazı noktalar:

  • Ölçüt ve seviye sıralaması Classroom kullanıcı arayüzünde gösterilir.
  • Puanlı seviyeler (points özelliğine sahip olanlar) puana göre sıralanmalıdır azalan veya artan düzende sıralanabilir (rastgele sıralanamaz).
  • Öğretmenler ölçütleri ve puanlanan seviyeleri yeniden sıralayabilir (ancak puanlanmamış halde değil) düzeyleri) gösterir ve bu durum, bunların verilerdeki sıralarını değiştirir.

Puan anahtarı yapısıyla ilgili diğer uyarılar için sınırlamalar bölümüne bakın.

Kullanıcı arayüzünde ödevin üzerindeki puan anahtarını görürsünüz.

Classroom kullanıcı arayüzünde bir puan anahtarı görünümü. Şekil 3. Classroom ödevindeki örnek bir puan anahtarının görünümü.

Puan anahtarı okuma

Puan anahtarları, standart List ve Get yöntemleriyle okunabilir.

Bir ödevde en fazla bir puan anahtarı olabilir. Bu nedenle List, pratik değildir, ancak değerlendirme ölçeği kimliğiniz yoksa faydalı olur. Varsa CourseWork ile ilişkili bir puan anahtarı değil, List yanıtı boş.

Şu işlevi main.py hedefine ekleyin:

def get_rubric(service, course_id, coursework_id):
    """
    Get the rubric on a coursework. There can only be at most one.
    Returns null if there is no rubric.
    """
    try:
        response = service.courses().courseWork().rubrics().list(
            courseId=course_id, courseWorkId=coursework_id,
            # Specify the preview version. Rubrics CRUD capabilities are
            # supported in V1_20231110_PREVIEW and later.
            previewVersion="V1_20231110_PREVIEW"
            ).execute()

        rubrics = response.get("rubrics", [])
        if not rubrics:
            print("No rubric found for this assignment.")
            return
        rubric = rubrics[0]
        return rubric

    except HttpError as error:
        print(f"An error occurred: {error}")
        return error

Eklediğiniz puan anahtarını getirmek için main.py öğesini güncelleyin ve çalıştırın:

if __name__ == '__main__':
    service = build_authenticated_service(YOUR_API_KEY)

    rubric = get_rubric(service, YOUR_COURSE_ID, YOUR_COURSEWORK_ID)
    print(json.dumps(rubric, indent=4))

    #TODO(developer): Save the printed rubric ID.

Sonraki adımlarda puan anahtarında id özelliğini not edin.

Puan anahtarı kimliğiniz varsa Get işe yarar. İşlevde Get kullanma şöyle görünebilir:

def get_rubric(service, course_id, coursework_id, rubric_id):
    """
    Get the rubric on a coursework. There can only be at most one.
    Returns a 404 if there is no rubric.
    """
    try:
        rubric = service.courses().courseWork().rubrics().get(
            courseId=course_id,
            courseWorkId=coursework_id,
            id=rubric_id,
            # Specify the preview version. Rubrics CRUD capabilities are
            # supported in V1_20231110_PREVIEW and later.
            previewVersion="V1_20231110_PREVIEW"
        ).execute()

        return rubric

    except HttpError as error:
        print(f"An error occurred: {error}")
        return error

Puan anahtarı yoksa bu uygulama 404 hatası döndürür.

Puan anahtarını güncelleme

Puan anahtarında yapılan güncellemeler Patch aramalarıyla yapılır. Karmaşık bir yapıdan dolayı Puan anahtarının kullanıcıları okuma-değiştirme-yazma düzeniyle yapılmalıdır. criteria mülkünün tamamı değiştirilir.

Güncelleme kuralları aşağıdaki gibidir:

  1. Kimlik olmadan eklenen ölçütler veya seviyeler dikkate alınır eklemeler.
  2. Daha önce eksik olan ölçütler veya seviyeler dikkate alınır. deletes olarak ayarlayın.
  3. Mevcut bir kimliği olan ancak verileri değiştirilmiş ölçütler veya seviyeler dikkate alınır düzenlemeler. Değiştirilmemiş özellikler olduğu gibi bırakılır.
  4. Yeni veya bilinmeyen kimlikler içeren ölçütler ya da seviyeler dikkate alınır hatalarının nasıl düzeltileceğini öğrenin.
  5. Yeni ölçütlerin ve seviyelerin sırası, yeni kullanıcı arayüzü sırası olarak kabul edilir (yukarıda belirtilen kısıtlamalarla birlikte).

Puan anahtarını güncellemek için bir işlev ekleyin:

def update_rubric(service, course_id, coursework_id, rubric_id, body):
    """
    Updates the rubric on a coursework.
    """
    try:
        rubric = service.courses().courseWork().rubrics().patch(
            courseId=course_id,
            courseWorkId=coursework_id,
            id=rubric_id,
            body=body,
            updateMask='criteria',
            # Specify the preview version. Rubrics CRUD capabilities are
            # supported in V1_20231110_PREVIEW and later.
            previewVersion="V1_20231110_PREVIEW"
        ).execute()

        return rubric

    except HttpError as error:
        print(f"An error occurred: {error}")
        return error

Bu örnekte criteria alanı updateMask

Ardından, yukarıda belirtilen güncellemenin her biri için değişiklik yapmak üzere main.py öğesini değiştirin kurallarınız:

if __name__ == '__main__':
    service = build_authenticated_service(YOUR_API_KEY)

    # Get the latest rubric.
    rubric = get_rubric(service, YOUR_COURSE_ID, YOUR_COURSEWORK_ID)
    criteria = rubric.get("criteria")
    """
    The "criteria" property should look like this:
    [
        {
            "id": "NkEyMdMyMzM2Nxkw",
            "title": "Argument",
            "description": "How well structured your argument is.",
            "levels": [
                {
                    "id": "NkEyMdMyMzM2Nxkx",
                    "title": "Convincing",
                    "description": "A compelling case is made.",
                    "points": 30
                },
                {
                    "id": "NkEyMdMyMzM2Nxky",
                    "title": "Passable",
                    "description": "Missing some evidence.",
                    "points": 20
                },
                {
                    "id": "NkEyMdMyMzM2Nxkz",
                    "title": "Needs Work",
                    "description": "Not enough strong evidence..",
                    "points": 0
                }
            ]
        },
        {
            "id": "NkEyMdMyMzM2Nxk0",
            "title": "Spelling",
            "description": "How well you spelled all the words.",
            "levels": [...]
        },
        {
            "id": "NkEyMdMyMzM2Nxk4",
            "title": "Grammar",
            "description": "How grammatically correct your sentences are.",
            "levels": [...]
        }
    ]
    """

    # Make edits. This example will make one of each type of change.

    # Add a new level to the first criteria. Levels must remain sorted by
    # points.
    new_level = {
        "title": "Profound",
        "description": "Truly unique insight.",
        "points": 50
    }
    criteria[0]["levels"].insert(0, new_level)

    # Remove the last criteria.
    del criteria[-1]

    # Update the criteria titles with numeric prefixes.
    for index, criterion in enumerate(criteria):
        criterion["title"] = f"{index}: {criterion['title']}"

    # Resort the levels from descending to ascending points.
    for criterion in criteria:
        criterion["levels"].sort(key=lambda level: level["points"])

    # Update the rubric with a patch call.
    new_rubric = update_rubric(
        service, YOUR_COURSE_ID, YOUR_COURSEWORK_ID, YOUR_RUBRIC_ID, rubric)

    print(json.dumps(new_rubric, indent=4))

Değişiklikler artık öğretmen için Classroom'a yansıtılacaktır.

Güncellenen puan anahtarının Classroom kullanıcı arayüzünde gösterilmesi. Şekil 4. Güncellenen puan anahtarı görünümü.

Puan anahtarı ile not verilen gönderimleri görüntüleme

Şu an için öğrenci gönderimlerine API tarafından bir puan anahtarı ile not verilemiyor. Puan anahtarı ile not verilen gönderimlerin puan anahtarı notlarını okuyabilir. Classroom kullanıcı arayüzünde.

Classroom kullanıcı arayüzünde öğrenci olarak örnek ödevinizi tamamlayın ve teslim edin. Ardından, öğretmen olarak puan anahtarını kullanarak ödeve manuel olarak not verebilirsiniz.

Classroom kullanıcı arayüzünde puan anahtarı notunun görünümü. Şekil 5. Not verme sırasında puan anahtarının öğretmen görünümü.

Puan anahtarı ile not verilen öğrenci gönderimlerinde iki yeni ödev var özellikleri: draftRubricGrades ve assignedRubricGrades özellikleri Taslak sırasında öğretmen tarafından seçilen ve verilen notlandırma sürecinde puanlar ve seviyeler durumlarına göre sıralayın.

Ayrıca, ilişkili bir puan anahtarıyla gönderilen öğrenci gönderimleri bir rubricId içerir. alanını kullanabilirsiniz. Bu, CourseWork ve öğretmenler bir dosyayı silip yeniden oluşturursa bu değer değişebilir. puan anahtarı.

Mevcut studentSubmissions.Get ve Notlu gönderimleri görüntülemek için studentSubmissions.List yöntemleri.

Öğrenci gönderimlerini listelemek için main.py uygulamasına şu işlevi ekleyin:

def get_latest_submission(service, course_id, coursework_id):
    """Retrieves the last submission for an assignment."""
    try:
        response = service.courses().courseWork().studentSubmissions().list(
            courseId = course_id,
            courseWorkId = coursework_id,
            pageSize=1,
            # Specify the preview version. Rubrics CRUD capabilities are
            # supported in V1_20231110_PREVIEW and later.
            previewVersion="V1_20231110_PREVIEW"
        ).execute()
        submissions = response.get("studentSubmissions", [])
        if not submissions:
            print(
                """No submissions found. Did you remember to turn in and grade
                   the assignment in the UI?""")
            return
        submission = submissions[0]
        return submission

    except HttpError as error:
        print(f"An error occurred: {error}")
        return error

Ardından, gönderim notlarını görüntülemek için main.py uygulamasını güncelleyin ve çalıştırın.

if __name__ == '__main__':
    service = build_authenticated_service(YOUR_API_KEY)

    submission = get_latest_submission(
        service, YOUR_COURSE_ID, YOUR_COURSEWORK_ID)
    print(json.dumps(submission, indent=4))

draftRubricGrades ve assignedRubricGrades şunları içerir:

  • İlgili puan anahtarı ölçütlerinin criterionId öğesi.
  • Öğretmenin her ölçüt için atadığı points. Bu bilgi, ancak öğretmen de bunun üzerine yazmış olabilir.
  • Her ölçüt için seçilen düzeyin levelId değeri. Öğretmen izin vermediyse seviye seçtikten sonra ölçüt için yine de puan veriliyorsa bu alana mevcut değil.

Bu listeler yalnızca bir öğretmenin seviye seçin veya puan belirleyin. Örneğin, bir öğretmen yalnızca notlandırma sırasında tek bir ölçütle, draftRubricGrades ve Puan anahtarında çok sayıda öğe olsa bile assignedRubricGrades yalnızca bir öğeye sahip olur. ölçütlerine bağlıdır.

Puan anahtarını silme

Bir puan anahtarı, standart bir Delete isteğiyle silinebilir. Aşağıdaki kod eksiksizlik için örnek bir işlev gösterir. Ancak, notlandırma zaten başladıysa geçerli puan anahtarını silemezsiniz.

def delete_rubric(service, course_id, coursework_id, rubric_id):
    """Deletes the rubric on a coursework."""
    try:
        service.courses().courseWork().rubrics().delete(
            courseId=course_id,
            courseWorkId=coursework_id,
            id=rubric_id,
            # Specify the preview version. Rubrics CRUD capabilities are
            # supported in V1_20231110_PREVIEW and later.
            previewVersion="V1_20231110_PREVIEW"
        ).execute()

    except HttpError as error:
        print(f"An error occurred: {error}")
        return error

Puan anahtarlarını dışa ve içe aktarma

Puan anahtarları Google'a manuel olarak dışa aktarılabilir Öğretmenlerin yeniden kullanması için e-tablolar.

Kodda puan anahtarı ölçütleri belirtmenin yanı sıra, anahtar/değer çiftleri de oluşturabilir ve emin olmak için criteria yerine bir puan anahtarı gövdesinde sourceSpreadsheetId:

def create_rubric_from_sheet(service, course_id, coursework_id, sheet_id):
    """Creates an example rubric on a coursework."""
    try:
        body = {
            "sourceSpreadsheetId": sheet_id
        }

        rubric = service.courses().courseWork().rubrics().create(
            courseId=course_id, courseWorkId=coursework_id, body=body,
            # Specify the preview version. Rubrics CRUD capabilities are
            # supported in V1_20231110_PREVIEW and later.
            previewVersion="V1_20231110_PREVIEW"
            ).execute()

        print(f"Rubric created with ID {rubric.get('id')}")
        return rubric

    except HttpError as error:
        print(f"An error occurred: {error}")
        return error

Geri bildirim

Herhangi bir sorun tespit ederseniz veya varsa geri bildiriminizi paylaşın.