Las cosas del querer de @Blogger: solución al fallo de su Feed en siteMaps

Cómo solucionar el fallo del RSS del feed de Blogger en su uso para generar el siteMap del Blog.

Las cosas del querer de @Blogger: solución al fallo de su Feed en siteMaps

Por Kseso ✎ 20
Las cosas del querer de Blogger: fallo del feed en sitemaps y solución

Últimamente los usuarios de la plataforma de blogs de Blogger no ganamos para sustos.

Los chicos que están tras el CMS de Blogspot en su afán de introducir mejoras (quiero suponer que es por esto) no hacen más que depararnos sorpresas y no todas hacen gracia. Pero sorpresivas sí que lo son. Como niño o gato que se esconden y al pasar... ¡UUUUUH!

Una de estas últimas ha sido el feed del blog. Comenzó a mostrarse inestable y en algún momento pasó a ser insufrible.

Y su comportamiento afectaba a una amplia variedad de funciones, widgets y realizaciones que lo tienen como base.

En los foros oficiales de Blogger podrás encontrar referencias y consultas a ello. También con posterioridad comentarios y afirmaciones demasiado optimistas de que ya todo volvía funcionar con normalidad.

Límites del feed

Tradicionalmente los feed RSS tienen una serie de limitaciones que atañen a su peso y número de ítems. Dependiendo de qué servicio se use su peso puede estar limitado a 512k o 1024k y el máximo de ítems limitado a 500.

Es por esta limitación por lo que seguramente habrás visto y hasta es posible que uses ciertos parámetros en la llamada que hagas a tu feed. start-index= y max-results= son de los más utilizados y seguro que hasta los empleas al indicar tu siteMap a Google, por ejemplo.

... src='/feeds/posts/default?redirect=false&start-index=1&max-results=150' /> ... src='/feeds/posts/default?redirect=false&start-index=151&max-results=150' />

siteMaps, su colapso y arreglo

Para construir el siteMap del blog inicialmente utilizaba una realización basada en los "pipes de Yahoo!. Pero este año dejó primero de dar soporte y finalmente quedó inaccesible.

Así que me tocó buscar una alternativa.

De entre las que encontré me quedé con una basada en un script del que no pude localizar su autor original y primigenio. Esas cosas que tiene internet. Pero este script sí se que fue modificado por José M. Acuña [aka @jmacuna73] y lo tienes disponible en su blog

Básicamente consiste en unas opciones de configuración, una llamada al script que hace posible el siteMap y la llamada a tu feed para obtener los ítems de tu blog. Estilos aparte.

<script> /* OPCIONES CONFIGURACIÓN */ </script> <script> /* SCRIPT QUE MONTA EL SITEMAP */ </script> /* LLAMADA AL FEED DEL BLOG */ <script src="/feeds/posts/default?max-results=500&alt=json-in-script&callback=loadtoc" />

Como no me gusta depender de recursos alojados fuera, controlados por terceros que pudieran desaparecer y que además aumentan las peticiones de la página (con lo que ello conlleva) decidí poner el script que genera el siteMap en la misma página donde lo monto.

Además de ello necesitaba alterar un poco el marcado html generado para adaptarlo a mis necesidades.

Y aquí confluyen los problemas de Blogger con su RSS Feed y los quebrantos en el siteMap. Con independencia que utilices el script de @jmacuna73, otro parecido o uno totalmente distinto.

Primero no generaba el siteMap, después fue bajando el número de ítems (posts) referenciados y finalmente quedó en 150 como máximo.

Tras unas cuantas pruebas y otros tantos errores me fue imposible generar el siteMap conteniendo los enlaces a todos los más de 500 artículos que hay en el blog.

No pude lograrlo de forma automática utilizando sólo los scripts. Si repetía más de una vez el script que llama al feed del blog variando el valor en el parámetro start-index= manteniendo constante max-results=150 obtenía un número mayor de ítems porque repetía aleatoriamente unos cuantos de ellos. Terminaba con una relación de más de 600 ó 700 cuando sólo son poco más de 500. Con independencia del máximo de resultados que indicase (50, ó 100, ó 150 o incluso mayor).

Lo más que pude lograr fue obtener todos con el uso sucesivo de los parámetros start-index= y max-results=, copiar los enlaces generados cada vez e incluirlos como una lista en la página.

La solucción funcional

Y ahí quedó durante unos días mi fracaso hasta que en una de mis esporádicas visitas al foro oficial de Blogger me topé con una petición de ayuda de un usuario de este CMS, Jose Mª Mondejar, para el siteMap de su blog.

