Algo muy importante a la hora de desarrollar aplicaciones en Ajax es ofrecer la opción no-Ajax, y para ello es necesario detectar cuando la petición se realiza mediante Ajax, algo muy sencillo gracias a una cabecera que mandan los navegadores modernos:
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.
A la hora de crear paginación en los resultados que devuelve una búsqueda en nuestra aplicación hay que tener varias cosas en cuenta. Sobre todo cuando queremos mostrar los resultados totales. Para saber cuántos resultados se han obtenido, debemos hacer una consulta del tipo:
select count(1) from tabla
Esto suele ser lo más eficiente, ya que la otra opción es hacer la consulta sin más y luego contar el número de registros (a mà me parece una locura, pero lo he visto en varios sitios).
Si ya hemos calculado el número de registros, ahora podemos obtener únicamente un rango de registros ya sea con LIMIT en MySQL o haciendo uso del ROWNUM en Oracle.
¿Presenta algún problema calcular inicialmente el número de registros?, pues sÃ, si la consulta es pesada, por ejemplo por su complejidad, se deberá realizar dos veces, la primera para calcular el número de registros y la segunda para obtener los datos, por lo que perdemos un tiempo precioso.
Lo mejor serÃa que no aparecieran el número de registros totales encontrados, aunque esto a veces no es posible ya que las especificaciones del cliente lo obligan, entre otras cosas porque ese dato puede llegar a dar cierto prestigio sobre la calidad del buscador.
Tampoco olvidar que las bases de datos no recuperan todos los registros de una sola vez, sino que los va recuperando según se van solicitando, al menos asà lo hacen bases de datos como Oracle.
De todas formas, para aquellos que necesiten realizar paginación en sus aplicaciones web, os pasamos una serie de tutoriales que esperamos sean de utilidad:
patTemplate es un sistema de plantillas para PHP que nos permite separar la lógica de negocio del contenido en nuestras aplicaciones web.
Desde el punto de vista del diseñador, patTemplate ofrece una serie de etiquetas XML para acceder a diferentes partes del diseño, las cuales se puede ocultar, intercambiar o repetir. Los diseñadores deberán aprender nuevas etiquetas, pero no es necesario conocer ningún lenguaje de programación, ni usar instrucciones condicionales o de repetición.
Para los desarrolladores, tan solo es necesario aprenderse el API, lo cual no es muy complicado para programadores con experiencia. patTemplate
Muy buen artÃculo que explica cómo almacenar imágenes en campos blob usando MySQL y PHP, el post explica realmente cómo crear galerÃas de imágenes almacenándolas en campos blob. Yo personalmente no soy muy partidario de esta opción, cuando realmente se deberÃa guardar la ruta de la imagen en el servidor y que el servidor web se encargue de enviar la imágen, ya que si no, lo que hacemos es hacer trabajar bastante a la BD.
De todas formas, el artÃculo puede sernos útil para saber como almacenar en este tipo de campos, porque aunque el ejemplo no sea del todo correcto, en alguna ocasión si que vamos a necesitar guardar datos en campos blob.
Muy bien explicado, añade conceptos básicos de protección por contraseña, actualización y borrado de imágenes, a parte de un par de consejos sobre los problemas que nos podemos encontrar con la capacidad máxima que se permite subir al servidor usando PHP. PHP MySQL example: image gallery (blob-storage)
VÃa / Good PHP Tutorials
PureEdit es un CMS para PHP y MySQL que nos facilitará la labor de desarrollo de la aplicación y la reducirá en tiempo notablemente. Dejándonos el control total del diseño y de la programación.
Este CMS se basa en la implementación de módulos mediante la definición de tablas en la base de datos, según unos determinados sufijos en los campos de las tablas, se pueden crear relaciones entre módulos y definir el tipo de campo de una forma directa y sencilla. PureEdit
Vía / Smashing Apps