Revisión actual |
Tu texto |
Línea 1: |
Línea 1: |
| + | {{cleanupbox |
| + | |texto ='''Este ejemplo es funcional para la [[KumbiaPHP_Framework_Versión_1.0_Beta2| Versión Beta2]]''' |
| + | }} |
| + | |
| == 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 6: |
Línea 10: |
| * 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. librerías que se encuentran en su cuenta de Github [http://github.com/themattharris/tmhOAuth Aquí] | + | * 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 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 que estará ubicada en config | + | 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 carpeta de 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
| + | ./default |
− | /** | + | ../default/config |
− | * Modelo para manejar almacenar y obtener el user_token y el user_secret
| + | ../../default/config/apis.ini |
− | * 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]] |