tus camisetas frikis en camisetafriki.com
Home > Programacion > Autenticarse en Google a través de un proxy y PHP

Autenticarse en Google a través de un proxy y PHP

March 16th, 2010 Leave a comment Go to comments

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

Categories: Programacion Tags: