Karena tidak ada yang menjawab, saya memutuskan untuk mulai mencari-cari dokumentasi non-PHP untuk Google Calendar API, khususnya pada hal-hal .NET dan hanya sedikit dalam protokol mentah. Dan tidakkah kamu mengetahuinya...
Jika Anda pergi ke dokumentasi .NET itu menyebutkan keren baru fitur, khususnya cara membuat kalender non-utama baru untuk pengguna yang diautentikasi dan cara menambahkan acara ke kalender non-utama.
Tentu saja, dokumentasi ini tidak muncul di mana pun di area PHP, dan sepertinya tidak ada korelasi satu-ke-satu. Untuk membuat kalender baru, saya mencoba beberapa hal yang jelas terlebih dahulu, kemudian, bangkrut, mencoba sesuatu yang tidak terlalu jelas yang berhasil. Saya pikir saya akan berbagi jika alasan keheningan radio adalah karena tidak ada yang tahu jawabannya tapi pasti mau.
Untuk membuat kalender baru:
Ada dua kunci untuk ini:
-
Anda harus menggunakan metode yang sama untuk menambahkan acara kalender, yaitu
insertEvent()
-
Anda harus menyetel URL postingan dalam metode, yang jika tidak, akan menuju ke URL feed default.
Contoh ini memeriksa untuk melihat apakah Kalender Aplikasi sudah ada dan jika tidak, membuatnya:
//Standard creation of the HTTP client
$gdataCal = new Zend_Gdata_Calendar($client);
//Get list of existing calendars
$calFeed = $gdataCal->getCalendarListFeed();
//Set this to true by default, only gets set to false if calendar is found
$noAppCal = true;
//Loop through calendars and check name which is ->title->text
foreach ($calFeed as $calendar) {
if($calendar -> title -> text == "App Calendar") {
$noAppCal = false;
}
}
//If name not found, create the calendar
if($noAppCal) {
// I actually had to guess this method based on Google API's "magic" factory
$appCal = $gdataCal -> newListEntry();
// I only set the title, other options like color are available.
$appCal -> title = $gdataCal-> newTitle("App Calendar");
//This is the right URL to post to for new calendars...
//Notice that the user's info is nowhere in there
$own_cal = "http://www.google.com/calendar/feeds/default/owncalendars/full";
//And here's the payoff.
//Use the insertEvent method, set the second optional var to the right URL
$gdataCal->insertEvent($appCal, $own_cal);
}
Dan di sana Anda memilikinya. Tujuan selanjutnya adalah menyisipkan acara ke kalender itu, bukan ke kalender default.
Menambahkan acara ke kalender non-utama
Bagian mudah yang mungkin bisa Anda tebak adalah Anda perlu menyetel URL opsional itu lagi, seperti:insertEvent($newEvent, $calURL)
, bagian yang sulit adalah mendapatkan URL kalender. Tidak seperti jalur "kalender milik", kalender tertentu tidak hanya memiliki info khusus pengguna di dalamnya, tetapi juga memiliki semacam ID yang terlihat di sana.
Ini kodenya:
//Set up that loop again to find the new calendar:
$calFeed = $gdataCal->getCalendarListFeed();
foreach ($calFeed as $calendar) {
if($calendar->title->text == "App Calendar")
//This is the money, you need to use '->content-src'
//Anything else and you have to manipulate it to get it right.
$appCalUrl = $calendar->content->src;
}
//.......... Some Assumed MySQL query and results .............
while ($event = $result->fetch_assoc()) {
$title = $event['description'];
//Quick heads up
//This is a handy way of getting the date/time in one expression.
$eventStart = date('Y-m-d\TH:i:sP', strtotime($event['start']));
$eventEnd = date('Y-m-d\TH:i:sP', strtotime($event['end']));
$newEvent = $gdataCal->newEventEntry();
$newEvent->title = $gdataCal->newTitle($title);
$when = $gdataCal->newWhen();
$when->startTime = $eventStart;
$when->endTime = $eventEnd;
$newEvent->when = array($when);
//And at last, the insert is set to the calendar URL found above
$createdEvent = $gdataCal->insertEvent($newEvent, $appCalUrl);
}
echo "<p>".$result->num_rows." added to your Google calendar.</p>";
Terima kasih kepada siapa pun yang membaca pertanyaan saya dan memikirkannya. Jika ada yang tahu cara mengencangkan kode di atas (mungkin saya tidak perlu dua loop?) Saya ingin mendapatkan umpan balik.