Vì không có ai trả lời nên tôi quyết định bắt đầu xem xét tài liệu không phải PHP cho API Lịch Google, cụ thể là về nội dung .NET và chỉ một chút về giao thức thô. Và bạn sẽ không biết điều đó ...
Nếu bạn truy cập tài liệu .NET, nó đề cập đến mới thú vị các tính năng, cụ thể là cách tạo lịch phụ mới cho người dùng đã xác thực và cách thêm sự kiện vào lịch không chính.
Tất nhiên, tài liệu này không hiển thị ở đâu trong khu vực PHP và dường như không có mối tương quan 1-1. Đối với việc tạo lịch mới, trước tiên tôi đã thử một số thứ rõ ràng, sau đó, đột nhiên, thử một thứ gì đó không quá rõ ràng nhưng có hiệu quả. Tôi nghĩ tôi sẽ chia sẻ trong trường hợp lý do radio im lặng là không ai biết câu trả lời nhưng chắc chắn là muốn.
Để tạo lịch mới:
Có hai chìa khóa cho điều này:
-
Bạn phải sử dụng cùng một phương pháp để thêm các sự kiện lịch, đó là
insertEvent()
-
Bạn phải đặt URL bài đăng trong phương thức này, nếu không, URL này sẽ chuyển đến URL nguồn cấp dữ liệu mặc định.
Ví dụ này kiểm tra xem Lịch ứng dụng đã tồn tại chưa và nếu chưa, hãy tạo nó:
//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);
}
Và bạn có nó rồi đấy! Mục tiêu tiếp theo là chèn sự kiện vào lịch đó, không phải lịch mặc định.
Thêm sự kiện vào lịch không phải lịch chính
Phần dễ dàng mà bạn có thể đoán được là bạn cần đặt lại URL tùy chọn đó, chẳng hạn như:insertEvent($newEvent, $calURL)
, phần khó là lấy URL của lịch. Không giống như đường dẫn "lịch được sở hữu", các lịch cụ thể không chỉ có thông tin người dùng cụ thể trong đó mà chúng còn có một số loại mã băm trong đó.
Đây là mã:
//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>";
Cảm ơn bất kỳ ai đã đọc câu hỏi của tôi và đã suy nghĩ về nó. Nếu ai đó biết cách để thắt chặt đoạn mã trên (có lẽ tôi không cần hai vòng lặp?) Tôi rất muốn nhận được phản hồi.