Verificador de Blogs de Blogspot

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:

  1. — Toca este botón para copiar el script.
  2. Pégalo en la consola del navegador (F12) en la página de seguidores del blog.
  3. — 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.`);
    

Publicidad: porque el amor no paga el wifi