Le compartí mi experiencia y solucción tan poco elegante y efectiva por si le era de utilidad y ahí creí terminada la historia.

Sin embargo Jose Mª sí mantenía el script alojado fuera de la página donde genera su siteMap. Y esto se reveló como un dato crucial.

A él se le ocurrió una prueba a mayores que yo no había hecho (ni pensado) y fue llamar también al script que monta el siteMap tantas veces como al que captura los ítems del siteMap:

/* Generamos los ítems del 1º al 150º */ <script src="//ruta/script/crea/sitemap.js" /> <script src="http:/feeds/posts/default?start-index=1&max-results=150&alt=json-in-script&callback=loadtoc" /> /* Generamos los ítems del 151º al 300º */ <script src="//ruta/script/crea/sitemap.js" /> <script src="/feeds/posts/default?start-index=151&max-results=150&alt=json-in-script&callback=loadtoc" /> /* Generamos los siguientes 150 ítems */ <script src="//ruta/script/crea/sitemap.js" /> <script src="/feeds/posts/default?start-index=301&max-results=150&alt=json-in-script&callback=loadtoc" /> /* ASÍ TANTAS VECES COMO SEA NECESARIO */

Y así es como lo que comenzó siendo un "yo intento ayudarte" terminó convertido en "fui yo el ayudado". Gracias. Cosas que tiene el compartir ;-)

Y si este post ha de tener un final, que sea las palabras del propio Jose Mª Mondejar:

No se si está bien hecho, pero... ¡FUNCIONA...!

Ramajero Argonauta, Enredique Amanuense de CSS.
#impoCSSible inside
Dicen que, en español, EsCss es el mejor blog de CSS. Posíblemente exageren.
@Kseso EsCss Don Kseso Kseso

