Files
fn_registry/python/functions/cybersecurity/fetch_iab_gvl.md
T
egutierrez 763e06c127 feat(browser): auto-commit con 178 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-20 18:22:23 +02:00

4.0 KiB

name, kind, lang, domain, version, purity, signature, description, tags, params, output, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags params output uses_functions uses_types returns returns_optional error_type imports tested tests test_file_path file_path
fetch_iab_gvl function py cybersecurity 1.0.0 impure def fetch_iab_gvl(out_path: str = "", url: str = "", lang: str = "") -> dict Descarga y parsea la Global Vendor List (GVL) de IAB Europe TCF: el catalogo maestro de data brokers (vendors) con sus propositos de tratamiento, intereses legitimos, special purposes, features y categorias de datos. Recon de privacidad/tracking.
consent
tcf
gvl
iab
privacy
data-brokers
vendor-list
recon
cmp
name desc
out_path Ruta de archivo donde guardar el JSON crudo descargado. Si vacio no guarda nada. Crea los directorios padre si no existen.
name desc
url Endpoint de la GVL. Si vacio usa el endpoint TCF v3.2 por defecto (vendor-list.consensu.org/v3/vendor-list.json) y, si falla, hace fallback al v2.
name desc
lang Codigo de idioma ISO opcional (ej. es). NO cambia el endpoint principal: las traducciones de propositos viven en endpoints aparte (purposes-<lang>.json). Hoy solo se acepta el parametro; no se descargan traducciones.
dict resumen de la GVL. En exito status=ok con versiones (gvlSpecificationVersion, vendorListVersion, tcfPolicyVersion), lastUpdated, contadores (n_vendors, n_purposes, n_specialPurposes, n_features, n_dataCategories) y los mapas vendors / purposes / dataCategories indexados por id (string). En fallo de red o parseo status=error con el mensaje; nunca lanza excepcion.
false error_py_core
false
python/functions/cybersecurity/fetch_iab_gvl.py

Ejemplo

import sys, os
sys.path.insert(0, os.path.join("python", "functions"))
from cybersecurity.fetch_iab_gvl import fetch_iab_gvl

# Descarga real del endpoint v3 (fallback automatico a v2 si falla) y guarda
# el JSON crudo para inspeccion posterior.
gvl = fetch_iab_gvl(out_path="/tmp/gvl.json")
print(gvl["status"])                 # ok
print(gvl["vendorListVersion"])      # ej. 163
print(gvl["n_vendors"])              # > 1000
# Mirar un vendor concreto (Google = id 755 en TCF v3)
print(gvl["vendors"].get("755", {}).get("name"))

Lanzable directo desde la raiz del registry:

python/.venv/bin/python3 python/functions/cybersecurity/fetch_iab_gvl.py /tmp/gvl.json

Cuando usarla

Usala cuando hagas recon de privacidad/tracking de un sitio web y necesites mapear los vendorId que aparecen en una cookie de consentimiento (TC String / __tcfapi) a nombres reales de empresas, sus propositos de tratamiento y sus politicas de privacidad. Es el primer paso para auditar quien recibe los datos del usuario via un CMP que implementa el IAB Europe TCF. Tambien para construir un dataset local de data brokers (los vendors) y sus declaraciones de datos.

Gotchas

  • Impura, hace HTTP. Depende de que vendor-list.consensu.org este accesible. En fallo de red o JSON corrupto devuelve {"status": "error", "error": "..."} y NO lanza — el caller DEBE comprobar status antes de usar el resultado.
  • Fallback v3 -> v2. Si no pasas url, intenta v3 y luego v2. Si pasas url explicito, solo se intenta esa (sin fallback).
  • policyUrl derivado. En GVL v3 los vendors NO tienen un campo policyUrl directo; la URL de privacidad vive en urls[].privacy (lista por idioma). La funcion la deriva tolerando ambos formatos (v2/v3) y devuelve "" si no hay.
  • dataCategories puede faltar en versiones antiguas (v2). Se tolera la ausencia: n_dataCategories sera 0 y el mapa estara vacio.
  • lang no descarga traducciones. El parametro existe para la firma futura, pero hoy el resumen siempre viene del endpoint principal (textos en ingles). Las traducciones de propositos estan en endpoints separados (.../purposes-es.json) que esta funcion no consulta todavia.
  • Payload grande (~varios MB, >1000 vendors). El dict resumido recorta cada vendor a los campos utiles, pero sigue siendo grande: no lo imprimas entero.