Как вставить в Календарь Google не по умолчанию, используя Zend/PHP

Я пытаюсь вставить новое событие в Календарь 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/[email protected]/private/full";
$newEvent = $service->insertEvent($event, $uri);

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

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


person davearchie    schedule 17.02.2009    source источник


Ответы (2)


Обнаружена проблема: приведенный выше URI не работает: "http://www.google.com/calendar/feeds/по умолчанию/[email protected]/private/full";

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

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

person davearchie    schedule 19.02.2009

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

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

(идентификатор календаря: [email protected])

Вы хотите [email protected]

Down the road I will want to get this in php but for now I can hard code. So I set a variable to this

$calendar_user = '[email protected]';

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

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

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

Итак, вот полный код

$calendar_user = '[email protected]';
$user = '[email protected]';
$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");

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

person Kurt    schedule 29.06.2012