El ranking de Alexa es uno de los más famosos que hay, y es bastante utilizado a la hora de vender publicidad u otros aspectos comerciales. Dispone de un API que permite obtener el ranking de una web, por lo que podemos hacer una llamada y obtener los datos para poder mostrarlos en nuestra web.
La clase es muy sencilla:
class AlexaRank {
public function getRequestUri($domain) {
return 'http://data.alexa.com/data?cli=10&dat=s&url=' . $domain;
}
public function parse( $httpResponse ) {
preg_match( '#<popularity url="(.*?)" text="([0-9]+){1,}">#si', $httpResponse, $p );
$res = ( $p[2] ) ? number_format( intval($p[2]) ):0;
return str_replace(',', '', $res);
}
}
Siempre que hagamos una aplicación web, tenemos que tener muy encuenta las cuestiones de seguridad, sobre todo las formas más conocidas de ataque. Una de estas formas es Cross-Site Request Forgeries, que más o menos viene a decir Falsificación de Petición desde Otro Sitio (quizás la traducción no es exacta, pero creo que lo explica bien).
La solución es añadir una marca formada por un número “encriptado” y un tiempo para que tenga que renovarse esta marca. La marca se debe crear y pasar en el formulario por el que se envÃan los datos y a parte se debe controlar su existencia, si coincide y si no ha superado el timeout.
A parte de la casi compra de Bea por parte de Oracle (serÃa una buena noticia para los que desarrollen con Weblogic), nos enteramos de una gran noticia para los desarrolladores de PHP, y es que Oracle contribuye con un driver PHP open source para su OCI8. Este driver nos permite acceder a las caracterÃsticas que nos ofrece la base de datos de Oracle, pudiendo asà disponer del pool de conexiones, entre otras cosas.
Uno de las prioridades de Oracle es hacerse un hueco en la web2.0, para lo cual en colaboración de Zend pretende sacar este driver para asà poder realizar aplicaciones que necesiten la robustez de la base de datos Oracle. Oracle Contributes Open Source Driver for PHP
A la hora de mejorar mejorar el rendimiento de nuestras páginas web podemos hacer cuatro cosas:
Realizar menos peticiones HTTP
Añadir una cabecera para que expire en el futuro
Comprimir mediante Gzip componentes de la página
Reducir el tamaño de los archivos Javascript, CSS y HTML
Todo esto se puede hacer con la librería que mostramos a continuación: reduce las peticiones porque junta los archivos CSS y Javascript, y reduce los CSS, HTML y Javascript eliminando espacios y cosas parecidas y luego cacheando.
Para ello solo habrá que añadir como mínimo 3 líneas:
require_once('class.compressor.php');
$compressor = new compressor('css,javascript,page');
// Y al final del script
$compressor->finish();
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.
AJAX Locking es una librerÃa de PHP que nos permite bloquear el acceso a los recursos del servidor a las peticiones AJAX. Ocurre con frecuencia que cuando una aplicación usa AJAX se efectuen muchas llamadas al servidor, accediendo todos a los mismos recuersos, pudiendo obtener resultados no muy deseados.
En estos casos, esta liberÃa es lo más adecuado, ya que bloquea recursos del servidor, previniendo estos errores. AJAX Locking
VÃa / PHP Classes
2 Comments
Lo malo es que estas cosas un dÃa cualquiera dejan de funcionar, y si quieres proveer un servicio serio que las utilice te arriesgas a que eso ocurra en cualquier momento.
Creo que Alexa deberÃa tener algún tipo de api oficial gratuita, al fin y al cabo no es algo extraordinario.
Josep, estoy totalmente de acuerdo contigo. Yo creo que Alexa es lo peor que existe, pero curiosamente, algunos lo siguen como si fuera la única verdad.
Lo malo es que estas cosas un dÃa cualquiera dejan de funcionar, y si quieres proveer un servicio serio que las utilice te arriesgas a que eso ocurra en cualquier momento.
Creo que Alexa deberÃa tener algún tipo de api oficial gratuita, al fin y al cabo no es algo extraordinario.
Josep, estoy totalmente de acuerdo contigo. Yo creo que Alexa es lo peor que existe, pero curiosamente, algunos lo siguen como si fuera la única verdad.
Espero que a esas personas les sirva el script.