Librería en C para usar la API de meneame, y meneame-utils

Hoy es sábado, y como informático que soy, los sábados no salgo por ahí, no voy a bares ni discotecas, ni me paseo por ningún sitio…Me quedo en casa programando, igual que el resto de la semana, pero programando lo que yo quiero, es decir, como hobby.

Este sábado he decidido programar algo un poco rebuscado…empezaré por el principio.

Como todos sabéis, meneame es una página web, donde los usuarios envían noticias, las cuales los usuarios votan, y las que mas votos reciben, llegan a portada, y son vistas por miles de personas. Es una especie digg en español, pero que además, es software libre.

El caso es que meneame tiene una API pública, que cualquiera puede utilizar, para interactuar con meneame, desde cualquier programa, mediante el protocolo http, por ejemplo, si queremos comprobar si una url existe en meneame, ha sido enviada antes:

http://meneame.net/api/url.php?url=http://www.google.com

Y nos devuelve OK seguido de los enlaces a las veces que ha sido enviada y los votos que recibió, si no ha sido envíada:

http://meneame.net/api/url.php?url=http://www.example.com

Nos devuelve “KO” y la url desde la que podemos enviarla.

Utilizando esta API, podemos hacer un programa, que tenga la opción de comprobar si una url, existe en meneame, y con eso, todo tipo de viguerías.

Otra API muy interesante de el meneame, es la de enviar notas al notame. El notame es una especie de twitter, pero integrado en la página de meneame.

Para enviar notas al notame, existe otra API que podemos utilizar:

http://meneame.net/api/newpost.php?user=NOMBREUSUARIO&key=CLAVEAPI&text=TEXTOAQUI

Donde la clave API, es nuestra clave API, que podemos consultar en nuestro perfil de meneame, habiendo iniciado sesión.

Bien, además de todo esto, las notas del notame se pueden leer vía rss, entre otras cosas.

No voy a continuar, por que no pretendo documentar aquí toda la API de meneame, era solo para hacer una idea de lo que es, y como funciona, para introduciros en lo que he programado hoy.

El caso, es que imaginaros que queréis hacer un programa que utilice una de esas API, necesitaréis hacer peticiones HTTP desde vuestro programa, en algunos casos parsear la respuesta…si queréis leer las notas del notame, necesitaréis leer del feed…todo esto, es demasiado trabajo para un simple programa que interactúa con meneame, por ello, he creado un conjunto de librerías en C, que disponen de una serie de funciones para interactuar con el meneame desde tu programa, sin preocuparte de nada.

Para ejemplificar como funcionan, he creado también 3 programas que utilizan las librerías, para que podáis ver en directo, como funciona todo esto.

Antes de entrar en materia de código, voy a enseñar un poco los 3 programas (en C, para consola) de los que hablo.

jcarlosn@thanatos:~$ mnmuserinfo -h
mnmuserinfo [-xkrwndz] [-i id] [-u usuario]
Consulta información sobre un usuario de meneame

-x    Muestra solo el username
-k    Muestra solo el karma
-r    Muestra solo la posicion en el ranking
-w    Muestra solo la web
-n    Muestra solo el nombre
-d    Muestra solo la fecha de registro
-z    Muestra solo el id

-i id    Consulta la informacion para el usuario con ese id
-u usuario    Consulta la informacion mediante el nombre de usuario

Ejemplos:

Consultar informacion de jcarlosn usando su id: mnmuserinfo -i 23321
Consultar informacion de jcarlosn usando su nombre: mnuserinfo -u jcarlosn

Para notificar bugs: jose@eyeos.org
jcarlosn@thanatos:~$

El primero, permite obtener información de un usuario de meneame, vamos a verlo:

jcarlosn@thanatos:~$ mnmuserinfo -u Carme
Id: 2682
Nombre de usuario: Carme
Web:
Nomre: Carmen
Karma: 15.220000
Ranking: 70
Fecha de registro: 2006-03-04
jcarlosn@thanatos:~$

Podemos pedirle información del usuario pasando su id, o su nombre de usuario, si queremos ver solo un campo, podemos hacerlo, por ejemplo, la web:

jcarlosn@thanatos:~$ mnmuserinfo -u jonarano -w

http://www.jonarano.es

jcarlosn@thanatos:~$

Vale, el siguiente comando de ejemplo, creado con las librerías es mnmchecklink, permite consultar una url, para saber si ya existe en meneame, y si existe, muestra su enlace a meneame, y sus votos:

jcarlosn@thanatos:~$ mnmchecklink http://www.google.com
http://meneame.net/story.php?id=41836  votes: 4
http://meneame.net/story.php?id=20861  votes: 3
jcarlosn@thanatos:~$

Y si no existe:

jcarlosn@thanatos:~$ mnmchecklink http://www.meloinvento.com
El link proporcionado no existe en meneame
jcarlosn@thanatos:~$

