Я наконец-то знаю, как это сделать, знаю.Я прочитал этот раздел: http://code.google.com/apis/calendar/data/2.0/developers_guide_protocol.html#RetrievingEvents
Когда вы отправляете этот запрос GET, Календарь может вернуть HTTP 302 перенаправление;URL перенаправления имеет новый параметр запроса, gsessionid, добавленный к нему.(Обратите внимание, что некоторые методы отправки запроса GET могут не отображать заголовки ответа по умолчанию; если вы получаете пустой ответ, обратитесь к документации своей утилиты HTTP, чтобы узнать, как просмотреть заголовки ответа.) Этот параметр gsessionid - это способ, которым Calendarотслеживает вашу сессию, чтобы улучшить скорость ответа.(Некоторые методы отправки запроса GET могут автоматически следовать за перенаправлениями, а в некоторых случаях Calendar может вообще не отправлять перенаправление; в таких случаях вам не нужно отправлять второй запрос, описанный ниже.) Поэтому после отправкизапрос GET, вы должны прочитать заголовки HTTP ответа, чтобы найти URL с добавленным идентификатором сеанса;Затем вам нужно отправить еще один запрос GET с этим новым URL.(Обратите внимание, что если вы используете командную строку UNIX для отправки запросов, вам, возможно, придется поставить вопросительный знак в новом URL-адресе с обратной косой чертой, чтобы ваша оболочка не интерпретировала его.) В ответ на второй GET-запрос Calendar возвращаеткод состояния HTTP 200 OK и канал, содержащий все события в вашем календаре.Если в вашем календаре только одно событие, Календарь возвращает что-то похожее на следующий канал.Мы немного отредактировали следующий пример, чтобы сделать его немного более читабельным для людей;в частности, реальная лента Календаря содержит действительные значения cookie-файлов и идентификаторы записей.
Поэтому, когда я делаю запрос к API, я проверяю заголовок ответа.Если код ответа = 302, я улавливаю значение gsessionid.Затем я делаю точно такой же запрос, как в первый раз, но затем с приложенным ключом и значением параметра gsessionid.Похоже, это работает для меня.
Для людей, которые хотят видеть мой код, я использую PHP с фреймворком cakephp 2.0 и некоторый класс oauth:
$consumer = $this->createConsumer();
$response = $consumer->get(
$settings['Setting']['access_token_key'],
$settings['Setting']['access_token_secret'],
$find['Calendar']['eventFeedLink'],
array(
'alt' => 'jsonc',
'start-min' => $_sunday . 'T00:00:00',
'start-max' => $_saturday . 'T23:59:59',
//'singleevents' => false
)
);
if($response->code == 302 && isset($response->headers['Location']) && !empty($response->headers['Location'])) {
$url = $response->headers['Location'];
$vars = explode('&',$url);
foreach($vars as $string){
list($is,$what) = explode('=',$string);
if($is == "gsessionid") {
$gsessionid = $what;
break;
}
}
if(isset($gsessionid) && !empty($gsessionid)) {
$response = $consumer->get(
$settings['Setting']['access_token_key'],
$settings['Setting']['access_token_secret'],
$find['Calendar']['eventFeedLink'],
array(
'alt' => 'jsonc',
'start-min' => $_sunday . 'T00:00:00',
'start-max' => $_saturday . 'T23:59:59',
'gsessionid' => $gsessionid
//'singleevents' => false
)
);
}
}