Usuario anónimo ¿Quieres tener tu propio blog?
Crear blog gratis en OboLog

Tutorial de TrackBack

por obokaman
miércoles, 29 de enero del 2003 a las 14:21
guardado en

Estos días estoy aprendiendo un montón de cosas sobre estandarización, XHTML, posicionamiento y estilos por CSS, XML, y algunos conceptos muy interesantes en lo que a la aplicación de todos ellos se refiere (obokaman.com YA valida en XHTML 1.0, CSS2 y RSS 2. :DD) . Uno de los temas que más me ha llamado la atención últimamente es el sistema de Trackback, desarrollado hace algun tiempo por los chicos de Moveable Type para permitir a una página enlazar con un post de otra, y permitir a la otra saber que la han enlazado, a grandes rasgos. Gracias a un post de Kusor y al recordatorio de Lunatiko, descubrí un tutorial bastante claro de Matt Kingston sobre cómo implementar un sistema de trackback. El tutorial está pensado para PHP y MySql, aunque es suficientemente genérico como para portarlo a cualquier otro lenguaje. Aprecio mucho el trabajo desinteresado de toda esta gente que se dedica a proporcionarnos tutoriales, traducciones y manuales a los que estamos aprendiendo, así que he creido conveniente aportar mi granito de arena a la comunidad y traducir el tutorial con el que ayer mismo implementé el sistema de trackback en obokaman.com

Tutorial de Trackback 'casero'

NOTA: Moveable Type ha publicado documentación técnica sobre cómo implementar el TrackBack.

¿Qué es el TrackBack? Básicamente, es una manera de registrar quién ha enlazado a tus posts y notificar a los demás que los has enlazado. (creado por los chicos de Moveable Type).

Como no he encontrado documentación o tutoriales sobre cómo funciona el sistema de TrackBack, voy a intentar condensar lo que he observado acerca del comportamiento del TrackBack y cómo lo implementé a mi sistema PHP/MySQL.

Este no pretende ser un tutorial paso por paso usando algún lenguaje de programación específico. En cambio, espero poder tratar las necesidades más importates para configurar e implementar un sistema de TrackBack 'casero'. No pretendo entender completamente la filosofía o la mecánica detrás de los TrackBacks, así que si tienes una información más clara y correcta, por favor, ponte en contacto conmigo.

Paso1: Crear un sistema de envio de 'TrackBack Ping'
Paso 2: Crear un sistema capaz de recibir 'TrackBack Pings'
Paso 3: Mostrar tus TrackBacks
Paso 4: Permitir a tu página generar TrackBack Ping
Conclusion

Paso1: Crear un sistema de envio de 'TrackBack Ping'
Lo primero que debes hacer es crear el sistema para notificar a los otros weblogs que estás enlazando con ellos, es decir, enviar un 'TrackBack Ping'(TB a partir de ahora). Básicamente, para hacer esto simplemente necesitas hacer una llamada a su TB URL y proporcionarle una serie de variables.

Por ejemplo, la TB URL que utilizo para mi blog tiene este formato: /tb/?id=x donde x es el ID del post al que quieras enlazar.(N.T.:los id suelen salir en la url del post que estés visitando o en el 'enlace permanente'.)

A continuación verás las variables que debes/puedes enviar cuando llames a esa URL.

"url" = Esta es la URL del enlace permanente al tu post, desde el que estás enlazando al mío. Debe incluir el http://

"title" = Este es el título de tu post. La implementación del TrackBack en MT recorta automáticamente el título después de las 5 primeras palabras. A pesar de eso, parece que tanto title como blog_name aceptan un número ilimitado de caracteres cuando envías una única palabra muy larga (me aburrí después de llegar a los 400 caracteres)...(N.T.:no queda muy claro si las variables deben pasarse por URL o pueden enviarse por POST, ya que el máximo de caracteres por url creo que rondan los 256, no?)

"excerpt" = Esta variable puede contener un extracto de tu post. Parece permitir un máximo de 253 caracteres (aparece "..." automáticamente si es más larga).

"blog_name" = Este es el nombre de tu blog. De nuevo, me aburrí después de mandar una palabra de más de 400 caracteres en este campo...

Por tanto, la URL que deberías construir si quieres enviar un TB ping a mi post número 500, quedaría así:

/tb/?id=500&url=http://www.miblog.com/archives/00123.html &blog_name=Mi+blog&title=Aqui+iria+el+titulo

