Zend GData日历:我不能在查询中使用setUpdatedMin

时间:2011-03-14 19:27:20

标签: php zend-framework zend-gdata

我想在时间戳之后(比如说一小时前)在Go​​ogle日历上创建所有活动。
我正在使用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();
}

但是当我尝试以这种方式设置查询的updated-min参数时:

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

我收到此错误:

Unknown authorization header
Error 401

然后,我发现调试Zend Gdata库的一些非常有趣的事情:  被发送给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

并在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个小时的调试和谷歌搜索后,我的想法已经用完了!我不知道该怎么办。 请非常欢迎任何想法或解决方法。

谢谢,

1 个答案:

答案 0 :(得分:1)

这可能是一个错误,因为我遇到了同样的问题。 Someone else也遇到了401错误。对我来说,它没有setStartMin / setStartMax,但是一旦我把它们扔进去,我就得到了401。