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 en la entrada