Autenticarse en Google a través de un proxy y PHP
Como en los otros posts (I y II) sobre la API de Google Calendar no quedó muy claro el proceso de conexión y autenticación Google, voy a pegarte un trocito de código que además de cargar las librerías necesarias para usar las APIs de Google, también te enseña como hacerlo a través de un proxy, como es el caso de mi empresa.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <?php require_once 'Zend/Loader.php'; Zend_Loader::loadClass('Zend_Gdata_App_HttpException'); Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); Zend_Loader::loadClass('Zend_Http_Client_Exception'); Zend_Loader::loadClass('Zend_Http_Client'); Zend_Loader::loadClass('Zend_Http_Client_Adapter_Proxy'); Zend_Loader::loadClass('Zend_Gdata_Calendar'); $config = array( 'adapter' => 'Zend_Http_Client_Adapter_Proxy', 'proxy_host' => 'proxy.empresa.es', 'proxy_port' => 8080 , 'proxy_user' => 'usuario_proxy', 'proxy_pass' => 'contraseña_proxy', 'proxy_auth' => Zend_Http_Client::AUTH_BASIC ); $proxiedHttpClient = new Zend_Gdata_HttpClient('http://www.google.com:443', $config); $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME; $user = "usuario@gmail.com"; $pass = "password"; try { $httpClient = Zend_Gdata_ClientLogin::getHttpClient($user, $pass , $service, $proxiedHttpClient); } catch (Zend_Gdata_App_HttpException $httpException) { exit("An error occurred trying to connect to the proxy server\n" . $httpException->getMessage() . "\n"); } // Create an instance of the Calendar service $service = new Zend_Gdata_Calendar($proxiedHttpClient); |
En caso de que el proxy no requiera usuario y contraseña, omitiremos las líneas de proxy_user y proxy_pass.
Una vez auténticados, ya podemos operar con el objeto $service para operar con Google Calendar en este caso pero también sirve para Google Docs, Youtube, etc. añadiendo las librerías correspondientes.
Cabe destacar que si te da un error de SSL (stream_socket_enable_crypto() [streams.crypto]: this stream does not support SSL/crypto in …) debes incluir la extensión OpenSSL en el php.ini añadiendo la linea extension=”openssl.so” y reiniciando el servidor para que se active.
También es posible que de un error Fatal error: Call to undefined method Zend_Http_Client::setClientLoginToken() in C:\xampp\php\ZendGdata\library\Zend\Gdata\ClientLogin.php on line ***, por eso he cambiado una línea que ponía
new Zend_Http_Client(’http://www.google.com:443?, $config);
por la que pone
new Zend_Gdata_HttpClient(’http://www.google.com:443?, $config);
Ahora ya podemos por ejemplo listar todos nuestros calendarios así:
36 37 38 39 40 41 42 43 44 45 46 47 48 | try { $listFeed= $service->getCalendarListFeed(); } catch (Zend_Gdata_App_Exception $e) { echo "Error: " . $e->getMessage(); } echo "<h1>Calendar List Feed</h1>"; echo "<ul>"; foreach ($listFeed as $calendar) { echo "<li>" . $calendar->title . " (Event Feed: " . $calendar->id . ")</li>"; } echo "</ul>"; |
Fuentes:
GData Tips
Zend Framework
http://archive.netbsd.se/?ml=squirrelmail-plugins&a=2007-07&t=4669364

you saved my life dude ! thanks so much ! changing this one line code cost me hours of research ! I came your site with luck and found this tip. Thank so much again !
google translate to spanish
me salvaste la vida amigo! muchas gracias! cambiar el código de una línea me ha costado horas de investigación! Llegué a su sitio con suerte y encontrado este consejo. Muchas gracias otra vez!