Календарь Zend GData: я не могу использовать setUpdatedMin в запросе - PullRequest
2 голосов
/ 14 марта 2011

Я пытаюсь получить все события, созданные в Календаре Google, после отметки времени (скажем, час назад).
Я использую библиотеку Zend GData.

Если я запускаю этот код (посленеобходимые инициализации) все работает отлично:

$query = $this->service->newEventQuery();
$query->setUser($this->getCalendarId());
$query->setVisibility('private');
$query->setProjection('full');
$query->setOrderby('starttime');
$query->setSingleevents('false');
$query->setParam('ctz', 'UTC');
$query->setMaxResults(5000);

// Retrieve the event list from the calendar server
try {
    $eventFeed = $this->service->getCalendarEventFeed($query);
} catch (Zend_Gdata_App_Exception $e) {
    echo "Error: " . $e->getMessage();
}

Но когда я пытаюсь установить параметр обновленного минимума запроса следующим образом:

$dateFormat = 'Y-m-d\TH:i:s\Z';
$query->setUpdatedMin(date($dateFormat, time()-3600));

Я получаю эту ошибку:

Unknown authorization header
Error 401

Затем я обнаружил кое-что очень интересное при отладке библиотеки Zend Gdata: URL, который отправляется в Google, выглядит следующим образом:

http://www.google.com:80/calendar/feeds/mywebsite.com_f7j5nudhqc8p7suju8svd2gl8s@group.calendar.google.com/private/full?orderby=starttime&singleevents=false&ctz=UTC&max-results=5000&updated-min=2011-03-14T15:17:37Z

Если я включу это визменил только http: // на https://)

https://www.google.com/calendar/feeds/mywebsite.com_f7j5nudhqc8p7suju8svd2gl8s@group.calendar.google.com/private/full?orderby=starttime&singleevents=false&ctz=UTC&max-results=5000&updated-min=2011-03-14T15:17:37Z

и вставил этот URL в Google Chrome. Я получаю все события, обновленные после 2011-03-14T15: 17: 37Z, как я хотел.

Исходя из этого, я подумал, что было бы неплохо изменить содержимое переменной $ scope в коде инициализации, чтобы сгенерировать URL для аутентификации пользователя:

$next = getCurrentUrl();
$scope = "http://www.google.com/calendar/feeds";
$secure = true;
$session = true;

// Redirect the user to the AuthSub server to sign in

$authSubUrl = Zend_Gdata_AuthSub::getAuthSubTokenUri($next,
                                                     $scope,
                                                     $secure,
                                                     $session);

из

$scope = "http://www.google.com/calendar/feeds";

до

$scope = "https://www.google.com/calendar/feeds/";

(как указано здесь http://code.google.com/apis/calendar/data/1.0/developers_guide_php.html)

Но в этом случае я получаю:

Token invalid - AuthSub token has wrong scope

У меня закончились идеи после 10 часов отладки и поиска в Google!Я не знаю что делатьПожалуйста, любые идеи или обходные пути очень приветствуются.

Спасибо,
Дан

1 Ответ

1 голос
/ 17 июля 2011

Это может быть ошибка, потому что у меня та же проблема. Кто-то еще также испытывает ошибку 401.Для меня это работает без setStartMin / setStartMax, но как только я добавлю их, я получу 401.

...