Ответ 1
Ну, так как никто не ответил, я решил начать разбираться в документации, отличной от PHP, для API календаря Google, особенно в материалах .NET и немного в необработанном протоколе. И ты не знаешь этого...
Если вы перейдете в документацию .NET, в нем упоминаются классные новые функции, в частности, как создавать новые непервичные календари для аутентифицированных пользователей и как добавлять события в непервичные календари.
Конечно, эта документация нигде не отображается в области PHP, и, похоже, не существует взаимно однозначной корреляции. Для создания нового календаря я сначала попробовал некоторые очевидные вещи, затем, разобравшись, попробовал что-то не так очевидное, что сработало. Я думал, что поделился бы тем, что причина для радиомолчания заключалась в том, что никто не знал ответа, но обязательно хотел бы.
Чтобы создать новый календарь:
Есть два ключа к этому:
-
Вы должны использовать тот же метод для добавления событий календаря, который
insertEvent()
-
Вы должны установить URL-адрес сообщения в методе, который в противном случае переходит к URL-адресу фида по умолчанию.
В этом примере проверяется, существует ли календарь приложений, а если нет, он создает его:
//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 "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 info is nowhere in there
$own_cal = "http://www.google.com/calendar/feeds/default/owncalendars/full";
//And here the payoff.
//Use the insertEvent method, set the second optional var to the right URL
$gdataCal->insertEvent($appCal, $own_cal);
}
И у вас это есть. Следующая цель - вставить события в этот календарь, а не в календарь по умолчанию.
Добавление событий в непервичный календарь
Легкая часть, которую вы, вероятно, можете догадаться, заключается в том, что вам нужно снова установить этот дополнительный URL, например: insertEvent($newEvent, $calURL)
, сложная часть получает URL-адрес календаря. В отличие от пути "принадлежащих календарям", определенные календари не только содержат информацию о пользователе, но также имеют идентификатор hash-lookin '.
Здесь код:
//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>";
Спасибо всем, кто прочитал мой вопрос и подумал об этом. Если кто-нибудь знает способ затянуть вышеприведенный код (может быть, мне не нужны две петли?) Мне бы хотелось получить обратную связь.