763e06c127
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.0 KiB
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. |
|
|
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.orgeste accesible. En fallo de red o JSON corrupto devuelve{"status": "error", "error": "..."}y NO lanza — el caller DEBE comprobarstatusantes de usar el resultado. - Fallback v3 -> v2. Si no pasas
url, intenta v3 y luego v2. Si pasasurlexplicito, solo se intenta esa (sin fallback). policyUrlderivado. En GVL v3 los vendors NO tienen un campopolicyUrldirecto; la URL de privacidad vive enurls[].privacy(lista por idioma). La funcion la deriva tolerando ambos formatos (v2/v3) y devuelve""si no hay.dataCategoriespuede faltar en versiones antiguas (v2). Se tolera la ausencia:n_dataCategoriessera 0 y el mapa estara vacio.langno 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.