Asegúrate de codificar correctamente los caracteres para URL ("+" en vez de espacios, etc.) En PHP existe la función urlencode para eso. (NT: quedaría algo así:
$tburl="/tb/?id=500&url=http://www.miblog.com/archives/00123.html&blog_name="
.urlencode($nombre_blog)."&title=".urlencode($titulo_post);
?>
)

Para poder hacer el TB ping desde mi weblog, incluí un campo de texto en el formulario desde el que posteo los nuevos mensajes, donde pego la TB URL del post al que quiero enlazar. Hay una manera de descubrir automáticamente las TB URL a través de el Movable Type bookmarklet, del que hablaremos en el paso 4, pero escogí no implementarlo todavía en mi formulario de entrada de posts.

Después de que mi código PHP añada el post a mi weblog, construye la TB URL con las variables que antes hemos comentado, y hace la llamada a esa URL. En PHP se puede hacer a través de la función fopen (NT: usando la misma variable que definíamos antes, sería: )

Como veremos en la siguiente sección, la TB URL a la que estoy haciendo ping, devolverá una respuesta en XML, diciendo que si ha captado correctamente las variables que hemos enviado o no. De momento no he programado el script para que procese esa respuesta.

Y voilà! El blog al que estoy haciendo referencia recibe un TrackBack desde mi weblog, notificándole quién soy, qué estoy enlazando, y desde dónde.

Paso 2: Crear un sistema capaz de recibir 'TrackBack Pings'
Pero enviar TB pings es sólo la mitad de la historia. También debes ser capaz de recibirlos. Desde que decidí que mi weblog recibiría los pings en /tb/?id=x, creé un subdirectorio llamado "tb" y creé un script en PHP (index.php) que recibiría los pings.

Index.php primero comprueba que ha recibido correctamente las variables "id" y "url" (NT: las únicas IMPRESCINDIBLES). Si no es así, el ping da error, y la página debe devolver la siguiente respuesta:



1
You must include a URL and ID

Si es correcto y no parecen haber problemas, debe devolver la siguiente respuesta:



0

que significa que el TB ping se ha realizado correctamente.

Piensa que deberás modificar la cabecera del documento para especificar que estás mostrando contenido en XML. Por ejemplo, desde PHP se puede hacer con la función header.

Entonces, dónde queda guardada la información de este ping que recibimos? Como cada uno usa diferentes sistemas de almacenamiento de la información, tampoco entraremos en muchos detalles aquí. Yo uso MySQL para mi blog, así que creé una tabla "trackback".

+-----------+----------------------+------+-----+---------+----------------+
| Field     | Type                 | Null | Key | Default | Extra          |
+-----------+----------------------+------+-----+---------+----------------+
| id        | smallint(5) unsigned |      | PRI | NULL    | auto_increment |
| entry_id  | smallint(5) unsigned | YES  |     | NULL    |                |
| url       | tinytext             |      |     |         |                |
| title     | tinytext             | YES  |     | NULL    |                |
| excerpt   | tinytext             | YES  |     | NULL    |                |
| blog_name | tinytext             |      |     |         |                |
| added     | datetime             | YES  |     | NULL    |                |
+-----------+----------------------+------+-----+---------+----------------+

El campo "id" guarda un id único para ese ping, y es la clave primaria de la tabla.

El campo "entry_id" es el id del post de mi blog al que están enlazando mediante TB.

Actualmente estoy trabajando en un sistema para poder especificar directorios y ficheros en el campo entry_id, para poder enlazar a páginas concretas y no sólo a posts.

El campo "added" guarda la fecha en que se realizó el ping.

He puesto los campos "url", "title", "excerpt" y "blog_name" en topi tinytext (es decir, 256 caracteres como máximo). Esto debería ser suficiente para la mayoría de los pings. Siguiendo la implementazión de MT, deberías programar tu script para recortar el título a las 5 primeras palabras antes de añadirlo a la tabla.

Una forma alternativa de recoger la información podría ser añadir una linea a un fichero de texto (aunque creo que sería difícil revisarlo si recibes un montón de pings).

Paso 3: Mostrar tus TrackBacks
Ahora ya estás mandando y recibiendo TB pings. Pero cómo puedes mostrar los TBs que has recibido?

En la página inicial de mi blog y los archivos mensuales, decidí crear un link debado de cada post que dijera "TrackBacks" o "X TrackBacks" (si hay trackbacks registrados para ese post.).

