En PHP 5.3 existe el método __invoke que permite llamar a un objeto como si se tratara de una función, y como lo mejor para entenderlo es un ejemplo, pues aquí va:
class Hola {
public function __invoke($quien) {
return "Hola, $quien";
}
}
$saluda = new Hola;
echo $saluda('amigo'); // "Hola, amigo"
Una función que desconocía y que puede ser muy útil, además de ser un 25% más rápida que hacer la llamada a un método del objeto que haga lo mismo.
Si normalmente escribo sobre clientes OAuth, hoy voy a referenciar un artículo sobre cómo crear un provider de OAuth, por si queremos que los usuarios se conecten a nuestra aplicación a OAuth.
Para ello primero hay que:
Ofrecer la clave de registro del consumer, aunque no me gusta el método que usa para obtener un número aleatorio
Si el otro dÃa hablabamos de MagpieRSS, hoy tenemos que hablar de SimplePie, una librerÃa en PHP que nos recomienda artux y que nos permite leer los feeds RSS y Atom.
Es fácil de usar incluso para principiantes en PHP, rápido debido a que cachea los contenidos, admite RSS 0.91, RSS 1.0 y RSS 2.0 y Atom 0.3 y 1.0 y muchas cosas más. SimplePie
OpenDocument es un paquete PHP para generar, modificar y leer documentos en formato Open Document. Aún existe la costumbre de exportar la información a documentos con formato propietarios, ya sean de Microsoft o de Adobe, mientras que Open Document es un estándar.
Inicialmente fue un proyecto del Google Summer of Code 2006 Program que ahora a pasado parte del PEAR, en fase poco avanzada, la documentación no es la gran cosa, pero tres ejemplos que ofrecen en el paquete pueden ser suficientes para ir empezando. OpenDocument para PHP
PHP-Ext es una librería open source que nos permite potenciar la capa UI de Javascript en nuestras aplicaciones. Para ello nos ofrece una serie de librerías (compatibles con PHP 4 y 5) para integrar Ext JS en nuestro sistema. Funciona como un mapeado en clases de la librería JS.
Entre las posibilidades que ofrece nos encontramos con la creación de formularios, combos, grids o menus. A parte ayuda a la comunicación entre el cliente y el servidor mediante JSON y XML.
Comprensión de salida: mediante PHP, comprimimos la salida usando el formato zip. En esta posibilidad no estoy del todo de acuerdo, porque los recursos que se utilizan en la compresión pueden ser superiores a los que se usan para enviar la página, como ya indicamos en otra ocasión.
Para mí, uno de los mayores fracasos de Twitter es su API, una limitación de su uso increíble para algo que le podría dar mucho juego a la aplicación. Ahora mismo no sé en cuánto está el límite, pero la posibilidad de realizar una aplicación basada en Twitter es una pesadilla.
Para aquellos que no quieran sufrir lo que hemos sufrido con TwitterPoster (los espacios en blanco es porque la gente actualiza su imagen y no podemos recuperar la de todos los usuarios por el límite en el API de Twitter), les recomiendo usar Twitter mediante CURL.
Os paso un script sencillito que he realizado:
<?php
// Primer hacemos login
$url ="https://twitter.com/sessions";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
// Por si tienen limitación por navegador
curl_setopt($ch, curlOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)");
// Poned una ruta para las cookies
curl_setopt ($ch, CURLOPT_COOKIEJAR, '/temp/');
curl_setopt ($ch, CURLOPT_COOKIEFILE, '/temp/');
curl_setopt ($ch, CURLOPT_POSTFIELDS, "username_or_email=[usuario]&password=[contraseña]");
// Para que funcione el https
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, curlOPT_SSL_VERIFYHOST, 2);
curl_exec ($ch);
// Cargamos el home, porque Twitter añade dos campos ocultos para poder publicar por web
$url ="http://twitter.com/home";
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec ($ch);
// Recuperamos los campos ocultos
preg_match('//', $result, $match);
$authenticity_token = $match[1];
preg_match('//', $result, $match);
$siv = $match[1];
// Insertamos el texto
$res = $url ="http://twitter.com/status/update";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_POSTFIELDS, 'siv='.$siv.'&authenticity_token='.$auth.'&status=[texto]');
curl_exec ($ch);
curl_close ($ch);
unset($ch);
?>
¿Qué fallo tiene este script? pues que si cambian el HTML (campos de formulario, …) o las URLs deja de funcionar, pero al menos no tenemos limitaciones. Eso sí, es más costoso para sus servidores y para los nuestros, porque en vez de hacer una llamada, hacemos 3, y en nuestro caso, a parte parseamos una página para obtener dos campos ocultos.
Eso es porqué en PHP, al igual que otros muchos lenguajes dinámicos, las funciones son elementos de primer orden.