Y el tercer y último comando, el mas elaborado, permite enviar y leer notas del notame, vamos a verlo:

jcarlosn@thanatos:~$ cnotame -h
cnotame [-l] [-n usuario] [-v] [-k apikey] [-m mensaje]
Publica notas en el notame, usando la API de meneame

-v    modo verbose (salida con detalle)
-h    muestra la ayuda
-k CLAVE    la clave API que se utilizara para agregar las notas
-m MENSAJE    el texto de la nota a enviar
-u USUARIO    el usuario asociado a la clave API porporcionada

-n USUARIO    lista las ultimas notas de USUARIO
-l    lista las ultimas notas de el notame

Ejemplos:

Listar las ultimas notas: cnotame -l
Listar las ultimas notas del usuario jcarlosn: cnotame -n jcarlosn
Enviar una nota al notame: cnotame -k XXXXXXXXXX -m “hola meneantes” -u youuser

Para notificar bugs: jose@eyeos.org
jcarlosn@thanatos:~$

Por ejemplo, para ver las últimas 20 lineas del notame:

jcarlosn@thanatos:~$ cnotame -l | tail -n 20
#15   Abel.Florez

No creo que seas de Segovia. Si es así, te mando a “los Miami”.
autor: jmt
———————
Entro a tuenti.

Me encuentro con una foto de la Euskal Encounter, que salgo dormido como un angelito!!! Con una toalla al cuello (porque tenía frio). No conocía la existencia de tal foto

Eso si, la que la ha subido, ya tiene la respuesta en “modo foto”
autor: jonarano
———————
Odio cuando algunos videojuegos llegan a un punto de dificultad en el cual pasarte una pantalla significa “pulsar exactamente los mismos botones en los mismos instantes (durante un buen rato) porque no hay otra manera, llegar a un punto ligeramente más avanzado que la vez anterior, morir, repetir”.
autor: trollinator
———————
@trollinator Por curiosidad. Qué juego te atormenta?
autor: Cesc
———————
jcarlosn@thanatos:~$

Si no lo limitamos con tail ,la salida será un poco extensa.

Ahora para ver todas las notas de un usuario concreto:

jcarlosn@thanatos:~$ cnotame -n jcarlosn
No es lo mismo @PEP0M0LT0, no
autor: jcarlosn
———————
me aburro
autor: jcarlosn
———————
no es lo mismo ganar karma para votar, que votar para ganar karma (karmwhore)
autor: jcarlosn
———————
@Ancalagon: no, no lo merece
autor: jcarlosn
———————
las 3 y media y aun sin sueño, que dura la vida del informatico
autor: jcarlosn
———————
jcarlosn@thanatos:~$

Para enviar una nota al notame:

cnotame -m “introduce aqui tu nota” -k tuclaveapiaqui -u tuusuarioaqui

Estos programas, son ejemplos del uso de esta librería, podéis crear vuestros propios programas con ella, vamos a verla un poco por encima:

En la parte de notame, tenemos libnotame.h/libnotame.c que disponen de:

int sendNote(char *msg, char *key, char *user);
struct note *listNotes(char *author);

La primera envía una nota dado su texto, la clave API y el usuario, la segunda devuelve una lista enlazada con el contenido de las notas, si no queremos especificar autor, y queremos leer todas las notas del notame, basta con pasarle NULL, para iterar sobre la lista de notas, tenéis un ejemplo en cnotame.c:

result=listNotes(vuser);
if(result == NULL) {
fprintf(stderr, “Error obteniendo las notas de notame\n”);
}
while(result != NULL) {
ptr=result;
printf(“%s\n———————\n”,ptr->text);
result=ptr->next;
free(ptr->text);
free(ptr);
}

En el apartado de la API de consultar la información de un usuario, tenemos libuserinfo.c/libuserinfo.h, que disponen de:

int getUserInfo(int id, struct userInfo *uinfo);
int getIdByUser(char *user);

La primera, rellena el struct de tipo userInfo que le pases en el segundo argumento, con la información obtenida del usuario con id, recibido por el primer argumento, el struct userInfo es:

struct userInfo {
char username[60];
char name[512];
char web[1024];
int id;
float karma;
int ranking;
char regdate[11];
};

La segunda, devuelve el id de un usuario, dado su nombre de usuario.

Y en el apartado de links, tenemos liblink.h/liblink.c que dispone de:

struct link *linkExists(char *link);

La cual comprueba si el link dado existe ya en meneame, y si existe, devuelve una lista enlazada de structs del tipo:

struct link {
char url[42];
int votes;
struct link *next;
};

Con todos los enlaces de las veces que fue enviado a meneame, y los votos que obtuvo, para iterar sobre ella, hay un ejemplo en mnmchecklink.c:

stack = linkExists(argv[1]);

if(stack == NULL) {
printf(“El link proporcionado no existe en meneame\n”);
} else {
while(stack != NULL) {
printf(“%s votes: %d\n”,stack->url,stack->votes);
myLink=stack;
stack=stack->next;
free(myLink);
}
}