En la página que muestra un sólo post, muestro un listado de los TBs que he recibido si hay alguno que coincida con su ID en la tabla "trackback".

De nuevo, cada uno guarda la información de su blog de manera diferente; en mi caso, se trata simplemente de hacer un query a la base de datos para ver cuántos registros en la tabla "trackback" coinciden en el campo entry_id con el id del post en cuestión.

Paso 4: Permitir a tu página generar TrackBack Ping
El último paso es comunicar la TB ping URL a tus lectores, para que puedan usarla para pinguear (NT: ;P) a tus posts.

La forma más sencilla de conseguilo es proporcionar la TB URL después de cada post. Yo lo he hecho así, depués de cada post he añadido el texto "URL para hacer trackback a este post". Si alguien quiere enlazarlo, puede copiar y pegar esa URL.

Movable Type, el Gestor de Contenidos que introdujo el concepto de los TrackBacks, tiene una característica especial en su pop-up "añadir post" para encontrar automáticamente las TB URL de una página determinada. Si quisiera activar esa detección automática para mi página, debería añadir el siguiente código en la página, después de cada post:

xmlns:dc="http://purl.org/dc/elements/1.1/">
dc:title="Title of my blog entry"
dc:identifier="Permalink URL to this blog entry"
dc:creator="The name of my weblog"
dc:date="Date of the entry" />

Conclusion
Este tutorial es una simplificación de lo que envuelve a la implementación de un sistema de TrackBack 'casero'. Básicamente, sólo he intentado compartir la escructura de los TB pings y las variables implicadas (tuve que investigar en el código de Movable Type para descubrirlas). Por favor, avísame si es necesario rectificar alguna cosa en este tutorial.

Conclusión del Traductor (;DD)
Bueno, después de todo esto... sabrías por ejemplo cómo construir la TB URL para este post con los datos de tu blog? Por que si no... maldita la gracia! Vamos a ver: el id de este post, como ves arriba, es el 54, así que partimos de que si, como he dicho antes, la TB URL principal de mi blog es /tb/id=X , la TB URL para este post en concreto sería:

/tb/?id=54&blog_name=tu+blog+aqui&url=http://www.tublog.com/tupost.php
&title=el+titulo+de+tu+post&excerpt=un+pequenyo+extracto+de+tu+post


Fíjate cómo especificamos el valor de las variables empezando después del ?, poniendo el nombre de la variable, después "=", el valor y un símbolo "&" entre variable y variable (si estás habituado a trabajar trabajar con formularios, a tratar con el paso de variables en js, o a trabajar en php, asp... cualquier lenguaje web, esto lo tienes controlao). Siempre tienes que tener en cuenta, recuérdalo, que debes codificar para url todo lo que metas ahí, los espacios, los caracteres especiales...

Y qué haces con esa dirección? Pues debes abrirla para que se ejecute, aunque no se trata de copiar y pegar en el navegador (funcionaría) si no de hacerlo de manera automática, más elegante. En el formulario que uses para postear, añades un nuevo campo donde pegarás eso cada vez que quieras hacer trackback a un post. Cuando el form procese los datos, también deberá 'abrir' esa URL, como decíamos antes. En PHP sería con . Así yo, en este caso, recibiría el ping.

Ahora para recibirlos tu: Como la explicación de arriba es muy clara y sencilla, te pongo un ejemplo de script en php que procesaría los pings.

//enviamos la cabecera para que el navegador sepa que es XML

header ('Content-Type:text/xml');

//si no se han pasado "url" e "id", envia error

if ((!$url)||(!$id)) {
$resultado='

1
You must include a URL and ID
';

//si el ping es correcto, devuelve mensaje ok e introduce los datos en la BD
}else{
include("../includes/conexion.php");

$sql="INSERT INTO blog_trackback (POST_ID,URL,TITULO,CONTENIDO,N_BLOG,FECHA) VALUES ('$id','$url','$title','$excerpt','$blog_name',NOW());";
mysql_query($sql,$link);
$resultado='

0
';
}

//muestra el XML en pantalla
echo $resultado;
?>

y creo que poco más te puedo contar si después de esto seguís teniendo alguna duda, podéis escribirme a obokaman@obokaman.com e intentaré contestaros ;D.

Texto original por: Matt Kingston - Documento original aquí
Traducción y comentarios en castellano por : obokaman

Espero que te haya sido de ayuda. Hasta la próxima rallada! ;D

Mensajes relacionados

