Google Web API может иметь собственные ресурсы Google? - PullRequest
0 голосов
/ 30 августа 2018

У меня есть веб-сервер Java, который использует Google Calendar. Я пытаюсь разработать веб-приложение с N календарями, где веб-приложение может создавать собственные календари, где оно может редактировать его и делиться им с пользователями приложения.

Я сомневаюсь, что веб-API Google может иметь собственные ресурсы Google (Календари, Документы, Распространение ...) или может обрабатывать только ресурсы пользователя.

Если ответ положительный ¿Как его создать? Следуя API Google Calendars и, используя учетные данные Google API Web App, я пытаюсь получить список календарей и создать его, но ответ сервера OAuth с несанкционированной ошибкой 401.

Я поставил пример моего кода:

public class CalendarQuickstart {

private static final String APPLICATION_NAME = "Apps Script";
private static final JsonFactory JSON_FACTORY = JacksonFactory.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(CalendarScopes.CALENDAR);
private static final String CREDENTIALS_FILE_PATH = "/ReservaSalaKeys.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 = CalendarQuickstart.class.getResourceAsStream(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();
    return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
}

public static void main(String... args) throws IOException, GeneralSecurityException {
    // Build a new authorized API client service.
    final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
    Calendar service = new Calendar.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
            .setApplicationName(APPLICATION_NAME).build();

    Iterator<CalendarListEntry> it = service.calendarList().list().execute().getItems().iterator();
    while(it.hasNext()) {
        System.out.println(it.next().getSummary());
    }

    int numberOfCalendars = service.calendarList().list().size();
    service.calendars().insert(
            new com.google.api.services.calendar.model.Calendar().setSummary("Calendario " + numberOfCalendars + 1))
            .execute();
}

Спасибо !!

1 Ответ

0 голосов
/ 31 августа 2018

Ваша ошибка как-то связана с учетными данными. Ошибка 401 означает, что используемый вами токен доступа устарел или недействителен. Проверьте предлагаемые действия в основном:

  • Получите новый токен доступа, используя долгоживущий токен обновления.
  • Если это не удается, направьте пользователя через поток OAuth, как описано в Авторизация запросов с помощью OAuth 2,0 . * +1011 *
  • Если вы видите это для учетной записи службы, убедитесь, что вы успешно выполнили все действия в учетной записи службы страница .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...