我试图在时间戳之后(比如说一小时前)获取在 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();
}
但是当我尝试以这种方式设置查询的 updated-min 参数时:
$dateFormat = 'Y-m-d\TH:i:s\Z';
$query->setUpdatedMin(date($dateFormat, time()-3600));
我收到此错误:
Unknown authorization header
Error 401
然后,我在调试 Zend Gdata 库时发现了一些非常有趣的东西:发送给 Google 的 url 是这样的:
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 个小时的调试和谷歌搜索后,我的想法已经用完了!我不知道该怎么办。请任何想法或解决方法都非常受欢迎。
谢谢,
丹