Comentarios: 20

  1. Ehm... y qué ondas con el https://escss.blogspot.com/sitemap.xml

    ResponderEliminar
    Respuestas
    1. Eso mismo digo yo ¿qué le pasa?
      ¿No lo ves o no le diste tiempo?

      Eliminar
    2. Por leer solo el título y no el contenido, comenté una tontería.

      Justo hoy pude darme cuenta que mi "Archivo de posts" estaba incompleto. Ya tenía lo de repetir solo cierta parte del script por cada "500" (solo resetear valores como numberfeed de mi script), ahora veo que hay q hacerlo cada 150.

      Gracias :P

      Eliminar
  2. Muchas gracias por incluirme en esta entrada, pero repito, yo de esto no entiendo nada, solamente tuve suerte al darle vueltas al código que tu me enviaste. El verdadero merito es tuyo, primero por ayudarme, y segundo por no dejarme tirado despues de contestar.
    Quizás tenga más problemas próximamente.
    Un saludo.

    ResponderEliminar
    Respuestas
    1. Bueno, como ya dije en Twitter:
      Así, si hay reclamaciones... ya sabéis quién será el maestro armero de esta historia xD =P

      Un saludo, Jose Mª

      Eliminar
  3. Al final entre todos conseguimos hacerlo funcionar de forma correcta y me alegro mucho de que hayáis dado con una solución definitiva.
    Muchas gracias por las menciones :))

    Un abrazo!!

    ResponderEliminar
    Respuestas
    1. Vete colocándote también el cartel de Maestro Armero, Jose Mª

      Un salduo

      Eliminar
    2. jajajjaja, lo que haga falta ;)

      Eliminar
    3. Buenas tardes...soy un poco torpe y no entiendo como funciona el script. Lo he puesto tal cual esta escrito y no sale nada. He abierto una entrada nueva en mi blog y pongo la primera linea del script.
      No salen los primeros 150 resultados....tengo que poner mi url del blog en el script ? alguien es tan amable de explicarmelo como a un niño ?

      Un saludo y gracias !

      Eliminar
    4. Hola Oscar
      Lo que tienes que hacer es poner, en la página donde quieras que se genere el sitemap, lo siguiente:

      Lo primero el script con las opciones de configuración;
      Y a continuación lo que indico en el código nº 3 de este post:

      [code]
      /* Generamos los ítems del 1º al 150º */
      <script src="//ruta/script/crea/sitemap.js" />
      <script src="http:/feeds/posts/default?star-index=1&max-results=150&alt=json-in-script&callback=loadtoc" />

      /* Generamos los ítems del 151º al 300º */
      <script src="//ruta/script/crea/sitemap.js" />
      <script src="/feeds/posts/default?star-index=151&max-results=150&alt=json-in-script&callback=loadtoc" />

      /* Generamos los siguientes 150 ítems */
      <script src="//ruta/script/crea/sitemap.js" />
      <script src="/feeds/posts/default?star-index=301&max-results=150&alt=json-in-script&callback=loadtoc" />

      /* ASÍ TANTAS VECES COMO SEA NECESARIO */
      [/code]

      Sustituyendo el texto //ruta/script/crea/sitemap.js por la ruta o url donde tengas alojado el script de José Mª

      La ruta al script del feed:
      /feeds/posts/default
      no sería necesario modificarla si la url de tu blog es de blogger (.blogspot.com). Si has cambiado a otro feed o tienes una dirección propia cámbiala por la oportuna y correcta.

      Un saludo

      Eliminar
    5. Buenos días y muchas gracias por tu solución y respuesta. Dicho esto, no sé si he cometido algún error, pero solo se reflejan 150 resultados (entradas del blog) esos mismos 150 resultados, se repiten...me explico mejor...tengo unas 650 entradas en el blog, al colocar el script, sale el número de entradas (650) pero realmente son las mismas 150 entradas repetidas hasta alcanzar el numero total de entradas reales que tengo (650)...seguramente he echo algo mal, pero no logro encontrar el fallo.

      dejo el link de la entrada del script ( http://www.clasicofilm.com/2016/01/prueba_41.html )

      Eliminar
    6. Así es como tengo puesto el script :

      https://dl.dropboxusercontent.com/u/6104326/script%20prueva.txt

      Eliminar
    7. Eso se debe a un error tipográfico en el código: no es star-index, el parámetro correcto es start-index.

      Eliminar
    8. Ahí tú, Jorge tan atento y perspicaz.

      ¡Qué error más tonto agravado además por el copy&paste de una parte a otra.
      Gracias Jorge y disculpa el quebranto que haya podido causarte, Oscar.

      Un saludo

      Eliminar
  4. Hola, yo tengo el índice por etiquetas. Al modificar el script con vuestras instrucciones, me hace dos índices: uno detrás de otro. No sé si me explico bien. Me pone las etiquetas por orden alfabético con las entradas de cada etiqueta de las últimas 150 entradas; y a continuación vuelve a poner las etiquetas por orden alfabético con las siguientes entradas.
    ¿Alguna idea? Gracias!!

    ResponderEliminar
    Respuestas
    1. Por si sirve de ayuda, esto era lo que tenía antes, pero solo salían 150.
      script src="http://www.lacocinaderebeca.es/feeds/posts/default?max-results=9999&alt=json-in-script&callback=loadtoc" (faltan < y >, que si no, no me deja publicar).

      Eliminar
    2. Hola Rebeca
      En este hilo del foro oficial de Blogger ienes una explicación del porqué ocurre ese comportamiento y posibles soluciones.
      Tu caso (ordenar por etiquetas) lo encuentras detallado en mi primera intervención en él.

      Un saludo

      Eliminar
    3. Acabo de leerlo y al parecer no tiene solución. Menuda faena, porque mi blog, como el de Laura, es de cocina, y el recetario ordenado es fundamental. ¿Ideas? Mil gracias!!

      Eliminar
    4. Tras el toqueteo de los chicos del código de Blogger y si no pueden/quieren volver a permitir 500 posts o más en el parámetro max-results sólo queda que quien domine Js haga las modificaciones oportunas para obtener todos los grupos de 150 posts y después de obtenidos realizar una sóla ordenación por etiquetas.

      Con suerte Laura "incentiva" (guiño guiño codazo guiño guiño) a alguno de sus alumnos o algún otro sufridor de Blogger se pone a ello.

      Hasta entonces, si yo estuviese en tu caso sopesaría:
      1º: crear un site map por fecha sólo a efectos de eso, site map de cara a bots
      2º: de cara a los usuarios crearía un menú con cada una de las etiquetas más significativas con la tipo:
      [code]
      <ul>
      <li><a href='http://tublog.blogspot.com/search/label/carnes'>Carnes</a></li>
      <li><a href='http://tublog.blogspot.com/search/label/pescado'>Pescado</a></li>
      ...
      </ul>
      [/code]

      Un saludo

      Eliminar
    5. Hey Rebeca, me encantó el diseño minimalista de tu blog. Muy bueno, felicitaciones por el trabajo.

      Eliminar

EsCss RSS del Blog RSSS Comentarios Humans.txt ᛯ Diseno por Kseso SiteMap