Skip to content

Instantly share code, notes, and snippets.

@ximosa
Created December 4, 2019 10:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ximosa/e1e9b0f72f8df58c074dd2c7b6473f98 to your computer and use it in GitHub Desktop.
Save ximosa/e1e9b0f72f8df58c074dd2c7b6473f98 to your computer and use it in GitHub Desktop.
Lector de feed completo. Blogger
<link href='https://fonts.googleapis.com/css?family=Abel' rel='stylesheet' type='text/css'>
<div id="total"></div>
<div class="loading"></div>
<div id="feed"></div>

Lector de feed completo. Blogger

JavaScript que va leyendo por tramos (máximo 150 entradas) un feed Blogger y muestra TODOS los datos que contiene sin límite de entradas.

A Pen by Oloman on CodePen.

License.

// Parámetros configurables
var vertotal = true; // Ver total entradas publicadas true/false
var total = $('#total'); // Nombre caja para total entradas publicadas
var cajasalida = $('#feed'); // Nombre caja para insertar posts
var web = 'https://althouse.blogspot.com'; // Evitar barra "/" al final
var soloetiquetax = ''; // Incluir nombre etiqueta. Vacío para todas
var postsxfeed = 150; // Tope entradas que admite el feed
var leermaximo = 2000; // Máximo de entradas a leer/mostrar
var verimagen = true; // Imagen true/false
var anchoimagen = 100; // Ancho/alto de la miniatura
var sinimagen = 'https://2.bp.blogspot.com/_0eC4K-qZ7AM/SEhilrttvvI/AAAAAAAADAo/h1birc8e7O0/s400/cooltext90744301.jpg'; // Miniatura por defecto
var vercontador = true; // Ver Ordinal de los posts mostrados
var verfecha = true; // Ver fecha true/false
var veretiquetas = true; // Ver las etiquetas true/false
var separadoreti = '- '; // Símbolo de separación etiquetas
var verautor = true; // Ver autor de la entrada
var vernumcom = true // Ver número comentarios
var vertitulo = true; // Ver título entrada true/false
var vertexto = true; // Ver sumario true/false
var maxcaracteres = 200; // Número caracteres por sumario
// Parte ejecución
//$.ajaxSetup({cache: false});
if (soloetiquetax != '') {
soloetiquetax = '/-/' + soloetiquetax;
}
var feed = web + '/feeds/posts/default' + soloetiquetax;
var contposts = -1;
// URL con subcarpeta 's' o 'w'
var reimg = /[\/=][sw][0123456789].+[\/o]/g;
// URL en Google Fotos tras cambio, termina en /sxxx/
var reimg2 = /\/s[012345679].+\/$/g;
$.getJSON(feed + '?alt=json&callback=?').done(function(data) {
var longfeed = data.feed.openSearch$totalResults.$t;
if (vertotal) {
$(total).append('Total entradas publicadas: ' + longfeed);
}
if (longfeed > leermaximo) {
longfeed = leermaximo;
$(total).append('. Mostrando ' + leermaximo);
} else {
$(total).append('. Mostrando ' + longfeed);
}
var peticiones = Math.ceil(longfeed / postsxfeed);
var ajax = [];
for (i = 0; i < peticiones; i++) {
if (peticiones === 1) {
ajax.push(leerfeeds(i), '');
ajax.push('');
} else {
ajax.push(leerfeeds(i));
}
}
function leerfeeds(id) {
var startindex = (i * postsxfeed) + 1;
var maxresults = postsxfeed;
if (i == (peticiones - 1)) {
maxresults = leermaximo - (postsxfeed * i);
}
var url = feed + '?orderby=published&start-index=' + startindex + '&max-results=' + maxresults + '&alt=json&callback=?';
return $.getJSON(url);
}
$.when.apply($, ajax).done(function(data) {
var obj = [];
for (var i = 0; i < arguments.length; i++) {
obj.push(arguments[i][0]);
}
for (i = 0; i < arguments.length; i++) {
contposts++;
$.each(
obj[i].feed.entry || [],
function(i, e) {
var salida = '<div class="itempost">';
var url = (e.link || []).pop().href;
if (verimagen) {
var thumbnail;
if (e.media$thumbnail) {
thumbnail = (e.media$thumbnail.url || '');
} else {
thumbnail = sinimagen;
}
thumbnail = thumbnail.replace(reimg, '/s' + anchoimagen + '-c/');
thumbnail = thumbnail.replace(reimg2, '=s' + anchoimagen);
salida += '<a class="itemimagen" href="' + url + '"><img src="' + thumbnail + '"/></a>';
}
if (vercontador) {
salida += '<div class="itemcontador">' + ((contposts * postsxfeed) + i + 1) + '</div>';
}
if (verfecha) {
var fecha = new Date(e.published.$t || Date.now());
fecha = (new Date(fecha)).toLocaleDateString('es-es', {
month: '2-digit',
day: '2-digit',
year: '2-digit'
});
salida += '<div class="itemfecha">' + fecha + '</div>';
}
if (verautor) {
var autor = (e.author[0].name.$t || '');
salida += '<div class="itemautor"><a href="' + e.author[0].uri.$t + '">' + autor + '</a><div class="itemautorimg"><a href="' + e.author[0].uri.$t + '"><img src="' + e.author[0].gd$image.src + '"/></a></div></div>';
}
if (vernumcom) {
var numcom = (e.thr$total.$t || '');
salida += '<div class="itemnumcom"><a href="' + url + '#comments">' + numcom + ' comentarios</a></div>';
}
if (veretiquetas) {
var etiquetas = [];
if (e.category) {
for (var k = 0; k < e.category.length; k++) {
etiquetas += '<a href="' + web + '/search/?q=label:' + e.category[k].term + '">' + e.category[k].term + '</a>';
if (k < e.category.length - 1) {
etiquetas += separadoreti;
}
}
} else {
etiquetas += 'Sin etiquetas';
}
salida += '<div class="itemetiquetas">' + etiquetas + '</div>';
}
if (vertitulo) {
var titulo = (e.title.$t || '');
salida += '<div class="itemtitulo"><a href="' + url + '">' + titulo + '</a></div>';
}
if (vertexto) {
var sumario;
if ('content' in e) {
sumario = e.content.$t;
var reghtml = /<\S[^>]*>/g;
sumario = sumario.replace(reghtml, '');
if (sumario.length > maxcaracteres) {
sumario = sumario.substring(0, maxcaracteres) + '...';
}
} else if ('summary' in e) {
sumario = e.summary.$t + '...';
}
salida += '<div class="itemsumario">' + sumario + '</div>';
}
salida += '</div>';
$('.loading').remove();
cajasalida.append(salida);
}
);
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
body {
font-family: Abel, sans-serif;
font-size: 16px;
font-weight: bold;
line-height: 18px;
min-height: 1000px;
background: #F6E7AE;
}
#total {
display: block;
font-size: 22px;
line-height: 24px;
margin-bottom: 10px;
padding: 10px;
border: 2px solid #000;
box-sizing: border-box;
text-align: center;
color: #eee;
background: #333;
}
.itempost {
display: block;
padding: 10px;
clear: both;
box-sizing: border-box;
overflow: hidden;
}
.itempost:nth-of-type(odd) {
background: #EFD689;
}
a.itemimagen {
float: left;
margin: 0 20px 0 0;
overflow: hidden;
}
.itemimagen img {
border: 1px solid #999;
box-sizing: border-box;
}
.itemcontador {
display: inline;
margin: 0 10px 0 0;
font-size: 80%;
}
.itemfecha {
display: inline;
margin: 0 10px 0 0;
font-size: 80%;
}
.itemautor {
position: relative;
display: inline;
margin: 0 10px 0 0;
font-size: 80%;
}
.itemautorimg {
display: none;
position: absolute;
top: 14px;
left: 0;
}
.itemautorimg img {
width: 32px;
height: 32px;
}
.itemautor:hover .itemautorimg {
display: block;
}
.itemnumcom {
display: inline;
margin: 0 10px 0 0;
font-size: 80%;
}
.itemetiquetas {
display: inline;
font-size: 80%;
}
.itemetiquetas a {
display: inline-block;
margin: 0 5px 0 0;
background: #eee;
padding: 0 5px;
box-sizing: border-box;
}
.itemautor a,
.itemnumcom a,
.itemetiquetas a {
color: #B38D1C;
text-decoration: none;
}
.itemnumcom a:hover {
text-decoration: underline;
}
.itemtitulo a {
display: block;
margin: 10px 0;
font-size: 20px;
color: #B38D1C;
text-decoration: none;
}
.itemsumario {}
/* Cargador CSS */
.loading {
display: block;
width: 80px;
height: 80px;
margin: 10px auto;
border-width: 30px;
border-radius: 50%;
-webkit-animation: spin 1s linear infinite;
animation: spin 1s linear infinite;
border-style: double;
border-color: #666 transparent;
}
.loading:before {
content: "CARGANDO";
font-weight: bold;
line-height: 80px;
color: #990000;
}
@-webkit-keyframes spin {
100% {
-webkit-transform: rotate(359deg);
}
}
@keyframes spin {
100% {
transform: rotate(359deg);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment