Google Web API可以拥有自己的Google资源吗?

问题描述 投票:0回答:1

我有一个Java Web服务器,它使用的是Google Calendar。我正在尝试开发一个包含N个日历的网络应用程序,其中网络应用程序可以创建自己的日历,在那里它可以编辑它并与应用程序的用户共享。

我怀疑的是,Google Web API是否可以拥有自己的Google资源(Calendars,Docs,Spread ...),或者只能处理用户的资源。

如果答案是肯定的¿如何创造它?按照Google日历API和Google API网络应用凭据,我尝试获取日历列表并创建一个日历,但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();
}

谢谢!!

java google-calendar-api
1个回答
1
投票

您的错误与凭据有关。 401 error表示您使用的访问令牌已过期或无效。主要检查建议的操作:

© www.soinside.com 2019 - 2024. All rights reserved.