Menéame es una aplicación web de código abierto basada en PHP/MySQL que te permite enviar una historia que será revisada por todos y será promovida, o no, a la página principal. Cuando un usuario envía una noticia ésta queda en la cola de pendientes hasta que reúne los votos suficientes por parte de otros usuarios para ser promovida a su categoría correspondiente, o incluso a la página principal, creando un sistema de noticias gestionado por los propios usuarios, que son quienes juzgan y deciden qué es relevante y qué no.
El desarrollador principal es Ricardo Galli (http://mnm.uib.es/gallir/), colaborando con él Benjamí Villoslada (http://weblog.bitassa.net/) y Guillem Cantallops (http://cantallops.net/)
La respuesta corta es cualquiera, el proyecto es open source y puede ser instalado por cualquiera que cumpla las normas recogidas en la licencia...
La respuesta práctica es un poco más compleja, al menos en esta fase del desarrollo (peta, que no beta)
La instalación de Menéame está dirigida por ahora a programadores o personas con conocimiento de, al menos, PHP y MySQL. Un mínimo de conocimientos de crontab (http://en.wikipedia.org/wiki/Crontab , en inglés - http://es.wikipedia.org/wiki/Cron_%28unix%29 , en español de España) son útiles si pretendes instalar el script como entorno de pruebas, para entornos de "producción" se tornan cuasi imprescindibles, como explicaremos más adelante.
Ante todo quiero indicar que aquí no voy a daros ninguna fórmula de la coca-cola para acabar con un sitio único y perfecto que pueda ser utilizado desde ya. Este tutorial se va a limitar a indicarte como instalar el software, configurar la BD, etc... para obtener un precioso sitio vacio y con similar layout a meneame.net
Para que puedas (y otros puedan) meneártela, vas a necesitar:
Si tienes dudas sobre si cumples alguna de estas condiciones, crea un fichero info.php (tienes uno ya creado en el código de meneame) y escribe en el la linea: <?php phpinfo(); ?> , súbelo a tu servidor y carga en el navegador http://www.tuservidor.com/info.php , te dará información extendida de varios de estos requerimientos que, por básicos y obvios, dejaremos en este punto.
Ah, casi lo olvidaba, a mi me ayudó en este proyecto el disponer también de:
Antes de nada descomprimiremos el fichero meneame-src.tgz para tener a mano los ficheros que componen el sistema.
Esto nos generará dos carpetas, www y scripts.
Pero no lo haremos todavía... antes necesitamos unos pequeños pasos previos, unas caricias, un... "precalentamiento"
Lo primero es crear una base de datos donde almacenar el contenido de nuestro menéame. Casi todos los hostings te proveen para ello de un panel de control privado, una implementación de phpMyAdmin, etc... si no sabes crear una base de datos, vende tu alma a tu administrador de sistemas o, mejor todavía, no sigas leyendo esta guía.
En nuestro ejemplo crearemos la base de datos NOMBRE_DE_LA_BASE_DE_DATOS, con usuario de acceso USUARIO_DE_LA_BD y contraseña PASSWORD_DE_LA_BD. Cada user en su home, y root en la de todos, que dicen.
Una vez creada, necesitaremos una estructura de tablas, esto nos lo facilita menéame por medio de un fichero meneame.sql dentro de la carpeta /archives . Este fichero contiene una secuencia de instrucciones SQL que debemos ejecutar para recrear la susodicha estructura de tablas. Ojo aquí a la configuración y el juego de caracteres de nuestro servidor MySQL, si meneame.sql nos da problemas, probad a jugar con los valores de las primeras lineas. Asi que creamos las tablas :
Y listo... tenemos nuestra base de datos cálida y virginal, esperando a que la meneen. (uh...) Ya sólo nos queda indicarle a menéame cómo conectarse con la misma, pasándole los datos que hemos utilizado. Y eso lo haremos en la...
Antes de proceder a modificar los ficheros de configuración, recomiendo (de nuevo) el uso de UltraEdit o similar para trabajar en formato UTF-8 directamente (usuarios de Linux, ni caso a esta parte), o en su defecto abrir los ficheros con notepad y, antes de realizar ningún cambio, guardarlos en el susodicho formato UTF-8 antes de continuar.
El primer fichero que podriamos modificar sería el config.php que encontraremos en la carpeta www . Sin embargo, Ricardo ha previsto un sistema de actualización sencillo, al menos para esta parte. El script config.php busca en su misma carpeta un hostname-local.php con directrices de configuración, es decir, que podemos crearnos, siempre siguiendo los valores del ejemplo mencionado anteriormente, un www.noticias-y-actualidad.com-local.php que contenga nuestra configuración personalizada, sin tocar para nada el código de menéame. ¿ Y esto para qué ? Pues para que cuando salga la próxima versión, en principio podamos simplemente descargarla y subirla al servidor machacando la anterior sin perder por ello nuestra configuración personal.
Asi que en nuestro ejemplo creamos el fichero www.noticias-y-actualidad.com-local.php y lo rellenamos con las siguientes directrices de configuración:
<?php$server_name = $_SERVER['SERVER_NAME']; // El script detecta automáticamente nuestra url, no es necesario editarlo $dbname="NOMBRE_DE_LA_BASE_DE_DATOS"; // Ni lo explico $dbuser="USUARIO_DE_LA_BD"; // Lo mismo $dbpassword="PASSWORD_DE_LA_BD"; // Idem $dblang = 'es'; // Futuras funcionalidades? Especifica el idioma del entorno, español por defecto $page_size = 30; // Noticias por página $anonnymous_vote = true; // Los anónimos pueden votar ? true/false $external_ads = true; //$globals['external_ads'] = false; // Se admiten banners externos? true/false $globals['tags'] = 'tecnologia, internet, cultura, software libre, linux, open source, bitacoras, blogs, ciencia'; // Futuras funcionalidades? No tengo ni idea de para qué sirve esto :) $globals['time_enabled_votes'] = 864000; // 10 dias // Las noticias más antiguas de $globals['time_enabled_votes'] dias no pueden ser ya votadas $globals['mysql_persistent'] = true; // Usar conexiones persistentes al servidor MySQL? true/false // Ojo a esto si va a ser un sitio con mucho tráfico //$globals['redirect_feedburner'] = false; // Redirigir a Feedburner? true/false $globals['min_karma_for_comments'] = 0; // Karma mínimo necesario para comentar $globals['do_gravatars'] = true; // Utilizar el servicio de avatares de gravatars en nuestro menéame? true/false) $anon_to_user_votes = 3; // La relación máxima de votos de usuarios anónimos vs registrados en 1 hora, es decir, // en este ejemplo puede haber un máximo del triple de votos anónimos que de usuarios registrados por hora. $site_key = 12345679; // Futuras funcionalidades? No tengo ni idea de para qué sirve esto :) $anon_karma = 4; // Karma por defecto para los usuarios anónimos?>
Recomiendo tambien crear un noticias-y-actualidad.com-local.php sin las www en el nombre y con el mismo contenido para evitar que no se lea nuestra configuración adicional si alguien nos enlaza a noticias-y-actualidad.com en lugar de a www.noticias-y-actualidad.com
Y con esto y un sufflé... nuestro menéame debería estar listo para su primer pase de largo, asi que accedemos a http://www.noticias-y-actualidad.com/ y comprobamos que todo carga perfectamente... aunque es un todo un poco "descafeinado"... ya que se encuentra completamente vacío.
Es hora de organizar un poco la aparciencia de nuestro menéame:
Lo primero es crear un usuario administrador, para ello nos registraremos utilizando el enlace de nuestro flamante meneame y, una vez confirmado el email, entraremos en nuestro gestor de MySQL (PHPMyAdmin o el que sea que utilizeis) y modificaremos nuestro usuario en la tabla users fijando su user_level a god (dios) ¿ Para qué ? Pues no tengo ni idea, pero seguro que tener un usuario administrador sirve de algo en el futuro, por ahora, si esperabais una sección de administración desde la que controlar vuestro menéame... lamento decepcionaros... no existe. Asi que por ahora a hacerlo todo a mano, como los hombres de verdad. Una pequeña reseña de los campos de la ficha de usuario:
Tras la creación de nuestro usuario administrador, toca generar nuestras categorías. Para ello iremos a la tabla categories e iremos insertando registros. Aquí no es necesario que nos preocupemos por el orden, ya que menéame se encargará de ordenarlas el solito por orden alfabético. Los campos a rellenar son:
Una vez rellenado esto, y si todo ha ido bien, al navegar por el sitio veremos que la cosa ya va cogiendo forma... tenemos categorías por las que podemos navegar sin problema.
Si, bueno... seguro que el bueno de Ricardo tiene en mente crear el bot de fetch automágico de noticias que además las organiza, vota, lustra y da esplendor en alguna fase más avanzada del desarrollo, pero por ahora, ajo y agua, nos toca a nosotros crear contenido para nuestro sitio, asi que...
Tras comprarte unos cuantos amigos o bajártelos de internet, y aún habiendo estos diligentemente meneado tus noticias, verás que éstas aún se resisten a aparecer en la página principal. Y te preguntas porqué. Y sudas. Y pasas miedo. Pero en vano: El sistema actualiza a tiempo real muchas cosas en la base de datos, pero no así el cálculo de qué noticias deben y cuales no aparecer en la página principal, asi como muchos otros factores. El sistema requiere que dicha actualización se realice de forma periódica (cada x tiempo) para trabajar con un conjunto de datos lo más fiables posible. Aquí es donde entran en juego los scripts que colocamos en la carpeta /scripts de nuestro menéame, y que os explicaré siguiendo el ejemplo de http://www.noticias-y-actualidad.com:
En estos tres scripts es donde podreis retocar además el algoritmo que indica el número mínimo de meneos y karma que necesita una noticia para pasar a la página principal, los factores de pérdida o ganacia de karma, etc...
Si bien la actualización del sistema funcionará perfectamente actualizándola tú a mano, hay partes de la misma (como el promote) que es mejor que se ejecuten en intervalos cortos de tiempo, lo que requerirá alguna forma de recargar dichas urls en períodos regulares. Para ello hay varias soluciones:
Cron, la recomendada La forma más cómoda y fiable de actualizar nuestro menéame es instalar en nuestro cronjob (crontab -e) (http://en.wikipedia.org/wiki/Crontab , en inglés - http://es.wikipedia.org/wiki/Cron_%28unix%29 , en español de España) las siguientes líneas de configuración, sustituyendo el ejemplo http://www.noticias-y-actualidad.com/ por vuestra propia url y /usuario/noticias-y-actualidad.com/scripts/ por la ruta interna de nuestro sistema:
Estas lineas recargan los scripts de actualización de menéame en intervalos regulares, y además guardan en la carpeta /scripts el resultado de dichas actualizaciones, que podremos después cargar manualmente o por medio de nuestras propias herramientas para ver como ha ido todo (a eso me refería antes con la rudimentaria API). Una vez hecho esto, podemos dejar que la cosa funcione como debe realmente: en manos de los usuarios.
Nada más instalar mi primera copia de menéame me puse a probar todo como un loco, al ser una fase "peta" de desarrollo esperaba encontrar bugs y pequeños problemas por todas partes, pero lo curioso es que no fue así, todo funcionaba con la máxima normalidad... salvo un par de cosas que, al final, resultaron ser problema mío.
Al probar el buscador, me encontré con que ninguna búsqueda, por muy exacta que fuese, me devolvía resultado alguno Para las pruebas tenía dos noticias introducidas y con meneos, ya publicadas en la página principal, una "El Google buscador es el mejor" y otra "El Yahoo buscador puede hacerlo mejor", ambas etiquetadas con la palabra común buscadores, asi que... algún resultado debía darme la búsqueda buscador, no creeis ? Pues no, y por un motivo muy sencillo: El mortor de búsqueda FullText Search de MySQL no devuelve resultados si los mismos suponen el 50% o más del total de registros. Esto evita, por ejemplo, que entre 50000 artículos, la búsqueda de la palabra por o sus deje a nuestra base de datos sobrecargada de trabajo. Es por esto que, al coincidir todas mis noticias con el término buscado, el sistema no delvolvia ningún resultado, comportamiento lógico y normal que se resolverá sólo según vayamos insertando contenido en nuestra base de datos.
Al pulsar en los tags de las noticias, pasaba exactamente lo mismo, aunque esta vez no me sorprendió, al hacerse las búsqueda de etiquetas por el mismo sistema de MySQL FullText Search, el problema anterior se repetía, como digo, se arregla sólo en cuanto tenemos algo de contenido en la base de datos.
Otra cosa que puede sorprender a los no acostumbrados a trabajar con bases de datos MySQL es que se encuentren con que no pueden realizar búsquedas de cadenas inferiores a 4 caracteres, es decir, buscar "java" funcionará pero buscar "PHP" no... esto es debido a vuestra configuración de MySQL, para definir el tamaño de la búsqueda mínima debeis retocar vuestro my.ini/my.conf/mysql.conf (http://www.mysql.com para más referencia) y agregar o editar la línea:
... y reiniciar MySQL, esto indicará al servidor que admitimos búsquedas a partir de 3 caracteres. No hagais esto a la ligera, si notais un empeoramiento en el rendimiento de vuestra base de datos, volved a dejarlo todo como estaba, ya que éste parámetro puede multiplicar el trabajo de vuestra base de datos de forma considerable.
Y eso es todo amigos... para más información, consulta el wiki de menéame.
MarcosBL, http://www.propiedadprivada.com