GData API Поделиться календарем Zend - PullRequest
2 голосов
/ 18 октября 2010

Привет, я играл с реализацией GDATA_Calendar внутри Zend Framework и успешно смог создать подкалендари.

Однако у меня возникли проблемы с динамическим обменом этими календарями с пользователями.

Просматривая официальные документы Google (http://code.google.com/apis/calendar/data/2.0/developers_guide_protocol.html#UpdateAcl) кажется, что он поддерживает изменение ACL для данного календаря, чтобы разрешить обмен с определенными пользователями.

К сожалению, я не могу заставить это работать.

Даже пытался порождать мой собственный клиент и устанавливать типы rawdata и enc, но кажется, что реализация GDATA перезаписывает типы контента?

$client = Zend_Gdata_ClientLogin::getHttpClient($this->user, $this->pass, Zend_Gdata_Calendar::AUTH_SERVICE_NAME);
            $client->setMethod("POST");
            $client->setUri($appURL . "?alt=json");
            $client->setEncType("application/json");
            $client->setRawData('{'
  . '"data": {'
  . '"scope": "darcy@gmail.com",'
  . '"scopeType": "user",'
  . '"role": "editor"'
  . '}'
  . '}"', "application/json");
            Zend_Debug::dump($client);
        $response = $client->request();


        Zend_Debug::dump($response);

Полученный ответ показывает

object(Zend_Http_Response)#558 (5) {
  ["version":protected] => string(3) "1.1"
  ["code":protected] => int(415)
  ["message":protected] => string(22) "Unsupported Media Type"
  ["headers":protected] => array(9) {
    ["Content-type"] => string(24) "text/html; charset=UTF-8"
    ["Date"] => string(29) "Mon, 18 Oct 2010 05:10:23 GMT"
    ["Expires"] => string(29) "Mon, 18 Oct 2010 05:10:23 GMT"
    ["Cache-control"] => string(18) "private, max-age=0"
    ["X-content-type-options"] => string(7) "nosniff"
    ["X-frame-options"] => string(10) "SAMEORIGIN"
    ["X-xss-protection"] => string(13) "1; mode=block"
    ["Server"] => string(3) "GSE"
    ["Connection"] => string(5) "close"
  }
  ["body":protected] => string(73) "Content-Type application/x-www-form-urlencoded is not a valid input type."
}

Как видите, он даже не принимает указанный тип контента?

Любая помощь будет принята с благодарностью

1 Ответ

0 голосов
/ 19 октября 2010
$data = "
    <entry xmlns='http://www.w3.org/2005/Atom' xmlns:gAcl='http://schemas.google.com/acl/2007'>
      <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/acl/2007#accessRule'/>
      <gAcl:scope type='user' value='{$accountEmail}'></gAcl:scope>
      <gAcl:role value='http://schemas.google.com/gCal/2005#editor'>
      </gAcl:role>
    </entry>
";

$response = $this->service->post(trim($data), $appURL);

Хорошо - нашёл ответ ... он нашел эту маленькую функцию в объекте службы gdata и использовал ее для передачи всего с заголовками.

Надеюсь, что кому-то поможет

...