Diferencia entre revisiones de «Twitter con Kumbiaphp»
(Página creada con '{{cleanupbox |texto ='''Este ejemplo es funcional para la Versión Beta2''' }} == Twitter con KumbiaPHP == Este tutorial es de como ...') |
|||
(No se muestran 4 ediciones intermedias del mismo usuario) | |||
Línea 1: | Línea 1: | ||
− | |||
− | |||
− | |||
− | |||
== Twitter con KumbiaPHP == | == Twitter con KumbiaPHP == | ||
Este tutorial es de como publicar un tweet desde una aplicación hecha por nosotros desde KumbiaPHP con algunas librerías externa. | Este tutorial es de como publicar un tweet desde una aplicación hecha por nosotros desde KumbiaPHP con algunas librerías externa. | ||
Línea 10: | Línea 6: | ||
* Tener una aplicación creada en la página para [http://dev.twitter.com desarrollados de Twitter] con la que recibiran una llaves para utilizar en su aplicación. | * Tener una aplicación creada en la página para [http://dev.twitter.com desarrollados de Twitter] con la que recibiran una llaves para utilizar en su aplicación. | ||
* Su aplicación debe poseer permisos minimos de lectura y escritura. | * Su aplicación debe poseer permisos minimos de lectura y escritura. | ||
− | * Por último y no menos importante unas excelentes librerías en PHP desarrolladas por el Señor [http://twitter.com/#!/themattharris| Matt Harris], trabajador de Twitter | + | * Por último y no menos importante unas excelentes librerías en PHP desarrolladas por el Señor [http://twitter.com/#!/themattharris| Matt Harris], trabajador de Twitter. librerías que se encuentran en su cuenta de Github [http://github.com/themattharris/tmhOAuth Aquí] |
=== Archivo de Configuración === | === Archivo de Configuración === | ||
− | Primero que todo creamos un archivo de configuración para nuestra aplicación para almacenar allí nuestras llaves para el manejo de servicio externos a KumbiaPHP, estoy también podemos verlo funcionando en el ejemplo de [http://wiki.kumbiaphp.com/ACL_Configurado_a_Traves_de_un_Archivo_ini ACL Configurado a Traves de un Archivo ini], siguendo la estructura de archivos del [[KumbiaPHP_Framework_Versión_1.0_Beta2| Beta2]] creamos apis.ini en la | + | Primero que todo creamos un archivo de configuración para nuestra aplicación para almacenar allí nuestras llaves para el manejo de servicio externos a KumbiaPHP, estoy también podemos verlo funcionando en el ejemplo de [http://wiki.kumbiaphp.com/ACL_Configurado_a_Traves_de_un_Archivo_ini ACL Configurado a Traves de un Archivo ini], siguendo la estructura de archivos del [[KumbiaPHP_Framework_Versión_1.0_Beta2| Beta2]] creamos apis.ini que estará ubicada en config |
+ | |||
+ | '''default/config/apis.ini''' | ||
+ | <source lang="ini"> | ||
+ | ;; Configuracion de los APIs | ||
+ | |||
+ | ; Archivo que contienen la llave de los APIs externo al KuCMS | ||
+ | ; cada seccion contiene el servicio y los datos para su uso | ||
+ | |||
+ | [twitter] | ||
+ | consumerkey = xXxXxXxXxXxXxXxXxXxX ; Esto deben ser reemplazados por las propias de su aplicación | ||
+ | consumersecret = xXxXxXxXxXxXxXxXxXxXxXxXxXxX; Esto deben ser reemplazados por las propias de su aplicación | ||
+ | |||
+ | </source> | ||
+ | |||
+ | === Controlador === | ||
+ | |||
+ | Ahora vamos a crear un simple controlador para 3 acciones particulares como lo son: | ||
+ | * Almacenar una cuenta de Twitter para nuestra aplicación (Dar permiso, obtener el user_token y user_secret) | ||
+ | * Publicar Tweet | ||
+ | * Y eliminar la cuenta almacenada | ||
+ | |||
+ | <source lang="php"> | ||
+ | <?php | ||
+ | |||
+ | /** | ||
+ | * Controlador para integrar Twitter a KumbiaPHP | ||
+ | * Recomiendo leer la documentación disponible en http://dev.twitter.com | ||
+ | * y la de la libreria que usamos aquí en http://github.com/themattharris/tmhOAuth | ||
+ | * Fecha 05/02/2012 | ||
+ | * | ||
+ | * @author Jaro Marval (jamp) <jampgold@gmail.com> | ||
+ | * @version 0.1 | ||
+ | */ | ||
+ | |||
+ | class RedesController extends AppController { | ||
+ | |||
+ | /** | ||
+ | * Aqui verificamos la existencia de una identidad en base de datos, sino | ||
+ | * procedemos a capturar una, todo esto basado en los ejemplos de la libreria | ||
+ | * de Sr. Matt Harris en sus librerias | ||
+ | * | ||
+ | */ | ||
+ | public function index() { | ||
+ | |||
+ | // Leemos del Archivo de configuración el consumerkey y el consumersecret | ||
+ | // de nuestra aplicación twitter | ||
+ | $config = Config::read('apis', TRUE); | ||
+ | $consumer_key = $config['twitter']['consumerkey']; | ||
+ | $consumer_secret = $config['twitter']['consumersecret']; | ||
+ | |||
+ | // Verificamos que tengamos una sesión guardada de usuario Twitter | ||
+ | $this->twitterdata = Load::model('redes')->gettwitter(); | ||
+ | |||
+ | // Verificamos que no existe ninguna sesión guardada | ||
+ | if (!$this->twitterdata) { | ||
+ | |||
+ | // Cargamos las librerias necesarias para nuestra aplicación | ||
+ | Load::lib('apis/twitter/tmhOAuth'); | ||
+ | Load::lib('apis/twitter/tmhUtilities'); | ||
+ | |||
+ | // Inicializamos la libreria de Twitter | ||
+ | $tmhOAuth = new tmhOAuth(array( | ||
+ | 'consumer_key' => $consumer_key, | ||
+ | 'consumer_secret' => $consumer_secret, | ||
+ | )); | ||
+ | |||
+ | // Definimos el sitio donde estamos usando nuestro código para luego | ||
+ | // volver después de que iniciemos sesión de nuestro usuario | ||
+ | $here = tmhUtilities::php_self(); | ||
+ | |||
+ | // Función para manejar los errores devueltos durante la autenticación | ||
+ | // en Twitter | ||
+ | function outputError($tmhOAuth) { | ||
+ | echo 'Error: ' . $tmhOAuth->response['response'] . PHP_EOL; | ||
+ | tmhUtilities::pr($tmhOAuth); | ||
+ | } | ||
+ | |||
+ | // Verificamos que las variables de acceso existan | ||
+ | if (isset($_SESSION['access_token'])) { | ||
+ | |||
+ | // Recogemos las sessión de Twitter y almacenamos en BBDD el | ||
+ | // token y el token_secret del usuario autenticado | ||
+ | $red->setTwitter($_SESSION['access_token']['oauth_token'], $_SESSION['access_token']['oauth_token_secret']); | ||
+ | |||
+ | // Destruimos la variable de sesión | ||
+ | unset($_SESSION['access_token']); | ||
+ | |||
+ | // Redireccionamos al página de donde originalmente veniamos | ||
+ | header("Location: {$here}"); | ||
+ | |||
+ | // Verficamos que la autenticación se halla llevado a cabo | ||
+ | } elseif (isset($_REQUEST['oauth_verifier'])) { | ||
+ | |||
+ | // Parametrizamos el user_token y el user_secret desde la sesión | ||
+ | $tmhOAuth->config['user_token'] = $_SESSION['oauth']['oauth_token']; | ||
+ | $tmhOAuth->config['user_secret'] = $_SESSION['oauth']['oauth_token_secret']; | ||
+ | |||
+ | // Verificamos que el user_token y el user_secret sean correctos mediante oauth_verifier | ||
+ | $code = $tmhOAuth->request('POST', $tmhOAuth->url('oauth/access_token', ''), array( | ||
+ | 'oauth_verifier' => $_REQUEST['oauth_verifier'] | ||
+ | )); | ||
+ | |||
+ | // Si el user_token y user_secret son correctos y refrescamos la página | ||
+ | if ($code == 200) { | ||
+ | $_SESSION['access_token'] = $tmhOAuth->extract_params($tmhOAuth->response['response']); | ||
+ | unset($_SESSION['oauth']); | ||
+ | header("Location: {$here}"); | ||
+ | |||
+ | // Sino mostramos el error que no retorna | ||
+ | } else { | ||
+ | outputError($tmhOAuth); | ||
+ | } | ||
+ | |||
+ | // Si no existe ninguna identidad guardada | ||
+ | } else { | ||
+ | |||
+ | // Parametrizamos el tipo de acceso de nuestra aplicacion | ||
+ | $params = array( | ||
+ | 'oauth_callback' => $here, | ||
+ | 'x_auth_access_type' => 'write' | ||
+ | ); | ||
+ | |||
+ | // Solicitamos a los servidores de Twitter un link valido para | ||
+ | // que nuestra aplicación tenga permiso sobre la identidad del | ||
+ | // usuario | ||
+ | $code = $tmhOAuth->request('POST', $tmhOAuth->url('oauth/request_token', ''), $params); | ||
+ | |||
+ | // Si la solicitud es exitosa nos devuelve los parametros | ||
+ | // para generar nuestro link | ||
+ | if ($code == 200) { | ||
+ | $_SESSION['oauth'] = $tmhOAuth->extract_params($tmhOAuth->response['response']); | ||
+ | $this->Twitter = $tmhOAuth->url("oauth/authorize", '') . "?oauth_token={$_SESSION['oauth']['oauth_token']}"; | ||
+ | |||
+ | // Sino mostramos el error | ||
+ | } else { | ||
+ | outputError($tmhOAuth); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // Si poseemos poseemos una identidad Twitter asociada | ||
+ | } else { | ||
+ | |||
+ | // Cargamos las librerias necesarias para trabajar con Twitter | ||
+ | Load::lib('apis/twitter/tmhOAuth'); | ||
+ | Load::lib('apis/twitter/tmhUtilities'); | ||
+ | |||
+ | // Parametrizamos con la identidad que tenemos guardada | ||
+ | $user = $this->twitterdata; | ||
+ | $tmhOAuth = new tmhOAuth(array( | ||
+ | 'consumer_key' => $consumer_key, | ||
+ | 'consumer_secret' => $consumer_secret, | ||
+ | 'user_token' => $user['token'], | ||
+ | 'user_secret' => $user['secret'], | ||
+ | )); | ||
+ | |||
+ | // Auteticamos la identidad | ||
+ | $code = $tmhOAuth->request('GET', $tmhOAuth->url('1/account/verify_credentials')); | ||
+ | |||
+ | // Si la autenticacion es correcta extraemos el avatar y el link de | ||
+ | // identidad guardada | ||
+ | if ($code == 200) { | ||
+ | $response = json_decode($tmhOAuth->response['response']); | ||
+ | $this->twitterdata['image'] = $response->profile_image_url; | ||
+ | $this->twitterdata['profile'] = 'http://www.twitter.com/' . $response->screen_name; | ||
+ | |||
+ | // Sino es correcta mostramos el error de autenticacion | ||
+ | } else { | ||
+ | tmhUtilities::pr(htmlentities($tmhOAuth->response['response'])); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * Controlador para publicar nuestros Tweet con la identidad que ya tenemos | ||
+ | * almacenada | ||
+ | * | ||
+ | */ | ||
+ | public function tweet() { | ||
+ | |||
+ | if (Input::hasPost('Publicar')) { | ||
+ | |||
+ | // Extraemos todos los parametros necesarios para poder publicar | ||
+ | // nuestro Tweet | ||
+ | $config = Config::read('apis', TRUE); | ||
+ | $consumer_key = $config['twitter']['consumerkey']; | ||
+ | $consumer_secret = $config['twitter']['consumersecret']; | ||
+ | $user = Load::model('redes')->gettwitter(); | ||
+ | $tweet = Input::post('tweet'); | ||
+ | |||
+ | // Cargamos las librerias necesarias | ||
+ | Load::lib('apis/twitter/tmhOAuth'); | ||
+ | Load::lib('apis/twitter/tmhUtilities'); | ||
+ | |||
+ | // Parametrizamos la identidad que tenemos almacenada | ||
+ | $tmhOAuth = new tmhOAuth(array( | ||
+ | 'consumer_key' => $consumer_key, | ||
+ | 'consumer_secret' => $consumer_secret, | ||
+ | 'user_token' => $user['token'], | ||
+ | 'user_secret' => $user['secret'], | ||
+ | )); | ||
+ | |||
+ | // Posteamos nuestro tweet | ||
+ | $code = $tmhOAuth->request('POST', $tmhOAuth->url('1/statuses/update'), array( | ||
+ | 'status' => $tweet | ||
+ | )); | ||
+ | |||
+ | // Creo que esto no ni necesario de explicar | ||
+ | if ($code == 200) { | ||
+ | Flash::success("Tweet Publicado"); | ||
+ | } else { | ||
+ | Flash::error(htmlentities($tmhOAuth->response['response'])); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * Esto no es nada de otro mundo solo es para borrar la identidad que | ||
+ | * tenemos guardada en nuestra BBDD, tampoco hay mucho que explicar aqui | ||
+ | * | ||
+ | */ | ||
+ | public function desasociar() { | ||
+ | Load::model('redes')->setTwitter(); | ||
+ | Router::redirect('redes/'); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | ?> | ||
+ | </source> | ||
+ | |||
+ | |||
+ | === Modelo === | ||
+ | Este modelo es algo muy sencillo solo posee 2 métodos uno para obtener los datos de la cuenta que tenemos almacenada en nuestra base de datos y otra para escribir los datos de la cuenta. | ||
<source lang="php"> | <source lang="php"> | ||
− | + | <?php | |
− | + | /** | |
− | ../ | + | * Modelo para manejar almacenar y obtener el user_token y el user_secret |
+ | * del usuario de Twitter | ||
+ | * Fecha 05/02/2012 | ||
+ | * | ||
+ | * @author Jaro Marval (jamp) <jampgold@gmail.com> | ||
+ | * @version 0.1 | ||
+ | */ | ||
+ | |||
+ | /** | ||
+ | * Modelo con 2 metodos uno para obtener una identidad guardada en BBDD y otra | ||
+ | * para guardar una identidad, "simple" | ||
+ | */ | ||
+ | class redes extends ActiveRecord { | ||
+ | |||
+ | function getTwitter() { | ||
+ | $r = $this->find('1'); | ||
+ | |||
+ | $o = array( | ||
+ | 'token' => $r->user_token, | ||
+ | 'secret' => $r->user_secret, | ||
+ | ); | ||
+ | |||
+ | if ($r->user_token == '') { | ||
+ | return FALSE; | ||
+ | } else { | ||
+ | return $o; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | public function setTwitter($id = '', $secret = '') { | ||
+ | $r = $this->find('1'); | ||
+ | $r->user_token = $id; | ||
+ | $r->user_secret = $secret; | ||
+ | |||
+ | if ( $r->save() ) { | ||
+ | return True; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | ?> | ||
</source> | </source> | ||
+ | |||
+ | y la estructura de la base de datos es la siguiente: | ||
+ | |||
+ | <source lang="mysql"> | ||
+ | |||
+ | -- | ||
+ | -- Estructura de tabla para la tabla `redes` | ||
+ | -- | ||
+ | |||
+ | CREATE TABLE IF NOT EXISTS `redes` ( | ||
+ | `id` int(11) NOT NULL AUTO_INCREMENT, | ||
+ | `user_token` varchar(100) DEFAULT NULL, | ||
+ | `user_secret` varchar(100) DEFAULT NULL, | ||
+ | PRIMARY KEY (`id`) | ||
+ | ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; | ||
+ | |||
+ | </source> | ||
+ | |||
+ | === Vistas === | ||
+ | Aquí tenemos las de 2 vistas necesarias para terminar nuestra aplicación "Tuitear" la primera de ellas es: | ||
+ | |||
+ | '''index.phtml''' donde asociamos nuestra cuenta a nuestra aplicación | ||
+ | <source lang="php"> | ||
+ | <?php | ||
+ | // Si poseemos una identidad guardada el mostramos los datos sino vamos al | ||
+ | // link para dar permisos para que nuestra aplicacion puede publicar los Tweet | ||
+ | if ($twitterdata): | ||
+ | ?> | ||
+ | <h3>Tu cuenta en Twitter</h3> | ||
+ | <img src="<?php echo $twitterdata['image']; ?>" style="float:left; margin-right: 5px;"><br/> | ||
+ | <a href="<?php echo $twitterdata['profile']; ?>" target="_blank">Ver Perfil</a><br/> | ||
+ | <a href="<?php echo PUBLIC_PATH; ?>redes/desasociar/">Desasociar Cuenta</a><br/> | ||
+ | <a href="<?php echo PUBLIC_PATH; ?>redes/tweet/">Envia un Tweet</a> | ||
+ | <?php else: ?> | ||
+ | Asociar cuenta de Twitter: <a href="<?php echo $Twitter ?>">Login</a> | ||
+ | <?php endif; ?> | ||
+ | </source> | ||
+ | |||
+ | Y la siguiente es: | ||
+ | |||
+ | '''tweet.phtml''' donde claro esta vamos a publicar el Tweet | ||
+ | <source lang="php"> | ||
+ | <h3>Envia tu Tweet:</h3> | ||
+ | <?php | ||
+ | View::content(); | ||
+ | |||
+ | echo Form::open(); | ||
+ | echo Form::text('tweet', 'maxlenght="140"') .' <br />'; | ||
+ | echo Form::submit("Publicar"); | ||
+ | |||
+ | echo Form::close(); | ||
+ | |||
+ | ?> | ||
+ | </source> | ||
+ | |||
+ | Allí está asi de sencillo ya podemos "Tuiter" desde nuestra aplicación con KumbiaPHP, el código también puedes descargarlo desde el repositorio en [https://github.com/manuelj555/tutoriales_kumbiaphp Github], cualquier comentario o duda visiten el canal de irc de KumbiaPHP en Freenode | ||
+ | |||
+ | ---- | ||
+ | Realizado por: Jaro Marval (Jamp) | ||
[[Categoría:Tutoriales KumbiaPHP]] | [[Categoría:Tutoriales KumbiaPHP]] |
Revisión actual del 05:00 14 feb 2012
Sumario
Twitter con KumbiaPHP[editar]
Este tutorial es de como publicar un tweet desde una aplicación hecha por nosotros desde KumbiaPHP con algunas librerías externa.
Requisitos Previos[editar]
- Tener una cuenta en Twitter.
- Tener una aplicación creada en la página para desarrollados de Twitter con la que recibiran una llaves para utilizar en su aplicación.
- Su aplicación debe poseer permisos minimos de lectura y escritura.
- Por último y no menos importante unas excelentes librerías en PHP desarrolladas por el Señor Matt Harris, trabajador de Twitter. librerías que se encuentran en su cuenta de Github Aquí
Archivo de Configuración[editar]
Primero que todo creamos un archivo de configuración para nuestra aplicación para almacenar allí nuestras llaves para el manejo de servicio externos a KumbiaPHP, estoy también podemos verlo funcionando en el ejemplo de ACL Configurado a Traves de un Archivo ini, siguendo la estructura de archivos del Beta2 creamos apis.ini que estará ubicada en config
default/config/apis.ini
;; Configuracion de los APIs
; Archivo que contienen la llave de los APIs externo al KuCMS
; cada seccion contiene el servicio y los datos para su uso
[twitter]
consumerkey = xXxXxXxXxXxXxXxXxXxX ; Esto deben ser reemplazados por las propias de su aplicación
consumersecret = xXxXxXxXxXxXxXxXxXxXxXxXxXxX; Esto deben ser reemplazados por las propias de su aplicación
Controlador[editar]
Ahora vamos a crear un simple controlador para 3 acciones particulares como lo son:
- Almacenar una cuenta de Twitter para nuestra aplicación (Dar permiso, obtener el user_token y user_secret)
- Publicar Tweet
- Y eliminar la cuenta almacenada
<?php
/**
* Controlador para integrar Twitter a KumbiaPHP
* Recomiendo leer la documentación disponible en http://dev.twitter.com
* y la de la libreria que usamos aquí en http://github.com/themattharris/tmhOAuth
* Fecha 05/02/2012
*
* @author Jaro Marval (jamp) <jampgold@gmail.com>
* @version 0.1
*/
class RedesController extends AppController {
/**
* Aqui verificamos la existencia de una identidad en base de datos, sino
* procedemos a capturar una, todo esto basado en los ejemplos de la libreria
* de Sr. Matt Harris en sus librerias
*
*/
public function index() {
// Leemos del Archivo de configuración el consumerkey y el consumersecret
// de nuestra aplicación twitter
$config = Config::read('apis', TRUE);
$consumer_key = $config['twitter']['consumerkey'];
$consumer_secret = $config['twitter']['consumersecret'];
// Verificamos que tengamos una sesión guardada de usuario Twitter
$this->twitterdata = Load::model('redes')->gettwitter();
// Verificamos que no existe ninguna sesión guardada
if (!$this->twitterdata) {
// Cargamos las librerias necesarias para nuestra aplicación
Load::lib('apis/twitter/tmhOAuth');
Load::lib('apis/twitter/tmhUtilities');
// Inicializamos la libreria de Twitter
$tmhOAuth = new tmhOAuth(array(
'consumer_key' => $consumer_key,
'consumer_secret' => $consumer_secret,
));
// Definimos el sitio donde estamos usando nuestro código para luego
// volver después de que iniciemos sesión de nuestro usuario
$here = tmhUtilities::php_self();
// Función para manejar los errores devueltos durante la autenticación
// en Twitter
function outputError($tmhOAuth) {
echo 'Error: ' . $tmhOAuth->response['response'] . PHP_EOL;
tmhUtilities::pr($tmhOAuth);
}
// Verificamos que las variables de acceso existan
if (isset($_SESSION['access_token'])) {
// Recogemos las sessión de Twitter y almacenamos en BBDD el
// token y el token_secret del usuario autenticado
$red->setTwitter($_SESSION['access_token']['oauth_token'], $_SESSION['access_token']['oauth_token_secret']);
// Destruimos la variable de sesión
unset($_SESSION['access_token']);
// Redireccionamos al página de donde originalmente veniamos
header("Location: {$here}");
// Verficamos que la autenticación se halla llevado a cabo
} elseif (isset($_REQUEST['oauth_verifier'])) {
// Parametrizamos el user_token y el user_secret desde la sesión
$tmhOAuth->config['user_token'] = $_SESSION['oauth']['oauth_token'];
$tmhOAuth->config['user_secret'] = $_SESSION['oauth']['oauth_token_secret'];
// Verificamos que el user_token y el user_secret sean correctos mediante oauth_verifier
$code = $tmhOAuth->request('POST', $tmhOAuth->url('oauth/access_token', ''), array(
'oauth_verifier' => $_REQUEST['oauth_verifier']
));
// Si el user_token y user_secret son correctos y refrescamos la página
if ($code == 200) {
$_SESSION['access_token'] = $tmhOAuth->extract_params($tmhOAuth->response['response']);
unset($_SESSION['oauth']);
header("Location: {$here}");
// Sino mostramos el error que no retorna
} else {
outputError($tmhOAuth);
}
// Si no existe ninguna identidad guardada
} else {
// Parametrizamos el tipo de acceso de nuestra aplicacion
$params = array(
'oauth_callback' => $here,
'x_auth_access_type' => 'write'
);
// Solicitamos a los servidores de Twitter un link valido para
// que nuestra aplicación tenga permiso sobre la identidad del
// usuario
$code = $tmhOAuth->request('POST', $tmhOAuth->url('oauth/request_token', ''), $params);
// Si la solicitud es exitosa nos devuelve los parametros
// para generar nuestro link
if ($code == 200) {
$_SESSION['oauth'] = $tmhOAuth->extract_params($tmhOAuth->response['response']);
$this->Twitter = $tmhOAuth->url("oauth/authorize", '') . "?oauth_token={$_SESSION['oauth']['oauth_token']}";
// Sino mostramos el error
} else {
outputError($tmhOAuth);
}
}
// Si poseemos poseemos una identidad Twitter asociada
} else {
// Cargamos las librerias necesarias para trabajar con Twitter
Load::lib('apis/twitter/tmhOAuth');
Load::lib('apis/twitter/tmhUtilities');
// Parametrizamos con la identidad que tenemos guardada
$user = $this->twitterdata;
$tmhOAuth = new tmhOAuth(array(
'consumer_key' => $consumer_key,
'consumer_secret' => $consumer_secret,
'user_token' => $user['token'],
'user_secret' => $user['secret'],
));
// Auteticamos la identidad
$code = $tmhOAuth->request('GET', $tmhOAuth->url('1/account/verify_credentials'));
// Si la autenticacion es correcta extraemos el avatar y el link de
// identidad guardada
if ($code == 200) {
$response = json_decode($tmhOAuth->response['response']);
$this->twitterdata['image'] = $response->profile_image_url;
$this->twitterdata['profile'] = 'http://www.twitter.com/' . $response->screen_name;
// Sino es correcta mostramos el error de autenticacion
} else {
tmhUtilities::pr(htmlentities($tmhOAuth->response['response']));
}
}
}
/**
* Controlador para publicar nuestros Tweet con la identidad que ya tenemos
* almacenada
*
*/
public function tweet() {
if (Input::hasPost('Publicar')) {
// Extraemos todos los parametros necesarios para poder publicar
// nuestro Tweet
$config = Config::read('apis', TRUE);
$consumer_key = $config['twitter']['consumerkey'];
$consumer_secret = $config['twitter']['consumersecret'];
$user = Load::model('redes')->gettwitter();
$tweet = Input::post('tweet');
// Cargamos las librerias necesarias
Load::lib('apis/twitter/tmhOAuth');
Load::lib('apis/twitter/tmhUtilities');
// Parametrizamos la identidad que tenemos almacenada
$tmhOAuth = new tmhOAuth(array(
'consumer_key' => $consumer_key,
'consumer_secret' => $consumer_secret,
'user_token' => $user['token'],
'user_secret' => $user['secret'],
));
// Posteamos nuestro tweet
$code = $tmhOAuth->request('POST', $tmhOAuth->url('1/statuses/update'), array(
'status' => $tweet
));
// Creo que esto no ni necesario de explicar
if ($code == 200) {
Flash::success("Tweet Publicado");
} else {
Flash::error(htmlentities($tmhOAuth->response['response']));
}
}
}
/**
* Esto no es nada de otro mundo solo es para borrar la identidad que
* tenemos guardada en nuestra BBDD, tampoco hay mucho que explicar aqui
*
*/
public function desasociar() {
Load::model('redes')->setTwitter();
Router::redirect('redes/');
}
}
?>
Modelo[editar]
Este modelo es algo muy sencillo solo posee 2 métodos uno para obtener los datos de la cuenta que tenemos almacenada en nuestra base de datos y otra para escribir los datos de la cuenta.
<?php
/**
* Modelo para manejar almacenar y obtener el user_token y el user_secret
* del usuario de Twitter
* Fecha 05/02/2012
*
* @author Jaro Marval (jamp) <jampgold@gmail.com>
* @version 0.1
*/
/**
* Modelo con 2 metodos uno para obtener una identidad guardada en BBDD y otra
* para guardar una identidad, "simple"
*/
class redes extends ActiveRecord {
function getTwitter() {
$r = $this->find('1');
$o = array(
'token' => $r->user_token,
'secret' => $r->user_secret,
);
if ($r->user_token == '') {
return FALSE;
} else {
return $o;
}
}
public function setTwitter($id = '', $secret = '') {
$r = $this->find('1');
$r->user_token = $id;
$r->user_secret = $secret;
if ( $r->save() ) {
return True;
}
}
}
?>
y la estructura de la base de datos es la siguiente:
--
-- Estructura de tabla para la tabla `redes`
--
CREATE TABLE IF NOT EXISTS `redes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_token` varchar(100) DEFAULT NULL,
`user_secret` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
Vistas[editar]
Aquí tenemos las de 2 vistas necesarias para terminar nuestra aplicación "Tuitear" la primera de ellas es:
index.phtml donde asociamos nuestra cuenta a nuestra aplicación
<?php
// Si poseemos una identidad guardada el mostramos los datos sino vamos al
// link para dar permisos para que nuestra aplicacion puede publicar los Tweet
if ($twitterdata):
?>
<h3>Tu cuenta en Twitter</h3>
<img src="<?php echo $twitterdata['image']; ?>" style="float:left; margin-right: 5px;"><br/>
<a href="<?php echo $twitterdata['profile']; ?>" target="_blank">Ver Perfil</a><br/>
<a href="<?php echo PUBLIC_PATH; ?>redes/desasociar/">Desasociar Cuenta</a><br/>
<a href="<?php echo PUBLIC_PATH; ?>redes/tweet/">Envia un Tweet</a>
<?php else: ?>
Asociar cuenta de Twitter: <a href="<?php echo $Twitter ?>">Login</a>
<?php endif; ?>
Y la siguiente es:
tweet.phtml donde claro esta vamos a publicar el Tweet
<h3>Envia tu Tweet:</h3>
<?php
View::content();
echo Form::open();
echo Form::text('tweet', 'maxlenght="140"') .' <br />';
echo Form::submit("Publicar");
echo Form::close();
?>
Allí está asi de sencillo ya podemos "Tuiter" desde nuestra aplicación con KumbiaPHP, el código también puedes descargarlo desde el repositorio en Github, cualquier comentario o duda visiten el canal de irc de KumbiaPHP en Freenode
Realizado por: Jaro Marval (Jamp)