A la hora de realizar aplicaciones PHP/MySQL, normalmente se suele utilizar la librerÃa mysql, cuando existe la librerÃa mysqli, la cual puede ser más eficiente.
Os paso 4 motivos que a mà me han parecido muy importantes:
Prepared statements: a parte de ser más cómodo a la hora de montar nuestras querys, ofrece mucha seguridad contra el SQL injected.
$mysqli = new $stmt = $mysqli->prepare("select usuario from usuarios where i = ?");
$stmt->bind_param('i',$id);
$stmt->execute();
Conexiones seguras: la posibilidad de usar mysqli_ssl_set() permite realizar conexiones seguras indicando detalles del certificado mediante los parámetros.
Múltiples querys: posibilidad de ejecutar varias querys separadas por punto y coma, en una conexión.
Interfaz orientado a objetos: esta caracterÃstica permite al desarrollador ampliar el objeto para añadir nuevas funcionalidades más especÃficas. Por ejemplo se podrÃan separar los errores de operación (conexión) a los de desarrollo (querys mal formadas).
Hace tiempo hablaba de una librería para trabajar con Jabber desde PHP y me preguntaban si se podía usar para realizar un cliente y realizar acciones con él. Pues he usado esta librería para crearme un cliente de jabber que espere mensajes y los publique en WordPress, para lo cual también he necesitado la librería phpxmlrpc.
Yo el ejemplo lo he hecho con DreamHost y la posibilidad que ofrece de crear un servidor Jabber, claro que también se puede hacer mediante GTalk.
Lo primero es tener dos cuentas: una para el cliente y otra para ti. Cuando ya las tengamos, deberemos autorizar la una a la otra para que puedan enviarse mensajes. Esto es la parte más chapuza ya que hay que hacerlo con clientes tipo Gtalk o Pidgin.
Tan solo nos queda instalar el script en nuestro servidor o en nuestro ordenador (aunque casi mejor en un servidor) y configurarlo. Se copia en el servidor y se edita el fichero orejas.php y modificar los siguientes valores:
$blog_usuario: nombre del usuario del blog
$blog_contraseña: contraseña del usuario del blog
$blog_url: url del blog de WordPress
$blog_xmlrpc_path: path al script xmlrpc de WordPress
$blog_puerto: puerto del blog (lo más seguro es que no haya que modificarlo)
$post_tags: etiquetas por defecto del post que se va a crear
$post_separador: separador para diferenciar en el mensaje entre título, contenido y etiquetas
$post_titulo_defecto: título por defecto del post
$jabber_host: servidor de Jabber, para GTalk creo que es gtalk.google.com
$jabber_usuario: usuario de jabber
$jabber_contraseña: contraseña del usuario de jabber
$jabber_puerto: puerto del servidor de jabber (lo más seguro es que no haya que modificarlo)
Para postear en WP habrá que mandar un mensaje al cliente con el siguiente formato:
Contenido admite HTML y retornos de carro que serán convertidos en párrafos. Si no se quiere indicar título o etiquetas, pues se puede escribir el contenido solamente. El separador ## es modificable. Cuidado si vais a escribir retornos de carro, porque si pulsas sólo INTRO te enviará el mensaje.
Una vez enviado el mensaje, el script posteará en WP y devolverá la URL del nuevo post.
Supongo que se pueden hacer más cosas y mejor, pero para lo que yo lo necesito me basta y me sobra.
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.
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
Parece que MySQL va a añadir nuevas funcionalidades en la versión 6.0 que solo van a estar disponibles para la versión Enterprise (de pago). Entre estas novedades habrá funcionalidades relacionadas con el backup online.
Esto supone un separación en dos ramas del desarrollo de MySQL, a parte de pensar en que la versión Enterprise tendrá funcionalidades que no estarán tan testeadas como si estuvieran en la versión Community, la cual está respaldada por una gran cantidad de usuarios. Just announced: MySQL to launch new features only in MySQL Enterprise