Completo tutorial que nos explica paso a paso qué tenemos que hacer para que nuestros usuarios se puedan autenticar usando Facebook Connect (la nueva API de Facebook mucho más sencilla que la anterior).
El tutorial se divide en los siguientes pasos:
Crear la tabla MySQL para nuestra aplicación, esto lo tendremos que modificar según nuestra aplicación
Google App Engine es un hosting gratuito de aplicaciones con 500MB de almacenamitno y bando de ancha para 5 millones de páginas vistas, pero centrado en Java. Aquellos que deseen ejecutar sus aplicaciones PHP en GAE deberán hacerlo mediante Quercus, una implementación Java de PHP.
El el post que referencio explican paso a paso qué hacer para poder ejecutar nuestras aplicaciones PHP en GAE. Run PHP on the Google App Engine
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.
PHP/SWF Charts es una librerÃa PHP que nos permite generar gráficas a partir de datos dinámicos. Los datos se obtienen mediante PHP y luego se genera la gráfica en formato Flash. Se puede usar otro lenguaje como ASP o Perl si se usa XML/SWF Charts, la versión XML de la misma herramienta.
Entre las caracterÃsticas que nos ofrece encontramos:
Datos actualizables sin necesidad de recargar la página
Si queremos modificar las búsquedas que ofrece WordPress para que devuelva lo que nosotros queremos tan solo hay que hacer dos funciones para dos filtros:
add_filter('posts_results', 'mi_search');
function mi_search($posts) {
$s = get_query_var('s');
if (condicion($s)) {
$posts = array();
$paged = intval(get_query_var('paged'));
if ($paged < 1) $paged = 1;
$posts_per_page = intval(get_query_var('posts_per_page'));
$from = ($paged-1)*$posts_per_page;
global $wpdb;
$_posts = $wpdb->get_results("select post_id from $wpdb->posts where loquesea order by post_id desc limit $from, $posts_per_page");
foreach($_posts as $p) {
$posts[] = get_post($p->post_id);
}
}
return $posts;
}
add_filter('found_posts', 'mi_found_posts');
function mi_found_posts($n) {
$s = get_query_var('s');
if (condicion($s)) {
global $wpdb;
$res = $wpdb->get_results("select count(*) as n from $wpdb->posts where condicion ");
$n = $res[0]->n;
}
return $n;
}
SilverStripe es otro CMS open source del estilo Drupal o Joomla, el cual es muy intuitivo y fácil de usar, flexible, basado en MVC, escalable, cumple estándares, fácil de extender mediante módulos y mucho más.
Es necesario PHP y aunque hay una comunidad detrás trabajando para mejorar el CMS, noto que la ayuda no es demasiado extensa. La administración es muy completa, además incluye módulos para e-commerce, blog, foros, flickr, Google Maps. Para aquellos cuyos conocimiento de desarrollo no sea muy amplio, les será de gran ayuda para que puedan desarrollar sus aplicaciones. SilverStripe
Uno de las cosas que no me gustan de WordPress es la costumbre de añadir las clases a los elementos basados en el ID del mismo y no en su slug. Esto ocurre en todo, pero en este caso es con la lista de categorías generadas por wp_list_categories, devolviendo un HTML parecido a este:
Si queremos indicar estilos específicos para estas categorías, por ejemplo para añadir un icono a cada categoría, no nos sirve el class basado en ID, porque nos encontramos con que dependiendo de cuando se genere esta categoría, habrá que cambiar el css, siendo más lógico obtener un código como este:
Amigo muchas gracias por tus aportes…
En realidad que tienes muy buen ojo para elegir lo que publicas… de manera personal me sirvió mucho esta publicación
Me alegra que te haya servido 🙂
He intentado hacer esto desde ase tiempo, pero me atoro en algunas cosas aun usando traductor, por lo que ando buscando tutoriales en español. Si encuentras uno asi me ayudarias mucho.
Amigo muchas gracias por tus aportes…
En realidad que tienes muy buen ojo para elegir lo que publicas… de manera personal me sirvió mucho esta publicación
Me alegra que te haya servido 🙂
He intentado hacer esto desde ase tiempo, pero me atoro en algunas cosas aun usando traductor, por lo que ando buscando tutoriales en español. Si encuentras uno asi me ayudarias mucho.
Gracias