Как вставить в Google Calendar не по умолчанию, используя Zend / PHP - PullRequest
3 голосов
/ 17 февраля 2009

Я пытаюсь вставить новое событие в Календарь Google, что я могу сделать следующим образом:

$sname = Zend_Gdata_Calendar::AUTH_SERVICE_NAME; // predefined service name for calendar
$client = Zend_Gdata_ClientLogin::getHttpClient($userName,$password,$sname);
$service = new Zend_Gdata_Calendar($client);

$event = $service->newEventEntry();
$event->title = $service->newTitle($name);
$event->when = array($when);
$newEvent = $service->insertEvent($event);

Однако, это будет только вставить в календарь по умолчанию. Я пытаюсь использовать URI-аргумент insertEvent, чтобы добраться туда, куда мне нужно перейти:

$uri = "http://www.google.com/calendar/feeds/default/something@somethingelse.com/private/full";
$newEvent = $service->insertEvent($event, $uri);

Это не сработало. Я пробовал кодировать и декодировать URI, который выдает мне разные сообщения об ошибках, но я просто не могу заставить это работать. Я уже несколько часов ищу решения Googling без удачи. Кто-нибудь может помочь?

Спасибо. - Дэйв

Ответы [ 2 ]

4 голосов
/ 19 февраля 2009

Нашел проблему: URI выше не работает: «http://www.google.com/calendar/feeds/default/something@somethingelse.com/private/full";

там не должно быть раздела по умолчанию.

Кроме того, знак @ следует заменить на кодировку. Так и должно быть: «http://www.google.com/calendar/feeds/something%40somethingelse.com/private/full";

3 голосов
/ 30 июня 2012

Я боролся с этим некоторое время, и, наконец, я получил его на работу. Это не красиво завернуто, но это ответ, который я искал

Сначала вы должны получить ID календаря. Если вы войдете в свой календарь и нажмете на значок стрелки вниз рядом с именем, вы увидите опцию для Настройки календаря. Выберите этот пункт меню. В нижней части вы увидите адрес календаря. Поиск идентификатора календаря займет некоторое время, и он будет выглядеть примерно так

(идентификатор календаря: o4g3921hdiaq5p8kdat2l4vgis@group.calendar.google.com)

Вы хотите o4g39j1hdihq4p8kdat2l4vgis@group.calendar.google.com

В будущем я захочу получить это в php, но сейчас я могу написать жесткий код. Поэтому я установил переменную на </p> <pre><code>$calendar_user = 'o4g39j1hdihq4p8kdat2l4vgis@group.calendar.google.com';

При извлечении событий вы устанавливаете пользователя следующим образом

$gdataCal = new Zend_Gdata_Calendar($client);
$query = $gdataCal->newEventQuery();
$query->setUser($calendar_user);

Но когда вы добавляете событие, вы не можете этого сделать, вы должны использовать $ calendar_user в точке, где вы вставляете событие.

Так вот полный код

$calendar_user = 'o4g39j1hdihq4p8kdat2l4vgis@group.calendar.google.com';
$user = 'myemail@yahoo.com';
$pass = 'mygooglecalendarpassword';
$service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME; // predefined service name for calendar
$client = Zend_Gdata_ClientLogin::getHttpClient($user,$pass,$service);

$gc = new Zend_Gdata_Calendar($client);
$newEntry = $gc->newEventEntry();
$newEntry->title = $gc->newTitle("mytitle");
$newEntry->where  = array($gc->newWhere("meeting place"));

$newEntry->content = $gc->newContent("Meeting description");
$newEntry->content->type = 'text';

$when = $gc->newWhen();
$when->startTime = "{'2012-06-28'}T{'10:00'}:00.000{'-08'}:00";
$when->endTime = "{'2012-06-28'}T{'11:00'}:00.000{'-08'}:00";
$newEntry->when = array($when);

$createdEvent = $gc->insertEvent($newEntry, "http://www.google.com/calendar/feeds/".$calendar_user."/private/full");

Теперь я надеюсь, что это полезно. Я говорю вам, что мне понадобилось слишком много времени, чтобы понять это, но я не самый умный парень в мире.

...