войдите в браузер в Google с помощью php (zend gdata)

Я использовал ссылку для личного доступа для просмотра календаря на личной странице моих пользователей, но теперь Google решил кое-что изменить https://www.google.com/support/calendar/bin/answer.py?answer=1631300

Скажем, у меня есть пароль и имя пользователя. Я могу войти в учетную запись Google и добавить события или прочее с помощью Zend Framework, но как я могу войти в Google и сделать так, чтобы браузер вошел в систему (введите файл cookie или что-то в этом роде, как если бы пользователь перешел в Gmail, он уже вошел в систему) .

Таким образом, пользователь будет видеть свой собственный календарь и не будет получать никаких предупреждений.

ОБНОВЛЕНИЕ

как я могу показать календарь (даже чтение было бы нормально) в iframe, если у меня есть пользователь / пароль его учетной записи gmail (или google)


person max4ever    schedule 19.09.2011    source источник
comment
Ради бога, народ. Это Zend Framework, Zend - это компания.   -  person markus    schedule 20.09.2011


Ответы (2)


Вы должны убедиться, что пользователь либо предоставил доступ к календарю, либо сделал его общедоступным. Google пытается усилить их безопасность. Метод, который вы использовали, позволил вам получить доступ к личным календарям пользователя. Это явно нежелательное поведение. API Google Data Protocol поддерживает несколько методов аутентификации. Страница ЗДЕСЬ поможет вам выбрать, что подходит для вашего приложения. . Документы api рекомендуют использовать oauth для аутентификации, а сайт http://oauth.net/code предлагает несколько библиотек для доступа API от PHP. OpenID также является поддерживаемым вариантом, а также гибридом, который предназначен для оптимизации процесса за счет использования преимуществ как OAuth, так и OpenID.

Что касается отображения календаря в IFrame, просто создайте html-страницу, которая извлекает поток атома для вашего календаря и отображает события как html. Поскольку это XML, любой метод обработки XML, который вам нравится, будет работать (например, XSLT, simpleXML и т. Д.). Затем используйте URL-адрес этой страницы в качестве атрибута источника вашего iframe.

Вот пример использования библиотеки ZEND gata:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>Example List of calendar contents</title>
  </head>
  <body>
    <?php
      // load library
      require_once 'Zend/Loader.php';
      Zend_Loader::loadClass('Zend_Gdata');
      Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
      Zend_Loader::loadClass('Zend_Gdata_Calendar');
      Zend_Loader::loadClass('Zend_Http_Client');

      // create authenticated HTTP client for Calendar service
      $gcal = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
      $user = "[email protected]";
      $pass = "pass";
      $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $gcal);
      $gcal = new Zend_Gdata_Calendar($client);

      // generate query to get event list
      $query = $gcal->newEventQuery();
      $query->setUser('default');
      $query->setVisibility('private');
      $query->setProjection('basic');

      // get and parse calendar feed
      // print output
      try { $feed = $gcal->getCalendarEventFeed($query); } 
      catch (Zend_Gdata_App_Exception $e) { echo "Error: " . $e->getResponse(); }
    ?>
    <h1><?php echo $feed->title; ?></h1>
    <p><?php echo $feed->totalResults; ?> event(s) found.<p/>
    <ol>
      <?php        
        foreach ($feed as $event) 
        {
          echo "<li>\n";
          echo "<h2>" . stripslashes($event->title) . "</h2>\n";
          echo stripslashes($event->summary) . " <br/>\n";
          echo "</li>\n";
        }
        echo "</ul>";
      ?>
    </ol>

  </body>
</html> 

URL-адрес этого файла является источником вашего IFrame.
Удачи и удачного кодирования.

person Sinthia V    schedule 18.10.2011
comment
Благодарность! но могу ли я ввести эти события в какой-нибудь календарь javascript, чтобы представить пользователю какой-то календарь, похожий на Google? иначе это бесполезно для меня - person max4ever; 19.10.2011
comment
Вы можете отображать его как хотите. В простом примере просто перечислены результаты, но вы можете сделать отображение настолько красивым, насколько захотите. - person Sinthia V; 22.10.2011

Вы не можете записывать файлы cookie за пределами своего домена из-за межсайтовой политики.

Самое простое, что вы можете сделать, - это потребовать от пользователя войти в свою учетную запись Google. Как и здесь, в Stackoverflow, если вы используете его с учетной записью Google, пользователь перенаправляется на страницу входа в Google, он предоставляет разрешения, а затем перенаправляется обратно на ваш сайт.

Я думаю, что это может быть полезным ресурсом.

person usoban    schedule 19.09.2011
comment
Да, использовать открытую аутентификацию. Пользователь входит на ваш сайт со своим Google ID, и у вас нет таких проблем. - person markus; 20.09.2011
comment
не могу ли я автоматизировать это для пользователя, это внутренний веб-сайт, и каждый раз просить пользователя входить в систему неприемлемо ... - person max4ever; 18.10.2011
comment
Файл cookie Google имеет довольно долгий срок годности. А это означает, что в следующий раз, когда пользователь попытается использовать ваше приложение, он войдет в систему автоматически. - person usoban; 18.10.2011