Guía de inicio rápido de Java

Completa los pasos descritos en el resto de esta página para crear una aplicación de línea de comandos de Java simple que realice solicitudes a la API de Classroom.

Prerequisites

Para ejecutar esta guía de inicio rápido, necesitas los siguientes requisitos previos:

  • Credenciales de autorización para una aplicación de escritorio Si quieres obtener información sobre cómo crear credenciales para una aplicación de escritorio, consulta Crea credenciales.

  • Una cuenta de G Suite for Education con Google Classroom habilitado

Paso 1: Prepara el proyecto

Para preparar el proyecto, haz lo siguiente:

  1. En el directorio de trabajo, ejecuta los siguientes comandos para crear una estructura de proyecto nueva:

    gradle init --type basic
    mkdir -p src/main/java src/main/resources 
    
  2. Copia el archivo credentials.json que descargaste como un requisito previo en el directorio src/main/resources/ recién creado.

  3. Abre el archivo build.gradle predeterminado y reemplaza su contenido con el siguiente código:

    classroom/quickstart/build.gradle
    apply plugin: 'java'
    apply plugin: 'application'
    
    mainClassName = 'ClassroomQuickstart'
    sourceCompatibility = 11
    targetCompatibility = 11
    version = '1.0'
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        implementation 'com.google.api-client:google-api-client:1.33.0'
        implementation 'com.google.oauth-client:google-oauth-client-jetty:1.32.1'
        implementation 'com.google.apis:google-api-services-classroom:v1-rev20211029-1.32.1'
    }
    

Paso 2: Configura la muestra

Para configurar la muestra, haz lo siguiente:

  1. En src/main/java/, crea un archivo Java nuevo con un nombre que coincida con el valor mainClassName en tu archivo build.gradle.
  2. Incluye el siguiente código en tu nuevo archivo Java:

    classroom/quickstart/src/main/java/ClassroomQuickstart.java
    import com.google.api.client.auth.oauth2.Credential;
    import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
    import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
    import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
    import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
    import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
    import com.google.api.client.http.javanet.NetHttpTransport;
    import com.google.api.client.json.JsonFactory;
    import com.google.api.client.json.gson.GsonFactory;
    import com.google.api.client.util.store.FileDataStoreFactory;
    import com.google.api.services.classroom.ClassroomScopes;
    import com.google.api.services.classroom.model.*;
    import com.google.api.services.classroom.Classroom;
    
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.security.GeneralSecurityException;
    import java.util.Collections;
    import java.util.List;
    
    public class ClassroomQuickstart {
      private static final String APPLICATION_NAME = "Google Classroom API Java Quickstart";
      private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
      private static final String TOKENS_DIRECTORY_PATH = "tokens";
    
      /**
       * Global instance of the scopes required by this quickstart.
       * If modifying these scopes, delete your previously saved tokens/ folder.
       */
      private static final List<String> SCOPES =
          Collections.singletonList(ClassroomScopes.CLASSROOM_COURSES_READONLY);
      private static final String CREDENTIALS_FILE_PATH = "/credentials.json";
    
      /**
       * Creates an authorized Credential object.
       *
       * @param HTTP_TRANSPORT The network HTTP Transport.
       * @return An authorized Credential object.
       * @throws IOException If the credentials.json file cannot be found.
       */
      private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT)
          throws IOException {
        // Load client secrets.
        InputStream in = ClassroomQuickstart.class.getResourceAsStream(CREDENTIALS_FILE_PATH);
        if (in == null) {
          throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH);
        }
        GoogleClientSecrets clientSecrets =
            GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
    
        // Build flow and trigger user authorization request.
        GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
            HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
            .setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))
            .setAccessType("offline")
            .build();
        LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build();
        return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
      }
    
      public static void main(String... args) throws IOException, GeneralSecurityException {
        // Build a new authorized API client service.
        final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
        Classroom service =
            new Classroom.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
                .setApplicationName(APPLICATION_NAME)
                .build();
    
        // List the first 10 courses that the user has access to.
        ListCoursesResponse response = service.courses().list()
            .setPageSize(10)
            .execute();
        List<Course> courses = response.getCourses();
        if (courses == null || courses.size() == 0) {
          System.out.println("No courses found.");
        } else {
          System.out.println("Courses:");
          for (Course course : courses) {
            System.out.printf("%s\n", course.getName());
          }
        }
      }
    }

Paso 3: Ejecuta la muestra

Realiza lo siguiente para ejecutar la muestra:

  1. Ejecuta el siguiente comando:

    gradle run
    

    Este comando compila y ejecuta la muestra.

  2. (opcional). Si es la primera vez que ejecutas la muestra, esta abrirá una ventana nueva que te pedirá que autorices el acceso a tus datos:

    1. Si aún no lo has hecho, se te solicitará que lo hagas. Si accediste a varias Cuentas de Google, se te pedirá que selecciones una para usar en la autorización.
    1. Haz clic en Aceptar. La app está autorizada para acceder a tus datos.
  3. Se ejecuta la muestra.

Si tienes problemas, consulta la sección Soluciona problemas de la muestra.

Soluciona problemas de la muestra

En esta sección, se describe un problema común que puedes encontrar cuando intentas ejecutar esta guía de inicio rápido.

This app isn't verified

Si en la pantalla de consentimiento de OAuth se muestra el mensaje de advertencia "Esta app no está verificada", significa que tu app solicita permisos que proporcionan acceso a datos sensibles del usuario. Si tu aplicación usa permisos sensibles, debe someterse al proceso de verificación para quitar esa advertencia y otras limitaciones. Durante la fase de desarrollo, para continuar más allá de esta advertencia, selecciona Advanced > Go to {Project Name}(no seguro).

File not found error for credentials.json

Cuando ejecutes la muestra, es posible que recibas un archivo no encontrado o que no tenga ese error de credenciales.json.

Este error se produce cuando no autorizas las credenciales de la aplicación para computadoras de escritorio, como se detalla en la sección Requisitos previos anterior. Si quieres obtener información sobre cómo crear credenciales para una aplicación de escritorio, ve a Crea credenciales.

Una vez que crees las credenciales, asegúrate de que el archivo JSON descargado se guarde como credentials.json. Luego, mueve el archivo a tu directorio de trabajo con el resto del código de inicio rápido de muestra.

Lecturas adicionales

Para obtener más información sobre las API que se usan en esta guía de inicio rápido, consulta lo siguiente: