Llevo días testeando metaplanet como aplicación web para mostrar de forma unificada las entradas de diferentes blogs, al estilo del planetplanet que usamos en GPL Tarragona Planet. Como subscriptores tengo los mismos que los del planet de GPL Tarragona.
Por desgracia, desde hace ya varios días, Joni me “rompió” mi metaplanet con uno de sus posts… concretamente hacia que siempre saliese siempre en primer lugar su post sobre Nintendo revolutions y los nuevos que escribia, ni tan siquiera aparecian 🙁 Me dió mucha rábia porque metaplanet se ha comportado muy bien con las codificaciones de caracteres, cosa que con planetplanet siempre hemos tenido muchos problemas.
Hoy me he puesto a investigar cual era el problema, por suerte metaplanet esta escrito en PHP, lenguaje con el que tengo mucha más práctica que con Python (usado por planetplanet). Al final he dado con el problema, por lo visto según el blog las fechas en el feed (campo “pubDate”) estan en Castellano, Catalán o Inglés :S Por ejemplo:
– Alfons Nonell i Canals tiene las fechas de su feed en Catalán: “Dj, 29 Sep 2005 03:27:35 +0000”
– Jonathan Hernández Velasco tiene las fechas de su feed en Castellano: “Jue, 29 Sep 2005 13:55:06 +0000” y Inglés “Thu, 29 Sep 2005 12:03:43 +0000”
– Sergio Blanco Cuaresma, yo mismo 😀 tengo las fechas de los feeds completamente en Inglés.
Metaplanet usa una función en php para traducir esa fecha a otro formato y de esta forma poder ordenar los posts, pero solo funciona correctamente cuando estan en Inglés. ¿Solución? He añadido una pequeña función en “cron/misc.php”:
function translate_to_english($time) { // From Catalan to English $new_time = str_replace("Dl", "Mon", $time); $new_time = str_replace("Dm", "Tue", $new_time); $new_time = str_replace("Dmc", "Wed", $new_time); $new_time = str_replace("Dj", "Thu", $new_time); $new_time = str_replace("Dv", "Fri", $new_time); $new_time = str_replace("Ds", "Sat", $new_time); $new_time = str_replace("Dg", "Sun", $new_time); // From Spanish to English $new_time = str_replace("Lun", "Mon", $new_time); $new_time = str_replace("Mar", "Tue", $new_time); $new_time = str_replace("Mié", "Wed", $new_time); $new_time = str_replace("Jue", "Thu", $new_time); $new_time = str_replace("Vie", "Fri", $new_time); $new_time = str_replace("Sáb", "Sat", $new_time); $new_time = str_replace("Dom", "Sun", $new_time); return $new_time; }
Y hago que sea llamada desde la función “my_strtotime($time)” del mismo fichero:
function my_strtotime($time) { // If null then returns the base timestamp if ($time == NULL) return 1; $time = translate_to_english($time); // Process list($year, $month, $day, $hour, $minute, $second, $timezone) = sscanf($time, "%4d-%2d-%2dT%2d:%2d:%2d+%s"); .... }
Quizás no es una solución elegante, pero funciona 🙂 Quizás lo ideal es que en los feeds no hubiese nunca traducciones y siempre se mostrasen las fechas en Inglés. Después cada sistema ya haria la traducción adecuada según el idioma del cliente.
Y cuál es la dirección donde podamos comprobar lo que trasteas? 😀
Cuando deje de trastear ya se verá 😉
Lo hice queriendo, es sólo para que quede constancia… xDD