Kullanıcıların en iyi doğa yürüyüşü rotalarını bulmasına yardımcı olan bir uygulama düşünün. Kullanıcılar, yürüyüş planını takvim etkinliği olarak ekleyerek otomatik şekilde organize olmaları konusunda çok yardım alır. Google Takvim, planlarını paylaşmalarına yardımcı olur ve stres yaşamadan hazırlanabilmeleri için onlara hatırlatmada bulunur. Ayrıca, Google ürünlerinin sorunsuz entegrasyonu sayesinde Google Now onlara yola çıkma vaktini pingler ve Google Haritalar onları zamanında toplantı noktasına yönlendirir.
Bu makalede, takvim etkinliklerinin nasıl oluşturulacağı ve kullanıcılarınızın takvimlerine nasıl ekleneceği açıklanmaktadır.
Etkinlik ekleyin
Etkinlik oluşturmak için en az aşağıdaki parametreleri sağlayan events.insert()
yöntemini çağırın:
calendarId
, takvim tanımlayıcısıdır ve etkinliğin oluşturulacağı takvimin e-posta adresi veya giriş yapan kullanıcının birincil takvimini kullanacak özel bir anahtar kelime'primary'
olabilir. Kullanmak istediğiniz takvimin e-posta adresini bilmiyorsanız Google Takvim web kullanıcı arayüzünün takvim ayarlarından ("Takvim Adresi" bölümünde) bu adresi kontrol edebilir veyacalendarList.list()
çağrısının sonucunda bu adresi bulabilirsiniz.event
, başlangıç ve bitiş gibi gerekli tüm ayrıntılarla birlikte oluşturulacak etkinliktir. Yalnızcastart
veend
alanlarının doldurulması zorunludur. Tüm etkinlik alanları içinevent
referansına bakın.
Başarılı bir şekilde etkinlik oluşturmak için aşağıdakileri yapmanız gerekir:
- Kullanıcının takvimine düzenleme erişiminiz olması için OAuth kapsamınızı
https://www.googleapis.com/auth/calendar
olarak ayarlayın. - Kimliği doğrulanan kullanıcının sağladığınız
calendarId
ile takvime yazma erişimi olduğundan emin olun (örneğin,calendarId
içincalendarList.get()
yöntemini çağırıpaccessRole
özelliğini kontrol ederek).
Etkinlik meta verileri ekleme
Bir takvim etkinliği oluştururken isteğe bağlı olarak etkinlik meta verileri ekleyebilirsiniz. Oluşturma sırasında meta veri eklememeyi tercih ederseniz events.update()
ile birçok alanı güncelleyebilirsiniz ancak etkinlik kimliği gibi bazı alanlar yalnızca events.insert()
işlemi sırasında ayarlanabilir.
- Konum
Konum alanına bir adres eklemek,
yol tarifi içeren bir harita görüntüleyebilir veya görüntüleyebilirsiniz.
- Etkinlik Kimliği
Bir etkinlik oluştururken kendi etkinlik kimliğinizi oluşturmayı seçebilirsiniz
bir reklam grubu oluşturmanız gerekir. Böylece yerel veritabanınızdaki varlıkları Google Takvim'deki etkinliklerle senkronize bir şekilde tutabilirsiniz. Ayrıca, işlem Takvim arka ucunda başarıyla yürütüldükten sonra bir noktada başarısız olursa yinelenen etkinlik oluşturulmasını da engeller. Etkinlik kimliği sağlanmazsa sunucu sizin için bir etkinlik kimliği oluşturur. Daha fazla bilgi için etkinlik kimliği referansına bakın.
- Katılımcılar
Oluşturduğunuz etkinlik şu bölgenin tüm birincil Google Takvimlerinde görünür:
aynı etkinlik kimliğine dahil ettiğiniz katılımcılar. Ekleme isteğinizde
sendNotifications
değerinitrue
olarak ayarlarsanız katılımcılar etkinliğinizle ilgili bir e-posta bildirimi alır. Daha fazla bilgi için birden fazla katılımcılı etkinlikler rehberine bakın.
Aşağıdaki örneklerde etkinlik oluşturma ve etkinliğin meta verilerini ayarlama gösterilmektedir:
Go
// Refer to the Go quickstart on how to setup the environment:
// https://developers.google.com/calendar/quickstart/go
// Change the scope to calendar.CalendarScope and delete any stored credentials.
event := &calendar.Event{
Summary: "Google I/O 2015",
Location: "800 Howard St., San Francisco, CA 94103",
Description: "A chance to hear more about Google's developer products.",
Start: &calendar.EventDateTime{
DateTime: "2015-05-28T09:00:00-07:00",
TimeZone: "America/Los_Angeles",
},
End: &calendar.EventDateTime{
DateTime: "2015-05-28T17:00:00-07:00",
TimeZone: "America/Los_Angeles",
},
Recurrence: []string{"RRULE:FREQ=DAILY;COUNT=2"},
Attendees: []*calendar.EventAttendee{
&calendar.EventAttendee{Email:"lpage@example.com"},
&calendar.EventAttendee{Email:"sbrin@example.com"},
},
}
calendarId := "primary"
event, err = srv.Events.Insert(calendarId, event).Do()
if err != nil {
log.Fatalf("Unable to create event. %v\n", err)
}
fmt.Printf("Event created: %s\n", event.HtmlLink)
Java
// Refer to the Java quickstart on how to setup the environment:
// https://developers.google.com/calendar/quickstart/java
// Change the scope to CalendarScopes.CALENDAR and delete any stored
// credentials.
Event event = new Event()
.setSummary("Google I/O 2015")
.setLocation("800 Howard St., San Francisco, CA 94103")
.setDescription("A chance to hear more about Google's developer products.");
DateTime startDateTime = new DateTime("2015-05-28T09:00:00-07:00");
EventDateTime start = new EventDateTime()
.setDateTime(startDateTime)
.setTimeZone("America/Los_Angeles");
event.setStart(start);
DateTime endDateTime = new DateTime("2015-05-28T17:00:00-07:00");
EventDateTime end = new EventDateTime()
.setDateTime(endDateTime)
.setTimeZone("America/Los_Angeles");
event.setEnd(end);
String[] recurrence = new String[] {"RRULE:FREQ=DAILY;COUNT=2"};
event.setRecurrence(Arrays.asList(recurrence));
EventAttendee[] attendees = new EventAttendee[] {
new EventAttendee().setEmail("lpage@example.com"),
new EventAttendee().setEmail("sbrin@example.com"),
};
event.setAttendees(Arrays.asList(attendees));
EventReminder[] reminderOverrides = new EventReminder[] {
new EventReminder().setMethod("email").setMinutes(24 * 60),
new EventReminder().setMethod("popup").setMinutes(10),
};
Event.Reminders reminders = new Event.Reminders()
.setUseDefault(false)
.setOverrides(Arrays.asList(reminderOverrides));
event.setReminders(reminders);
String calendarId = "primary";
event = service.events().insert(calendarId, event).execute();
System.out.printf("Event created: %s\n", event.getHtmlLink());
JavaScript
// Refer to the JavaScript quickstart on how to setup the environment:
// https://developers.google.com/calendar/quickstart/js
// Change the scope to 'https://www.googleapis.com/auth/calendar' and delete any
// stored credentials.
const event = {
'summary': 'Google I/O 2015',
'location': '800 Howard St., San Francisco, CA 94103',
'description': 'A chance to hear more about Google\'s developer products.',
'start': {
'dateTime': '2015-05-28T09:00:00-07:00',
'timeZone': 'America/Los_Angeles'
},
'end': {
'dateTime': '2015-05-28T17:00:00-07:00',
'timeZone': 'America/Los_Angeles'
},
'recurrence': [
'RRULE:FREQ=DAILY;COUNT=2'
],
'attendees': [
{'email': 'lpage@example.com'},
{'email': 'sbrin@example.com'}
],
'reminders': {
'useDefault': false,
'overrides': [
{'method': 'email', 'minutes': 24 * 60},
{'method': 'popup', 'minutes': 10}
]
}
};
const request = gapi.client.calendar.events.insert({
'calendarId': 'primary',
'resource': event
});
request.execute(function(event) {
appendPre('Event created: ' + event.htmlLink);
});
Node.js
// Refer to the Node.js quickstart on how to setup the environment:
// https://developers.google.com/calendar/quickstart/node
// Change the scope to 'https://www.googleapis.com/auth/calendar' and delete any
// stored credentials.
const event = {
'summary': 'Google I/O 2015',
'location': '800 Howard St., San Francisco, CA 94103',
'description': 'A chance to hear more about Google\'s developer products.',
'start': {
'dateTime': '2015-05-28T09:00:00-07:00',
'timeZone': 'America/Los_Angeles',
},
'end': {
'dateTime': '2015-05-28T17:00:00-07:00',
'timeZone': 'America/Los_Angeles',
},
'recurrence': [
'RRULE:FREQ=DAILY;COUNT=2'
],
'attendees': [
{'email': 'lpage@example.com'},
{'email': 'sbrin@example.com'},
],
'reminders': {
'useDefault': false,
'overrides': [
{'method': 'email', 'minutes': 24 * 60},
{'method': 'popup', 'minutes': 10},
],
},
};
calendar.events.insert({
auth: auth,
calendarId: 'primary',
resource: event,
}, function(err, event) {
if (err) {
console.log('There was an error contacting the Calendar service: ' + err);
return;
}
console.log('Event created: %s', event.htmlLink);
});
PHP
// Refer to the PHP quickstart on how to setup the environment:
// https://developers.google.com/calendar/quickstart/php
// Change the scope to Google_Service_Calendar::CALENDAR and delete any stored
// credentials.
$event = new Google_Service_Calendar_Event(array(
'summary' => 'Google I/O 2015',
'location' => '800 Howard St., San Francisco, CA 94103',
'description' => 'A chance to hear more about Google\'s developer products.',
'start' => array(
'dateTime' => '2015-05-28T09:00:00-07:00',
'timeZone' => 'America/Los_Angeles',
),
'end' => array(
'dateTime' => '2015-05-28T17:00:00-07:00',
'timeZone' => 'America/Los_Angeles',
),
'recurrence' => array(
'RRULE:FREQ=DAILY;COUNT=2'
),
'attendees' => array(
array('email' => 'lpage@example.com'),
array('email' => 'sbrin@example.com'),
),
'reminders' => array(
'useDefault' => FALSE,
'overrides' => array(
array('method' => 'email', 'minutes' => 24 * 60),
array('method' => 'popup', 'minutes' => 10),
),
),
));
$calendarId = 'primary';
$event = $service->events->insert($calendarId, $event);
printf('Event created: %s\n', $event->htmlLink);
Python
# Refer to the Python quickstart on how to setup the environment:
# https://developers.google.com/calendar/quickstart/python
# Change the scope to 'https://www.googleapis.com/auth/calendar' and delete any
# stored credentials.
event = {
'summary': 'Google I/O 2015',
'location': '800 Howard St., San Francisco, CA 94103',
'description': 'A chance to hear more about Google\'s developer products.',
'start': {
'dateTime': '2015-05-28T09:00:00-07:00',
'timeZone': 'America/Los_Angeles',
},
'end': {
'dateTime': '2015-05-28T17:00:00-07:00',
'timeZone': 'America/Los_Angeles',
},
'recurrence': [
'RRULE:FREQ=DAILY;COUNT=2'
],
'attendees': [
{'email': 'lpage@example.com'},
{'email': 'sbrin@example.com'},
],
'reminders': {
'useDefault': False,
'overrides': [
{'method': 'email', 'minutes': 24 * 60},
{'method': 'popup', 'minutes': 10},
],
},
}
event = service.events().insert(calendarId='primary', body=event).execute()
print 'Event created: %s' % (event.get('htmlLink'))
Ruby
event = Google::Apis::CalendarV3::Event.new(
summary: 'Google I/O 2015',
location: '800 Howard St., San Francisco, CA 94103',
description: 'A chance to hear more about Google\'s developer products.',
start: Google::Apis::CalendarV3::EventDateTime.new(
date_time: '2015-05-28T09:00:00-07:00',
time_zone: 'America/Los_Angeles'
),
end: Google::Apis::CalendarV3::EventDateTime.new(
date_time: '2015-05-28T17:00:00-07:00',
time_zone: 'America/Los_Angeles'
),
recurrence: [
'RRULE:FREQ=DAILY;COUNT=2'
],
attendees: [
Google::Apis::CalendarV3::EventAttendee.new(
email: 'lpage@example.com'
),
Google::Apis::CalendarV3::EventAttendee.new(
email: 'sbrin@example.com'
)
],
reminders: Google::Apis::CalendarV3::Event::Reminders.new(
use_default: false,
overrides: [
Google::Apis::CalendarV3::EventReminder.new(
reminder_method: 'email',
minutes: 24 * 60
),
Google::Apis::CalendarV3::EventReminder.new(
reminder_method: 'popup',
minutes: 10
)
]
)
)
result = client.insert_event('primary', event)
puts "Event created: #{result.html_link}"
Etkinliklere Drive ekleri ekleme
Dokümanlar'da toplantı notları, E-Tablolar'daki bütçeler, Slaytlar'daki sunular gibi Google Drive dosyalarını veya ilgili diğer Google Drive dosyalarını takvim etkinliklerinize ekleyebilirsiniz. events.insert()
veya daha yeni bir sürümle güncelleme kapsamında etkinlik
oluşturduğunuzda (ör. events.patch()
ile bir etkinlik oluştururken) eki ekleyebilirsiniz.
Bir etkinliğe Google Drive dosyası eklemenin iki bölümü şunlardır:
- Genellikle
files.get()
yöntemini kullanarak Drive API Dosyaları kaynağındanalternateLink
URL,title
vemimeType
dosyasını alın. - İstek gövdesinde
attachments
alanları vesupportsAttachments
parametresitrue
olarak ayarlanmış şekilde bir etkinlik oluşturun veya etkinliği güncelleyin.
Aşağıdaki kod örneğinde ek eklemek için mevcut bir etkinliğin nasıl güncelleneceği gösterilmektedir:
Java
public static void addAttachment(Calendar calendarService, Drive driveService, String calendarId,
String eventId, String fileId) throws IOException {
File file = driveService.files().get(fileId).execute();
Event event = calendarService.events().get(calendarId, eventId).execute();
List<EventAttachment> attachments = event.getAttachments();
if (attachments == null) {
attachments = new ArrayList<EventAttachment>();
}
attachments.add(new EventAttachment()
.setFileUrl(file.getAlternateLink())
.setMimeType(file.getMimeType())
.setTitle(file.getTitle()));
Event changes = new Event()
.setAttachments(attachments);
calendarService.events().patch(calendarId, eventId, changes)
.setSupportsAttachments(true)
.execute();
}
PHP
function addAttachment($calendarService, $driveService, $calendarId, $eventId, $fileId) {
$file = $driveService->files->get($fileId);
$event = $calendarService->events->get($calendarId, $eventId);
$attachments = $event->attachments;
$attachments[] = array(
'fileUrl' => $file->alternateLink,
'mimeType' => $file->mimeType,
'title' => $file->title
);
$changes = new Google_Service_Calendar_Event(array(
'attachments' => $attachments
));
$calendarService->events->patch($calendarId, $eventId, $changes, array(
'supportsAttachments' => TRUE
));
}
Python
def add_attachment(calendarService, driveService, calendarId, eventId, fileId):
file = driveService.files().get(fileId=fileId).execute()
event = calendarService.events().get(calendarId=calendarId,
eventId=eventId).execute()
attachments = event.get('attachments', [])
attachments.append({
'fileUrl': file['alternateLink'],
'mimeType': file['mimeType'],
'title': file['title']
})
changes = {
'attachments': attachments
}
calendarService.events().patch(calendarId=calendarId, eventId=eventId,
body=changes,
supportsAttachments=True).execute()
Etkinliklere video konferans ve telefon konferansı ekleme
Kullanıcılarınızın telefon araması veya görüntülü görüşme yoluyla uzaktan toplantı yapabilmesi için etkinlikleri Hangouts ve Google Meet konferanslarıyla ilişkilendirebilirsiniz.
conferenceData
alanı mevcut konferans ayrıntılarını okumak, kopyalamak ve temizlemek için kullanılabilir; ayrıca yeni konferanslar oluşturulmasını istemek için de kullanılabilir. Konferans ayrıntılarının oluşturulmasına ve değiştirilmesine izin vermek için conferenceDataVersion
istek parametresini 1
olarak ayarlayın.
conferenceData.conferenceSolution.key.type
ile belirtildiği gibi, şu anda desteklenen üç tür conferenceData
vardır:
- Tüketiciler için Hangouts (
eventHangout
) - Kullanıcılar için Google Workspace klasik Hangouts
(kullanımdan kaldırıldı;
eventNamedHangout
) - Google Meet (
hangoutsMeet
)
Bir kullanıcının herhangi bir takvimi için hangi konferans türünün desteklendiğini öğrenmek için calendars
ve calendarList
koleksiyonlarındaki conferenceProperties.allowedConferenceSolutionTypes
bölümünü inceleyebilirsiniz. Ayrıca kullanıcının, settings
koleksiyonundaki autoAddHangouts
ayarını kontrol ederek yeni oluşturulan tüm etkinlikler için Hangouts oluşturulmasını tercih edip etmediğini de öğrenebilirsiniz.
type
alanının yanı sıra conferenceSolution
, konferans çözümünü temsil etmek için kullanabileceğiniz name
ve iconUri
alanlarını da aşağıda gösterildiği gibi sağlar:
JavaScript
const solution = event.conferenceData.conferenceSolution;
const content = document.getElementById("content");
const text = document.createTextNode("Join " + solution.name);
const icon = document.createElement("img");
icon.src = solution.iconUri;
content.appendChild(icon);
content.appendChild(text);
createRequest
adresine, rastgele string
olabilecek yeni oluşturulmuş bir requestId
sağlayarak bir etkinlik için yeni bir konferans oluşturabilirsiniz. Konferanslar eşzamansız olarak oluşturulur, ancak kullanıcılarınıza neler olduğunu bildirmek için isteğinizin durumunu istediğiniz zaman kontrol edebilirsiniz.
Örneğin, mevcut bir etkinlik için konferans oluşturulmasını istemek üzere:
JavaScript
const eventPatch = {
conferenceData: {
createRequest: {requestId: "7qxalsvy0e"}
}
};
gapi.client.calendar.events.patch({
calendarId: "primary",
eventId: "7cbh8rpc10lrc0ckih9tafss99",
resource: eventPatch,
sendNotifications: true,
conferenceDataVersion: 1
}).execute(function(event) {
console.log("Conference created for event: %s", event.htmlLink);
});
Bu çağrıya verilen acil yanıt henüz tam olarak doldurulmuş conferenceData
özelliğini içermeyebilir. Bu durum, status (durum) alanında pending
durum koduyla belirtilir. Konferans bilgileri doldurulduktan sonra durum kodu success
olarak değişir. entryPoints
alanı, kullanıcılarınızın telefonla katılmak için kullanabileceği video ve telefon URI'leri hakkında bilgiler içerir.
Aynı konferans ayrıntılarıyla birden fazla Takvim etkinliği planlamak istiyorsanız conferenceData
öğesinin tamamını bir etkinlikten diğerine kopyalayabilirsiniz.
Kopyalama belirli durumlarda yararlıdır. Diyelim ki aday ve görüşmeyi yapan kişi için ayrı etkinlikler düzenleyen bir işe alım uygulaması geliştirdiniz. Görüşmeyi yapan kişinin kimliğini korumak ama aynı zamanda tüm katılımcıların aynı konferans görüşmesine katılmasını istiyorsunuz.