API-интерфейс Google Calendar для Google Calendar
Я использую API календаря Google, чтобы показать урезанную версию моего корпоративного календаря. Я бы хотел, чтобы кто-нибудь просмотрел мою версию календаря на моем сайте. В настоящее время только я могу просмотреть страницу календаря, и если я буду делиться URL-адресом страницы с кем-либо, это не сработает - они ничего не видят.
Я использую код запуска Google здесь:
var CLIENT_ID = 'MYID**';
var SCOPES = ["https://www.googleapis.com/auth/calendar.readonly"];
function checkAuth() {
gapi.auth.authorize(
{
'client_id': CLIENT_ID,
'scope': SCOPES,
'immediate': true
}, handleAuthResult);
}
function handleAuthResult(authResult) {
var authorizeDiv = document.getElementById('authorize-div');
loadCalendarApi();
}
function handleAuthClick(event) {
gapi.auth.authorize({
client_id: CLIENT_ID,
scope: SCOPES,
immediate: false
}, handleAuthResult);
return false;
}
function loadCalendarApi() {
gapi.client.load('calendar', 'v3', listUpcomingEvents);
}
function listUpcomingEvents() {
var request = gapi.client.calendar.events.list({
'calendarId': '[email protected]',
'timeMin': '2011-06-03T10:00:00-07:00',
'showDeleted': false,
'singleEvents': true,
'maxResults': 1000,
'orderBy': 'startTime'
});
Но я не могу найти, где сделать этот календарь общедоступным. Два примера в stackoverflow не объясняют многое, и я не могу ничего связать с документацией API Google.
Ответы
Ответ 1
Если вы хотите поделиться своим календарем, вы можете сделать его общедоступным, а затем поделиться своим календарем со всеми. Вот как.
Чтобы сделать свой календарь открытым, вы можете выполнить действия этого веб-сайта https://support.google.com/calendar/answer/37083?hl=en.
Сделайте свой календарь открытым.
-
На компьютере откройте Google Calendar.
-
В правом верхнем углу нажмите "Настройки" шестерни "Настройки" > "Настройки" .
-
Откройте вкладку Календари.
-
Нажмите имя календаря, который вы хотите предоставить.
-
Откройте вкладку "Поделиться этим календарем".
-
Отметьте параметр Сделать этот календарь общедоступным.
-
Если вы не хотите, чтобы другие люди просматривали детали ваших событий, выберите "Показать только свободные/занятые" (скрыть подробности).
-
Нажмите "Сохранить".
а затем вы можете поделиться своим календарем с помощью iframe в своих вариантах календаря.
https://support.google.com/calendar/answer/41207?hl=en
Вставьте календарь на свой веб-сайт
-
На компьютере откройте Google Calendar. Вы можете получить код для встраивания на свой сайт с компьютера, а не из мобильного приложения.
-
В правом верхнем углу нажмите "Настройки" шестерни "Настройки" > "Настройки" .
-
Откройте вкладку Календари.
-
Выберите имя календаря, который хотите вставить.
-
В разделе "Вставить этот календарь" скопируйте отображаемый код iframe.
-
Откройте редактор веб-сайта, затем вставьте этот код, где вы хотите отображать календарь.
Ответ 2
Calendars ресурс не имеет атрибутов видимости. Однако, поскольку вы используете Список событий, его ресурс имеет атрибут видимости, в котором вы можете отфильтровать (хотя и вручную) предметы, которые являются общедоступными.
public The event is public and event details are visible to all readers of the calendar.
Ответ 3
Вам не нужно инициировать процесс авторизации OAuth 2.0 (который устарел), как показывает пример. Фактически, вы можете загрузить календарь с помощью ключа API браузера и идентификатора календаря:
function checkAuth() {
//gapi.auth.authorize(
// {
// 'client_id': CLIENT_ID,
// 'scope': SCOPES.join(' '),
// 'immediate': true
// }, handleAuthResult);
gapi.client.setApiKey('browser API key');
handleAuthResult({ error: false });
}
function listUpcomingEvents() {
var request = gapi.client.calendar.events.list({
'calendarId': 'your calendar id',
'timeMin': (new Date()).toISOString(),
'showDeleted': false,
'singleEvents': true,
'maxResults': 10,
'orderBy': 'startTime'
});
request.execute(function(resp) {
var events = resp.items;
appendPre('Upcoming events:');
if (events.length > 0) {
for (i = 0; i < events.length; i++) {
var event = events[i];
var when = event.start.dateTime;
if (!when) {
when = event.start.date;
}
appendPre(event.summary + ' (' + when + ')')
}
} else {
appendPre('No upcoming events found.');
}
});
}