Últimos artículos
Loading...
martes, 12 de enero de 2010

Usando componentes de Zend en kumbiaphp

martes, enero 12, 2010
En este tutorial voy a mostrarles como puedes usar el componente ZendGdata de Zend Framework, este componente hace uso de las apis de google como Youtube, Picasa, Blogger, AppEngine, etc.

Para este tutorial vamos a usar  el componente Photos de ZendGdata para subir nuestras imagenes a nuestro album de Picasaweb desde kumbiaPHP framework php.

Ingredientes:

1. El componente ZendGdata lo descargan desde acá Estoy usando la versión 1.9.6, la documentación acá.
2. Por supuesto KumbiaPHP Framework PHP , estoy usando la versión 1.0 Spirit.
3. Conocimientos previos del Framework.
4. Una cuenta activa de Picasaweb.

Listo, paso a explicar lo que vamos a hacer.

Vamos a tener un formulario donde nos pedira tres datos. Titulo, etiquetas(separados por comas) y por supuesto la imagen. Cuando tengamos estos tres datos los procesamos y si hay éxito nos devolvera tres datos(para el ejemplo claro) la foto original, y dos thumbnail.

Organización de los archivos.

Copiamos nuestra carpeta de componentes en la carpeta del proyecto.



Creamos un archivo libreria donde cargaremos el Loader de nuestro componente.

PHP app/libs/gdata.php
 <?php 

$clientLibraryPath = APP_PATH.'libs/ZendGdata/library/';

set_include_path(get_include_path() . PATH_SEPARATOR . $clientLibraryPath);

require_once 'Zend/Loader.php';


Y ya tenemos todo listo para empezar.

Creamos nuestro controller

PHP controllers/gdata1_controller.php
 <?php

class Gdata1Controller extends ApplicationController {

public function index(){

/* mostramos el formulario */

}

public function subir(){

if($this->has_post('submit')){

//La gestión y el proceso la realiza el modelo, en caso de exito nos devuelve el resultado

Load::model('Gdatamodel');

$data = $this->Gdatamodel->save($this->post('foto'), $this->post('titulo'), $this->post('etiquetas'));

if($data != FALSE){

$this->set_persistent('data', $data);

$this->redirect('gdata1/verfoto/');

}

}

}

public function verfoto(){

$this->data = $this->get_persistent('data');

}

}

Nuestro modelo
Acá realizamos todo el proceso y la lógica del programa.

PHP models/gdatamodel.php
 <?php 

class Gdatamodel {

public function save($foto, $titulo, $etiquetas){

Load::lib('gdata');

/*cargamos las clases necesarias*/

Zend_Loader::loadClass('Zend_Gdata');

Zend_Loader::loadClass('Zend_Gdata_ClientLogin');

Zend_Loader::loadClass('Zend_Gdata_Photos');

Zend_Loader::loadClass('Zend_Http_Client');

/*validando el usuario*/

$svc = Zend_Gdata_Photos::AUTH_SERVICE_NAME;

$user = "user@gmail.com";

$pass = "password";

$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $svc);

$gphoto = new Zend_Gdata_Photos($client);

/*datos para la subida */

$albumName = "gdata"; /* tenemos que tener creado un album con este nombre*/

try {

$photo = $gphoto->newPhotoEntry();

// iniciamos el archivo

$file = $gphoto->newMediaFileSource($_FILES['foto']['tmp_name']);

$file->setContentType("image/jpeg");

$photo->setMediaSource($file);

// El titulo

/*$photo->setSummary($gphoto->newSummary($titulo)); desfazado */
$photo->setTitle($gphoto->newTitle($titulo));


// Las etiquetas

$photo->mediaGroup = new Zend_Gdata_Media_Extension_MediaGroup();

$keywords = new Zend_Gdata_Media_Extension_MediaKeywords();

$keywords->setText($etiquetas);

$photo->mediaGroup->keywords = $keywords;

// Nos ubicamos en el album

$album = $gphoto->newAlbumQuery();

$album->setUser($user);

$album->setAlbumName($albumName);

// Guardamos la foto

$inserted = $gphoto->insertPhotoEntry($photo, $album->getQueryUrl());

$thumbnail = $inserted->getMediaGroup()->getThumbnail();

$foto = $inserted->getMediaGroup()->getContent();

} catch (Zend_Gdata_App_Exception $e) {

/*ir con cuidado, solo para version de desarrollo, no usar en produccion*/

echo "Error: No se pudo procesar la orden "; //.$e->getResponse();

}

/* devolviendo los datos en caso de exito*/

if(@$foto[0]->url){

$fotos = array($foto[0]->url, $thumbnail[1]->url, $thumbnail[0]->url );

return $fotos;

}

else{

return "Error no se pudo enviar la foto!";

}

}

}



Creamos nuestra vista donde mostraremos el formulario:

PHTML: views/gdata1/subir.phtml
 <!-- por cuestion de comodidad no estoy usando los helper tags -->  

<form method="post" action="/gdata1/subir" enctype="multipart/form-data">

Titulo: <br/>

<input name="titulo" type="text" size="25" />

Archivo a subir: <br/>

<input name="foto" type="file" />

Etiquetas: <br/>

<input name="etiquetas" type="text" size="25" />

<input name="submit" type="submit" value="Enviar" />

</form>

Mostramos el resultado

PHTML: views/gdata1/verfoto.phtml
 <?php 

View::content();

echo "<img src='".$data[0]."' />";

echo "<img src='".$data[1]."' />";

echo "<img src='".$data[2]."' />";

echo "<br />";

echo "<pre>";

print_r($data);

echo "</pre>";


Es todo, una receta fácil y sabrosa  ^.^
 Está demás decir que de esta manera pueden trabajar con cualquier API de google disponible, Blogger, Youtube(SI! pueden subir videos a youtube desde tu web), etc etc.


PD1: Gracias a @cachi que me ayudó en la correción de algunos errores cometidos.
PD2: Existe una practica en nuestro controller innecesaria, estoy trabajando para poder quitar la persistencia de datos de un controller a otro ya que es una carga innecesaria.
PD3: Quize poner un ejemplo pero al tener un VPS  limpio tengo que recompilar mi PHP con Openssl y antes de hacerlo tengo que hacer varios pasos previos y ahora no tengo el tiempo necesario. Se los debo(la mayoria de servidores lo tienen), en local les va a funcionar bien. Probado con Xampp en linux.

Editado: Gracias al amigo @joanhey del IRC de kumbia que me ayudó en un pequeño problema que tuve en la configuración del servidor para poder subir el ejemplo.

Vean el funcionamiento ACA - Tiene user y pass asi que usen: user1 admin
No se abusen con las imágenes!


En definitiva es una idea de como pueden empezar a trabajar con Zend Gdata, si tienen alguna duda dense una vuelta por el IRC de kumbia irc.freenode.org canal #kumbiaphp 

0 Comentarios:

Publicar un comentario

 
Toggle Footer