toggle Cinema 18 Sep 2009

Google Spreadsheet + Php + Mysql = Sincronización Posted by Insane in Google, Google Spreedsheet, Mysql, Php | No responses

agoogle-docs-good-logo

Insipirado en este post de Chris Teso el siguiente tutorial propone una forma de crear una sincronización entre una Hoja de Google Spreadsheets y una tabla dentro de MySQL.

Requerimientos

  1. Crear y guarda una hoja de calculo en Google Docs y pon nombre en la parte superior de las columnas que utilizaras ( ejemplo ) .
  2. Descarga el Standalone Gdata del Zend Framework para poder interactuar con tu hoja de calculo desde PHP.
  3. Edita el archivo de configuración que viene adjunto en la descarga.
  4. Crea una tabla en MySQL con la estructura similar a las columnas de tu hoja de calculo.

config

Bootstrap

<?php
session_start();
$root = dirname(__FILE__);

set_include_path(
	$root.'/lib'.PATH_SEPARATOR.
	get_include_path()
);

require_once 'fcn.php';
require_once 'lib/Zend/Loader.php';

Zend_Loader::loadClass('Zend_Http_Client');
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Spreadsheets');

// get the configuration object
$app_configuration = (object)getConfig();

$httpClient = Zend_Gdata_ClientLogin::getHttpClient(
$app_configuration->username
, $app_configuration->password
, Zend_Gdata_Spreadsheets::AUTH_SERVICE_NAME);

$gdClient = new Zend_Gdata_Spreadsheets($httpClient);
$authLink = '<a href="' . getAuthSubUrl() . '">Click here to authenticate</a>';

?>

Authorización

Tras haber instalado los archivos en el servidor, es necesario indicar a Google que nuestro sitio consumirá sus servicios usando OAuth , esto puede ser hecho desde aquí. Después de esto y como parte de los protocolos de usados en Oauth el usuario debe indicar que desea hacer la conexión Tu Sitio – Google Docs, la pantalla desplegada sera muy parecida a la mostrada abajo.

oauth

Sincronización.

Despues de concedido el acceso, Google redirigirá hacia el valor del parámetro next, es en este paso cuando podemos acceder a la hoja de cálculo y obtener sus valores.

<?php
 require_once '__bootstrap.php';

 if(isset($app_configuration->Gdata_AuthSub_token)):
 $token = $app_configuration->Gdata_AuthSub_token;
 else:
 if(isset($_GET['token']))
 $token = $_GET['token'];
 endif;

 if(!empty($token)):

 //$sessionToken = Zend_Gdata_AuthSub::getAuthSubSessionToken($token);

 //almacenamos el resultado en el archivo de configuración.
 set_ini_file_value('Gdata_AuthSub_token',$token);
 //para este momento podrías dar un vistazo a tu config.ini

 $service = Zend_Gdata_Spreadsheets::AUTH_SERVICE_NAME;

 $client = Zend_Gdata_ClientLogin::getHttpClient(
 $app_configuration->username
 , $app_configuration->password
 , Zend_Gdata_Spreadsheets::AUTH_SERVICE_NAME);

 $spreadsheetService = new Zend_Gdata_Spreadsheets($client);

 $query = new Zend_Gdata_Spreadsheets_ListQuery();
 $query->setSpreadsheetKey($app_configuration->spreadsheetKey);
 $listFeed = $spreadsheetService->getListFeed($query);

 $index = 0;
 $storage=array();

 $storage = parseListItems($listFeed->entries);
 //convertimos a csv y cargamos en la tabla usando LOAD FILE INTO
 tocsv(dirname(__FILE__).DIRECTORY_SEPARATOR.'db.csv',$storage);        

 endif;

?>

Por último me gustaría incluir el siguiente ejemplo que muestra cómo hacer un servicio que lee el contenido de tu hoja de cálculo y devuelve sus resultados en formato JSON.

<?php

require_once '__bootstrap.php';
$query = new Zend_Gdata_Spreadsheets_ListQuery();
$query->setSpreadsheetKey($app_configuration->spreadsheetKey);

$listFeed = $gdClient->getListFeed($query)->entries;

$filters = array();
$filter = isset($_REQUEST['filter']) ? $_REQUEST['filter'] : '';
$q = isset($_REQUEST['q']) ? $_REQUEST['q'] : '';

if(!empty($q) && !empty($filter))
 switch($filter):
 case 'BY_CATEGORY':
 $query->setSpreadsheetQuery("Category=$q");
 break;

 case 'BY_PRICE':
 $query->setSpreadsheetQuery("Price=$q");
 break;

 case 'BY_NAME':
 $query->setSpreadsheetQuery("Name=$q");
 break;

 endswitch;

$storage = parseListItems($listFeed);

die(json_encode($storage));

?>

Y eso es todo XD hecha un vistazo al archivo csv creado “db.csv” y a tu tabla que especificaste en el config.ini.

Happy Coding.
Descarga

Sync_GoogleSpreadsheetPhpMysql.rar

  • Share/Bookmark

Promote this post

Would you like to add this post to your bookmarks? Come on, do not miss any updates and stay tuned.
Please share with us!

This entry no have comments but you can be first .

Leave a Reply ( Guest )

(*)

(will not be published) (*)