Diferencia entre revisiones de «Twitter con Kumbiaphp»
Línea 345: | Línea 345: | ||
?> | ?> | ||
</source> | </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)