Bueno, tiene muchísimos detalles ocultos esta librería, y no voy a entrar demasiado en detalles por que me estoy extendiendo demasiado, si tenéis alguna duda sobre la librería, podéis escribirme, mi correo está en los headers de todos los archivos.

Para poder compilar los ejemplo, se requiere libmrss y libcurl, para instalarlos en sistemas basados en debian, como ubuntu:

sudo apt-get install libcurl4-openssl-dev libmrss0-dev libmrss0

Luego estando en el directorio donde lo habéis extraído, ejecutáis make y si queréis que se copien a /usr/local/bin, sudo make install.

El makefile es muy cutre, por que solo son ejemplos de lo que se puede hacer con la librería, nada mas.

Todo el código es software libre y está liberado bajo GPL3, como dice en los headers.

Podéis descargar la librería de aquí.

Aviso: no es una librería propiamente dicha, en el sentido de librería de linux :) recordad que es un trabajo de fin de semana por hobby, es simplemente archivos .h con su .c, que proporcionan funciones para interactuar con meneame, y programas de ejemplo que los utilizan.

Por cierto, me olvidaba, segun comentaban aquí:

[*] Crea un API para bobos y los frikis harán virguerías, además dejarán de darte la lata pidiendo cosas complicadas. Pero no serán capaces de hacer que esos programas lean las notas vía RSS

así que los frikis no eramos capaces de leer las notas vía RSS :p

About these ads

12 Responses to “Librería en C para usar la API de meneame, y meneame-utils”


  1. 1 aergenium agosto 30, 2008 en 8:23 pm

    Hola!
    Me parece una iniciativa estupenda.
    Me pregunto si puede servir para crear comandos para Ubiquity, ver este enlace:
    http://www.enriquedans.com/2008/08/ubiquity-visualizando-tendencias-en-el-uso-de-la-web.html

    Ubiquity ya tiene comandos para Digg!, pero no para Menéame.

  2. 2 rooibo agosto 30, 2008 en 8:26 pm

    aergenium, estoy seguro que si, solo hace falta que alguien se anime, coja la librería y la aplique en Ubiquity :)

  3. 3 Juanjo agosto 30, 2008 en 9:34 pm

    Algún friki ya leía las notas en RSS; pero en C# :D

    Buen trabajo :)

  4. 4 rooibo agosto 30, 2008 en 9:41 pm

    Hola Juanjo, muchas gracias! :)

    El único problema que había para leer el RSS en C es que libmrss no está documentada (una pena!).

  5. 5 deambulando agosto 30, 2008 en 9:54 pm

    Ey! buena iniciativa….cuanto tiempo libre no? jeje

    me alegro por ti! un saludo

  6. 6 javier5510 agosto 30, 2008 en 11:21 pm

    Muy buena librería. Si supiera utilizarla… Gracias esto me ayudará a iniciarme en C.

  7. 7 rooibo agosto 30, 2008 en 11:29 pm

    hola javier5510, gracias por tu comentario!

    El código de todos los programas de ejemplo, he intentando hacerlo lo mas claro posible, suerte con el C.

  8. 8 Anónimo agosto 31, 2008 en 12:20 pm

    ¿Por qué llamar ‘librería’ a algo que no es una librería?

    Son tres aplicaciones ‘standalone’. Yo no puedo enlazar contra esta ‘librería’ y utilizar sus símbolos exportados.

  9. 9 TheOm3ga agosto 31, 2008 en 12:29 pm

    Anónimo creo que no te has fijado en el párrafo que pone “Estos programas, son ejemplos del uso de esta librería, podéis crear vuestros propios programas con ella, vamos a verla un poco por encima:

    En la parte de notame, tenemos libnotame.h/libnotame.c que disponen de:…” y ahí empieza la parte de la librería que sí puedes compilar y enlazar por separado.

  10. 10 rooibo agosto 31, 2008 en 1:34 pm

    Exacto TheOm3ga (y muchas gracias por comentar)

    Anónimo, aparte de lo que te ha indicado TheOm3ga, lee por favor también la parte que dice:

    Aviso: no es una librería propiamente dicha, en el sentido de librería de linux :) recordad que es un trabajo de fin de semana por hobby, es simplemente archivos .h con su .c, que proporcionan funciones para interactuar con meneame, y programas de ejemplo que los utilizan.

    Gracias por comentar.

  11. 11 josema febrero 7, 2010 en 10:07 pm

    Muy chulo! Y muy bien documentado… gracias! Por cierto el link de descarga del código no funciona bien!

  12. 12 fer abril 17, 2010 en 8:02 am

    tengo google chrome v.5 beta y me aparece esto Oops! Google Chrome could not find eyeideas.es
    el link ya no existe o que pasa


Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s





Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

%d personas les gusta esto: