Edición de «Twitter con Kumbiaphp»

De KumbiaPHP Framework Wiki

Advertencia: no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si inicias sesión o creas una cuenta, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.

Puedes deshacer la edición. Antes de deshacer la edición, comprueba la siguiente comparación para verificar que realmente es lo que quieres hacer, y entonces guarda los cambios para así efectuar la reversión.

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]]

Ten en cuenta que todas las contribuciones a KumbiaPHP Framework Wiki pueden ser editadas, modificadas o eliminadas por otros colaboradores. Si no deseas que las modifiquen sin limitaciones, no las publiques aquí.
Al mismo tiempo, asumimos que eres el autor de lo que escribiste, o lo copiaste de una fuente en el dominio público o con licencia libre (véase Proyecto:Derechos de autor para más detalles). ¡No uses textos con copyright sin permiso!

Para editar esta página, responde la pregunta que aparece abajo (más información):

Cancelar Ayuda de edición (se abre en una ventana nueva)