Ingresa el nombre de usuario (handle) del blog de Blogspot a continuación y presiona "Verificar Blog" para obtener su información. Los resultados se mostrarán en la consola de abajo.
Para obtener la lista de seguidores:
- — Toca este botón para copiar el script.
- Pégalo en la consola del navegador (F12) en la página de seguidores del blog.
- — Usa este botón para abrir la página de seguidores (después de una verificación exitosa).
const seguidores = document.querySelectorAll('.mODBC .ngOPAd');
const listaSeguidores = [];
// Extraer el ID del blog y el handle del blog de la URL canónica
const canonicalLink = document.querySelector('link[rel="canonical"]');
let blogId = '';
let blogHandle = 'seguidores'; // Valor por defecto si no se encuentra el handle
if (canonicalLink) {
const canonicalUrl = canonicalLink.href;
// Extraer el blog ID (último número en la URL)
const blogIdMatch = canonicalUrl.match(/\/(\d+)$/);
if (blogIdMatch) {
blogId = blogIdMatch[1];
}
// Extraer el handle del blog (ej. "soymarcosba" de "http://soymarcosba.blogspot.com/")
// Se busca la URL dentro de window.WIZ_global_data o de AF_initDataRequests para mayor robustez
let blogUrlInjected = '';
try {
// Intentar obtener de window.WIZ_global_data.y2FhP (si está presente y es una URL)
if (window.WIZ_global_data && window.WIZ_global_data.y2FhP) {
// La propiedad 'y2FhP' en el HTML proporcionado es "prod", no una URL.
// Se buscará en AF_initDataRequests.
}
} catch (e) {
console.warn("Could not find blog URL in WIZ_global_data:", e);
}
// Buscar en AF_initDataRequests si la URL no se encontró en WIZ_global_data
if (!blogUrlInjected && window.AF_initDataKeys && window.AF_dataServiceRequests) {
for (const key in window.AF_dataServiceRequests) {
if (window.AF_dataServiceRequests[key].request && typeof window.AF_dataServiceRequests[key].request[1] === 'string' && window.AF_dataServiceRequests[key].request[1].includes('blogspot.com')) {
blogUrlInjected = window.AF_dataServiceRequests[key].request[1];
break;
} else if (window.AF_dataServiceRequests[key].request && typeof window.AF_dataServiceRequests[key].request[0] === 'string' && window.AF_dataServiceRequests[key].request[0].includes('blogspot.com')) {
blogUrlInjected = window.AF_dataServiceRequests[key].request[0];
break;
}
}
}
if (blogUrlInjected) {
const url = new URL(blogUrlInjected);
// Eliminar ".blogspot.com" y dejar solo el subdominio
blogHandle = url.hostname.split('.')[0];
}
}
seguidores.forEach(div => {
const id = div.getAttribute('data-follower-id');
const img = div.querySelector('img');
const nombre = img?.getAttribute('alt') || '';
const urlImagen = img?.getAttribute('src') || '';
// Construir la URL del perfil
const urlPerfil = blogId && id ? `https://www.blogger.com/follower/view/${id}/${blogId}` : '';
listaSeguidores.push({ id, nombre, urlImagen, urlPerfil });
});
console.log('Total de Seguidores:', listaSeguidores.length);
console.log('Detalle de Seguidores:', listaSeguidores);
// Convertir a JSON con indentado
const json = JSON.stringify(listaSeguidores, null, 2);
// Crear el nombre del archivo con el handle del blog
const filename = `${blogHandle}-seguidores.json`;
// Crear archivo y disparar descarga
const blob = new Blob([json], { type: 'application/json' });
const enlace = document.createElement('a');
enlace.href = URL.createObjectURL(blob);
enlace.download = filename;
enlace.click();
console.log(`Archivo "${filename}" creado y descargado.`);