Comentarios

Dies^Irae Dies^Irae
Cony, ni puta idea de que hablas, pero trabajo te ha tenio q costar por cojones. Ahora mismo no, pero igual algun dia me sirve ese tiempo q has dedicao a ello, y eso siempre es de agradecer. Un saludo :-)
obokaman obokaman
Na, ha sido una traducción un poco al estilo google, a saco paco. ;) El curro se lo debió pegar el que lo escribió. Si alguno consigue implementarlo gracias a las explicaciones, pues mira, yo que me llevaré una alegría. Para preguntar lo que queráis, ya sabéis dónde encontrarme. :) Hasta pronto. Un abrazo Dies!
Cual es la diferencia entre permalink y trackback?
Un permalink es una URL permanente a un artículo o un mensaje en una web. En este caso el permalink a este mensaje sería "http://www.obokaman.com/mensaje/54#1111". En cambio, un trackback es una URL que permite "avisar" a la web de que se ha escrito un mensaje que hace referencia a alguno de sus contenidos. En este caso concreto la URL de trackback a este post sería "http://www.obokaman.com/mensaje/54/trackback/".
Un permalink es un enlace directo a un mensaje (por ejemplo, el permalink a este post es http://www.obokaman.com/mensaje/54), el trackback es un sistema para avisar a un determinado blog de que has hecho un enlace a un post determinado. P.e. la url de trackback para este post es http://www.obokaman.com/mensaje/54/trackback/
Adolfo Adolfo

Buenas,

 he usado tu (traducción del) manual de TB para implementar el sistema en un blog de fabricación casera y me surge un problema. Haciendo TB ping desde un movabletype todo va bien mientras no reciba el campo excerpt. Si intento leerlo y añadirlo a mi tabla me falla el insert. Tiene alguien alguna idea de qué puede estar pasando? Con otros campos de texto, como blog_name o title, no tengo problema.

 P.D: uso ASP y SQL Server.

Que gañán soy! Me respondo a mi mismo: el campo de la base de datos era demasiado pequeño. Era para cosas del trabajo, pero en breve lo colocaré en mi weblog personal.

 Niños, no repitan esto en sus casas :)

P.D: gracias por la traducción, que no lo había dicho. Gañán y maleducado. Que ejemplo!

Deja tu comentario

Deja tu Comentario
Necesitas tener javascript activado para poder dejar comentarios

Identifícate en OboLog, o crea tu blog gratis si aún no estás registrado.

De esta forma, además, podrás mostrar tu imagen en los comentarios y no tendrás que rellenar tus datos cada vez.

Sobre esta anotación

obokaman

obokaman escribió esta anotación hace 5 años. En ella habla sobre Pensamientos.

7 personas han dejado ya sus comentarios.

Tú también puedes dejar el tuyo.

Temas relacionados

Login

Comentarios

Campaña contra el abandono de animales (Anónimo)
me parese que no es muy bueno abandonar animales...(14 may)
Guiños humorísticos en CSSEdit 2 (raul)
gilipollas eso es lo que sois  vais a llorar...(07 may)
Guiños humorísticos en CSSEdit 2 (Anónimo)
DDDDDDDDDDDDDDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD...(05 may)
Para triunfar hay que renunciar a la vida personal (Duhamel)
Yo creo que el éxito es muy relativo y pienso nadie que renuncie a su vida personal es un ...(03 may)
Realidad aumentada desde Android (obokaman)
Jajaja... pues no, no son amigos míos, pero sí que es verdad que hacen cara de nece...(02 may)

Más comentados

Disco duro para tu ps2 (500)
Conectar un disco duro a tu Playstation 2, hacer copias de seguridad de tus juegos a ese disco ...
Esa bonita canción entre anuncio y anuncio (308)
Se llaman Múm y la canción se titula Green Grass of Tunnel.
Descripción y fuentes del upload PHP + AJAX con barra de progreso (121)
Código fuente y pequeña descripción de la implementación para conseguir un upload de archivos con PHP & Ajax
Català - Valencià (94)
Sobre les discusions que genera la denominació de la nostra llengua.
Audio en tus Posts II (87)
Pequeño tutorial acerca de cómo implementar el reproductor que ayer mismo presentaba en obokaman.com

Suscripción

Suscríbete al Feed RSS XML

También puedes suscribirte directamente con alguno de los siguientes enlaces:

  • Suscríbete en Bloglines
  • Suscríbete en Google