Bilibili API con Python: vía oficial, código abierto y pago por llamada, probadas
Tres formas de sacar datos de Bilibili con Python: la plataforma oficial, proyectos abiertos archivados o una API por llamada. Cadena real: 0,00278 USD.

El 11 de noviembre de 2026, entre las 00:14 y las 00:24 (hora de Singapur), ejecutamos tres veces una cadena completa de datos de Bilibili con Python y la librería requests. Cada cadena tenía cinco peticiones: búsqueda por palabra clave, detalle del vídeo, comentarios destacados, danmaku y subtítulos. Las 15 peticiones terminaron con HTTP 200, y cada cadena costó 0,00278 USD.
El hallazgo más útil es que el danmaku es una muestra, no el conjunto completo. Un vídeo de divulgación científica tenía 36 824 danmaku. Lo pedimos seis veces y obtuvimos solo 190 filas distintas, el 0,52 %. Las otras dos vías las revisamos con sus documentos de primera mano. La plataforma abierta de Bilibili solo admite personas jurídicas constituidas en China continental. Sus endpoints de datos solo leen los vídeos de los creadores que autorizan tu aplicación. Además, los dos proyectos comunitarios con más estrellas sobre la API de Bilibili se detuvieron tras cartas de abogados, el 28 de enero y el 6 de julio de 2026.
Este artículo está pensado para un lector concreto: un docente de chino como lengua extranjera, un investigador de estudios de Asia oriental o un analista de medios en España o América Latina que sabe algo de Python y quiere datos públicos de Bilibili. Bilibili es el gran sitio chino de vídeos largos sobre estudio, ciencia, videojuegos y animación. Su rasgo propio es el danmaku, que en español a veces se llama «comentarios flotantes». Los espectadores escriben frases cortas que cruzan la pantalla en el segundo exacto en que las enviaron. Cada línea queda atada a un momento del vídeo, así que el danmaku es un registro directo de dónde reacciona el público.
Nuestro ejemplo es la enseñanza en línea. Buscamos en Bilibili las palabras chinas para «curso abierto de álgebra lineal». Dos subidas de las clases MIT 18.06 Linear Algebra aparecieron entre los tres resultados más vistos, con 2 625 573 y 1 426 675 reproducciones. A un profesor o a un grupo de investigación de habla hispana le interesa saber cómo reacciona un público chino ante una clase así. Explicamos qué pide cada vía, qué devuelve y cuánto cuesta.

Resumen: qué vía le sirve a cada lector
Las tres vías atienden a públicos casi separados. La tabla compara lo que pide cada una, lo que puede devolver y su principal riesgo. Cada fila tiene una fuente o una prueba real más adelante.
| Aspecto | Plataforma abierta de Bilibili | Bibliotecas y apuntes de código abierto | API de datos de pago por llamada (probamos EveryInfra) |
|---|---|---|---|
| Quién puede entrar | Personas jurídicas constituidas en China continental, con licencia comercial y carta sellada | Cualquiera | Cualquiera con una clave de API |
| De quién son los datos | Vídeos y datos de cuenta de los creadores que autorizan tu aplicación | Lo que muestran las páginas públicas; algunas partes piden cookie de sesión | Vídeos públicos, comentarios destacados, danmaku, subtítulos, lista de tendencias |
| Búsqueda por palabra clave | No figura en el índice de la documentación | Sí, pero las firmas y controles cambian a menudo | bilibili/search, con cinco órdenes posibles |
| Danmaku | Solo mensajes de salas en directo, por conexión larga | Sí, con firmas de petición que hay que mantener | bilibili/danmaku, con el tiempo dentro del vídeo |
| Python | Ejemplos de firma solo en Go y C# | La mayoría de proyectos son Python | Cualquier lenguaje que envíe HTTP |
| Estado en 2026 | En funcionamiento | Dos proyectos populares se detuvieron tras cartas de abogados | 15 de 15 peticiones de prueba con HTTP 200 |
| Coste | Sin tarifa por llamada; el coste es la aprobación | Código gratis; el coste es el mantenimiento y el riesgo | 0,00278 USD por una cadena completa en nuestra prueba |
Nuestra lectura es esta. Si eres una agencia de medios o una empresa de servicios de marca en China que publica para creadores bajo contrato, la plataforma abierta es la única opción correcta. Puede escribir y puede leer datos privados de la cuenta, algo que ninguna otra vía hace. Si solo quieres descargar unos pocos vídeos públicos para una clase, basta con un descargador de línea de comandos. Pero puede dejar de funcionar en cualquier momento, y sus mantenedores también pueden dejarlo. Si buscas un flujo continuo de vídeos públicos, comentarios y danmaku sobre un tema para investigar, y no eres una empresa china, una API de pago por llamada es la vía que menos preparación exige. Las secciones siguientes dan las pruebas.
Vía 1: la plataforma abierta de Bilibili y lo que exige
Muchas guías describen «la API de Bilibili» como una API pública que cualquiera puede pedir. Los documentos de la propia plataforma no dicen eso. Su presentación de la plataforma indica que sirve a organizaciones de medios, a creadores que desarrollan software, a empresas de sectores verticales y a empresas de servicios de marca. La página principal de la documentación agrupa las funciones en seis áreas: consentimiento de cuenta, gestión de usuarios, gestión de vídeos, datos abiertos, gestión de artículos y emisiones en directo.
Los datos abiertos se describen como datos de usuario y de vídeo tras el consentimiento del usuario. La clave está en ese «tras el consentimiento». Obtienes los datos del creador que autorizó tu aplicación, no los de cualquier vídeo del sitio. Toda la documentación que leímos está en chino.
Admisión: una persona jurídica de China continental y una carta sellada
El 11 de noviembre de 2026, a las 00:31 (hora de Singapur), capturamos la sección de admisión de las normas de gestión de la plataforma abierta. El texto pone cuatro condiciones al desarrollador. Debe ser una persona jurídica constituida y existente conforme a la ley en China continental. Debe tener un buen historial y no figurar en las listas de operaciones comerciales anómalas ni de sujetos no fiables. Debe tener una cuenta de desarrollador de Bilibili y cumplir las demás condiciones que fije Bilibili.
Además, debe enviar una copia de su licencia comercial con al menos un mes más de vigencia, junto con una carta de compromiso con el sello de la empresa. Si los datos no coinciden con el formulario, Bilibili rechaza la solicitud. Esta regla deja fuera a los desarrolladores particulares, a las empresas de fuera de China continental y a los investigadores que solicitan a título personal.

La misma página limita el uso de los datos. El desarrollador no debe filtrar los datos de cuenta ni de vídeo de un creador vinculado. La página pone como ejemplos los archivos fuente, el número de subidas, el danmaku, y las veces que se comparte, comenta o marca «me gusta». Cuando un creador vinculado pide el borrado, el desarrollador debe borrar los datos y no puede guardar una copia anonimizada. Cuando el desarrollador se va o es expulsado, debe borrar o devolver los datos de usuario y de operación que obtuvo de la plataforma.
El acuerdo de servicio para desarrolladores define al creador vinculado como una cuenta de Bilibili que el desarrollador conecta a su servicio. El desarrollador debe tener plenos derechos de uso o una licencia de explotación legal sobre esa cuenta. En resumen, los datos de la plataforma abierta son para quienes trabajan para creadores. No son para quienes estudian los vídeos de otros.
Datos abiertos: solo los vídeos propios del creador que autoriza
Abrimos cada endpoint de datos de la documentación. El endpoint que devuelve datos de un solo vídeo tiene el ámbito ARC_DATA. La página indica que necesita tanto una solicitud de permiso como el consentimiento del usuario. El usuario autorizado debe ser el autor o coautor del vídeo. Devuelve nueve valores: título, hora de publicación, reproducciones, número de danmaku, número de comentarios, favoritos, monedas, veces compartido y «me gusta».
El endpoint de crecimiento de todos los vídeos devuelve el cambio de los últimos 30 días. El que devuelve los detalles de un vídeo tiene el ámbito ARC_BASE y también funciona solo con los vídeos propios del usuario autorizado. El de información pública básica del usuario devuelve solo apodo, avatar y un openid. La página explica que el openid es único por desarrollador y aplicación, para que las aplicaciones no sigan a un usuario entre servicios. La política de privacidad de la plataforma lo cuenta desde el lado del usuario: la plataforma comparte los datos de vídeo propios con el desarrollador vinculado, y el usuario puede retirar el consentimiento cuando quiera.
| Endpoint oficial | Ámbito | Consentimiento | Qué devuelve |
|---|---|---|---|
| Datos de un vídeo | ARC_DATA | Sí | Reproducciones, danmaku, comentarios, favoritos, monedas, compartidos y «me gusta» de un vídeo propio |
| Crecimiento de todos los vídeos | ARC_DATA | Sí | Cambio en 30 días de todos los vídeos del usuario |
| Detalles de un vídeo | ARC_BASE | Sí | Título, categoría, duración y estado de revisión de un vídeo propio |
| Información pública básica | USER_INFO | Sí | Apodo, avatar, openid |
| Conexión de mensajes de sala en directo | Plataforma abierta de directos | Del streamer | Danmaku, regalos y otros mensajes en tiempo real de la sala autorizada |
| Búsqueda por palabra clave, comentarios de cualquier vídeo, danmaku de vídeos | ninguno | ninguno | No figura en el índice de la documentación |
La última fila necesita una explicación. Leímos todos los grupos del índice lateral de la documentación. Son consentimiento de cuenta, gestión de usuarios, gestión de vídeos, gestión de artículos, datos abiertos, directos, eventos, atención al cliente, comercio, apoyo a creadores y cursos. No encontramos ningún endpoint que busque en todos los vídeos por palabra clave. Tampoco uno que lea los comentarios de cualquier vídeo ni el danmaku de un vídeo grabado. Es el índice tal como lo leímos el 11 de noviembre; la plataforma puede añadir endpoints, así que revisa la documentación vigente antes de elegir.
Firma y OAuth: llamar a la API oficial desde Python
Aun con la aprobación, el patrón de llamada no es el de una API REST corriente. La guía de OAuth 2.0 dice que primero te das de alta y registras una aplicación para obtener un client_id y un secreto. Luego un usuario da su consentimiento y cambias un código por un access_token. Cuando la aplicación pide un ámbito nuevo, los usuarios que ya habían aceptado deben aceptar otra vez. Cada refresh_token sirve una sola vez.
La guía de firma pide un conjunto de cabeceras que empiezan por x-bili-. Se ordenan, se unen en una cadena, se firman con HMAC-SHA256 y tu app_secret, y el resultado va en la cabecera Authorization. Si la marca de tiempo tiene más de 10 minutos, la plataforma descarta la petición. La guía trae código en Go y enlaza un repositorio de ejemplo en C#; no hay ejemplo en Python.
Abajo va nuestra versión en Python de la guía, solo con el módulo estándar hmac. No tenemos cuenta en la plataforma abierta, así que no la probamos contra una aplicación real. Tómala como ejemplo de configuración.
"""Firma de petición v2.0 de la plataforma abierta de Bilibili, reescrita a partir del documento oficial (no probada contra una app real)."""
import hashlib, hmac, json, time, uuid
def bili_headers(client_id: str, app_secret: str, access_token: str, body: dict | None) -> dict:
raw = json.dumps(body, separators=(",", ":")) if body else ""
signed = {
"x-bili-accesskeyid": client_id,
"x-bili-content-md5": hashlib.md5(raw.encode()).hexdigest(), # md5 de "" en GET
"x-bili-signature-method": "HMAC-SHA256",
"x-bili-signature-nonce": str(uuid.uuid4()),
"x-bili-signature-version": "2.0",
"x-bili-timestamp": str(int(time.time())), # menos de 10 minutos
}
to_sign = "\n".join(f"{k}:{signed[k]}" for k in sorted(signed))
sig = hmac.new(app_secret.encode(), to_sign.encode(), hashlib.sha256).hexdigest()
return {**signed, "Accept": "application/json", "Content-Type": "application/json",
"access-token": access_token, "Authorization": sig}La firma es la parte fácil. La barrera real viene antes: sin una persona jurídica de China continental y sin un creador que dé su consentimiento, todas las peticiones que firme este código van a fallar. La guía de firma da estos códigos de estado para los errores de firma.
| Código | Significado en la guía | Qué revisar primero |
|---|---|---|
| 4002 | Firma incorrecta | El orden de las cabeceras y el app_secret |
| 4003 | Petición caducada | La marca de tiempo, que debe tener menos de 10 minutos |
| 4004 | Petición repetida | El nonce, que debe ser nuevo en cada petición |
La excepción de los directos
La única función pública de la plataforma abierta que trata el danmaku está del lado de los directos. El protocolo de conexión larga de la plataforma abierta de directos explica que el cliente obtiene primero una dirección de servidor desde un endpoint de la aplicación. Después envía un paquete de autenticación por WebSocket y un latido cada 20 segundos. El servidor empuja mensajes como LIVE_OPEN_PLATFORM_DM. Los mensajes identifican al usuario con open_id, y la página marca el antiguo campo uid como de próxima retirada.
La biblioteca abierta blivedm lee el danmaku en directo desde Python. Su README dice que admite tanto la interfaz web como la plataforma abierta de directos, y su último cambio es del 15 de agosto de 2026. Esta vía sirve para funciones interactivas en tu propia sala. No resuelve el problema de este artículo: el danmaku de un vídeo grabado está atado a un segundo del vídeo, y no encontramos ningún endpoint que lo lea.
Vía 2: bibliotecas y apuntes de código abierto en GitHub
Si buscas «bilibili api python github» o «bilibili api collect», salen primero los mismos proyectos. El 11 de noviembre de 2026, a las 00:21 (hora de Singapur), consultamos la API pública de GitHub para siete proyectos habituales. Anotamos estrellas, último cambio, licencia y si estaban archivados, y luego leímos cada README. Esta sección solo recoge lo que dicen esas páginas públicas; no valoramos los proyectos.
| Proyecto | Estrellas | Último cambio | Archivado | Lo que dice el README al principio |
|---|---|---|---|---|
| SocialSisterYi/bilibili-API-collect | 20 123 | 30-01-2026 | Sí | Trabajo detenido y proyecto cerrado; carta de abogados por correo el 28 de enero de 2026 |
| Nemo2011/bilibili-api | 4155 | 06-07-2026 | Sí | Trabajo detenido y repositorio por cerrar; incluye un aviso del 6 de julio de 2026 |
| nilaoda/BBDown | 13 824 | 14-05-2026 | Sí | Archivado, sin mantenimiento |
| pskdje/bilibili-API-collect | 312 | 28-01-2026 | Sí | Copia de un colaborador, sincronizada hasta el 25 de enero de 2026 |
| Vespa314/bilibili-api | 1356 | 19-06-2022 | No | La descripción dice que ya no se mantiene |
| yt-dlp/yt-dlp | 206 667 | 04-11-2026 | No | Descargador general; Bilibili es uno de muchos sitios |
| NanmiCoder/MediaCrawler | 70 803 | 09-11-2026 | No | Recolector multiplataforma; el README marca todas las funciones de Bilibili como admitidas |
Dos cartas de abogados en 2026
Los datos clave están en las dos primeras filas. El README de bilibili-API-collect, una gran colección de apuntes sobre los endpoints web de Bilibili, contiene ahora una sola declaración. El 28 de enero de 2026, el mantenedor recibió por correo una carta de advertencia de un bufete que actuaba en nombre de Bilibili. La carta decía que el proyecto había reunido y ordenado endpoints no públicos, lógica de llamada, parámetros, controles de acceso y comprobaciones de seguridad. También decía que los había compartido con el público como documentos y ejemplos de código. El mantenedor detuvo el trabajo ese día y borró los documentos y el código fuente. Antes del borrado, un colaborador hizo una copia que se sincronizó hasta el 25 de enero de 2026 y que también está archivada.
El README de la biblioteca de Python bilibili-api empieza ahora con una declaración y un aviso de infracción de un bufete de Shanghái, fechado el 6 de julio de 2026. El aviso enumera cuatro tipos de acción. Los dos primeros son saltarse el inicio de sesión y el control de acceso, y saltarse los controles antibots y las firmas de petición. Los otros dos son tomar series y cursos de pago, y recopilar danmaku para averiguar la identidad real de los usuarios. El aviso pide detener el desarrollo, borrar o revertir el código y publicar una declaración. El repositorio declara que el trabajo se detiene ese día y que cerrará para siempre.
Su paquete en PyPI, bilibili-api-python, tuvo su última versión, la 17.4.2, el 19 de junio de 2026, y pide Python 3.10 o superior. Todavía se puede instalar, pero nadie lo va a arreglar. Así que la biblioteca que encabeza los resultados de «bilibili api python» es hoy una versión congelada.
Para el lector esto tiene dos efectos. Primero, los scripts basados en estos dos proyectos se romperán cuando Bilibili cambie un endpoint, y tendrás que arreglarlos tú. Segundo, muchos tutoriales enseñan justo las acciones que el aviso menciona, como saltarse firmas y controles antibots o averiguar quién envió un danmaku. Lee la sección «Cumplimiento y límites» antes de quedarte con ese código.
Firmas WBI, controles antibots y cookies de sesión
Los proyectos que siguen activos también corrigen su código de Bilibili con frecuencia. El extractor de Bilibili de yt-dlp imprime «Downloading wbi sign» antes de leer la página de un vídeo. Ese paso obtiene los parámetros de la firma WBI que usa la web, y la línea se ve en los registros que los usuarios pegan en las incidencias. La incidencia #17847, abierta el 17-10-2026, informa de un HTTP 567 en las direcciones de los archivos de vídeo. Un mantenedor no pudo reproducirlo desde su red, pero quien la abrió lo vio en varias IP de Polonia.
La incidencia #17879, del 21-10-2026, informa de que la herramienta solo encuentra un formato html. Un comentario dice que ese día una dirección de vídeo sin /en/ llevaba a una página 404. Las incidencias #17894 y #17890, ambas del 22-10-2026, informan de «Unable to extract initial state». En el hilo creen que es una detección de bots, porque el código de la página no trae los datos de estado inicial. El arreglo de la solicitud de cambios #17898, abierta ese mismo día, seguía sin fusionarse cuando lo comprobamos el 11-11-2026. El último commit al archivo del extractor de Bilibili es del 3 de julio.
MediaCrawler fusionó la solicitud #1000 el 05-11-2026, un día después de abrirla. Corrige cómo la herramienta lee las claves WBI de Bilibili. El código anterior las leía del localStorage del navegador; si la página o el contexto del navegador se cerraba, esa lectura lanzaba un error, se caía todo el lote y se perdían los datos sin guardar. La petición de respaldo, además, no llevaba cookie de sesión, así que el endpoint devolvía 412 o «no ha iniciado sesión» y la herramienta no obtenía una clave válida.
Esta sola solicitud muestra tres hechos: los endpoints web necesitan una firma WBI, las claves de firma salen de la página y la petición funciona mejor con una sesión iniciada. No enseñamos a saltarse estos controles ni lo aconsejamos. Los mencionamos para mostrar que el coste de un script propio no está en la primera versión. Está en el trabajo semanal de seguir los cambios del sitio.
El acuerdo de usuario y el robots.txt
A las 00:23 (hora de Singapur) leímos el archivo robots.txt del sitio principal de Bilibili. Para todos los agentes prohíbe /medialist/detail/, /index.html y ocho rutas de idioma, entre ellas /en/, /ja/ y /es/. Un grupo aparte cubre algunos bots de vista previa de enlaces. Las rutas de idioma encajan con el informe de yt-dlp según el cual /en/video/ abría mientras /video/ llevaba a una 404: el sitio parece estar cambiando sus direcciones de idioma.
Un robots.txt es una declaración para rastreadores, no un texto legal. El acuerdo de usuario de Bilibili, vigente desde el 7 de mayo de 2025, es más directo. La cláusula 5.6, punto 3, prohíbe obtener servicios, contenido o datos de la plataforma con robots, arañas, rastreadores u otro programa, script o software automático. La prohibición vale para ti y para quienes actúen por ti, salvo permiso previo por escrito. La cláusula 1.2 dice que el servicio es para uso no comercial de los usuarios. Estas dos cláusulas se aplican a todas las vías; las citamos para que decidas con la información completa.
Vía 3: una API de pago por llamada, con una cadena completa en Python
En la tercera vía, tú envías peticiones HTTP y pagas por llamada, sin mantener por tu cuenta firmas, controles antibots ni el análisis de las páginas. Probamos la API de datos de EveryInfra. Tiene ocho capacidades de Bilibili y nuestra cadena usa cinco. Son bilibili/search para la búsqueda, bilibili/video para el detalle y bilibili/comments para los comentarios destacados. Las dos últimas son bilibili/danmaku y bilibili/subtitles. También probamos bilibili/user_posts, bilibili/profile y bilibili/popular.
Los nombres, parámetros, precios y campos salen del catálogo gratuito, que leímos a las 00:13 (hora de Singapur). Las ocho capacidades tenían available=true. La lista de tendencias costaba 0,000806 USD por página y las otras siete, 0,000556 USD por llamada. La búsqueda devuelve 20 filas por defecto y hasta 50. Volvimos a leer el catálogo el 12-11-2026 (hora de Singapur): los subtítulos cuestan ahora 0,000792 USD por llamada y los otros siete precios no cambiaron. Con el precio nuevo, una cadena completa cuesta 0,003016 USD; los cobros de nuestras pruebas usan los precios del 11 de noviembre. La página de la API de datos de Bilibili da una vista general.
Este es el script que ejecutamos. Solo necesita requests y lee la clave de una variable de entorno. La búsqueda ordena por reproducciones. El script se queda con vídeos de 5 a 60 minutos, porque los resultados más largos suelen ser cursos completos de 30 horas o más. Después elige el vídeo con más danmaku y pide detalle, comentarios, danmaku y subtítulos. Guarda cada petición con su respuesta completa en un archivo JSON, para que puedas comprobar las cifras después. Si recibe un 429, espera 60 segundos y repite, porque nuestra clave de prueba admite 10 llamadas por minuto.
"""Cadena de Bilibili: search -> video -> comments -> danmaku -> subtitles."""
import json, os, sys, time
from pathlib import Path
import requests
API = "https://api.everyinfra.com/api/v1/social"
KEY = os.environ["EVERYINFRA_API_KEY"] # nunca escribas la clave en el código
SESSION = requests.Session()
SESSION.headers.update({"Authorization": f"Bearer {KEY}", "Content-Type": "application/json"})
def call(action, params, tag, name):
body = {"platform": "bilibili", "action": action, "params": params}
for attempt in range(4):
t0 = time.time()
r = SESSION.post(API, json=body, timeout=120)
dt = round(time.time() - t0, 2)
if r.status_code == 429: # límite de ritmo: espera y repite
time.sleep(60)
continue
break
data = r.json()
Path(tag).mkdir(exist_ok=True)
Path(tag, f"{name}.json").write_text(json.dumps(
{"elapsed_s": dt, "http_status": r.status_code, "request": body, "response": data},
ensure_ascii=False, indent=1))
print(name, r.status_code, dt, data.get("count"), (data.get("billing") or {}).get("charged_usd"))
return data
def rows_of(data):
rows = data.get("results") or []
return rows if isinstance(rows, list) else [rows]
def main(keyword, tag):
s = call("search", {"keyword": keyword, "sort": "most_viewed", "limit": 20}, tag, "1_search")
pool = [v for v in rows_of(s) if 300 <= (v.get("duration_sec") or 0) <= 3600] or rows_of(s)
url = max(pool, key=lambda v: v.get("danmaku_count") or 0)["url"]
call("video", {"url": url}, tag, "2_video")
call("comments", {"url": url, "limit": 10}, tag, "3_comments")
call("danmaku", {"url": url, "limit": 200}, tag, "4_danmaku")
call("subtitles", {"url": url}, tag, "5_subtitles")
if __name__ == "__main__":
main(sys.argv[1], sys.argv[2])Define EVERYINFRA_API_KEY en tu terminal y ejecuta python bili_chain.py "<palabra clave>" run1. Bilibili es un sitio en chino, así que las palabras clave en chino devuelven muchos más resultados que en inglés o en español. Tres detalles del código merecen una nota. Primero, requests.Session reutiliza conexiones: según la documentación de requests, las peticiones repetidas al mismo host reutilizan la conexión TCP. Usamos requests 2.34.2, que en PyPI pide Python 3.10 o superior.
Segundo, mantén timeout=120: en nuestra prueba, una llamada de detalle tardó 64,95 segundos. Tercero, filtra por duración antes de elegir el vídeo. En la primera prueba, los tres resultados más vistos duraban 117 379, 100 509 y 100 483 segundos. Eran cursos enteros de unas 30 horas, y con ellos cuesta atar danmaku y subtítulos a una sola lección. La tabla muestra los seis primeros resultados por reproducciones.
| Puesto por reproducciones | Reproducciones | Duración | Danmaku | Qué es la subida (título traducido) |
|---|---|---|---|---|
| 1 | 6 571 404 | 32:36:19 | 73 191 | Un curso completo de álgebra lineal para primer año y preparación de examen |
| 2 | 2 625 573 | 27:55:09 | 32 603 | Álgebra lineal del MIT, las 34 clases, con el libro de texto |
| 3 | 1 426 675 | 27:54:43 | 27 672 | MIT 18.06 Linear Algebra con subtítulos en chino e inglés |
| 4 | 1 288 251 | 3:38:53 | 3870 | Álgebra lineal en tres horas, con apuntes a mano |
| 5 | 1 156 495 | 33:44 | 2132 | Cálculo desde cero, lección 1 |
| 6 | 949 288 | 14:30:44 | 29 413 | Un libro de problemas para el examen de matemáticas, ecuaciones diferenciales |
Las mismas capacidades se pueden conectar a una herramienta de IA sin escribir código. Abajo va un ejemplo de configuración de MCP remoto; los nombres de campo cambian un poco entre clientes, y la clave vuelve a salir de una variable de entorno. Una vez conectado, la IA llama a la herramienta everyinfra_call_api con la misma plataforma, acción y parámetros. La página del servidor MCP explica cómo conectar cada cliente.
{
"mcpServers": {
"everyinfra": {
"type": "http",
"url": "https://api.everyinfra.com/mcp",
"headers": { "Authorization": "Bearer ${EVERYINFRA_API_KEY}" }
}
}
}Prueba real: tres palabras clave de tres campos
Elegimos palabras clave de tres campos para probar el mismo script con contenidos distintos. En chino, significaban «curso abierto de álgebra lineal» (educación), «divulgación sobre agujeros negros» (ciencia) y «técnicas de cultivo de cítricos» (agricultura). Las cadenas empezaron a las 00:14, 00:16 y 00:22 (hora de Singapur). «Fin» en la tabla es la hora en que respondió el paso de subtítulos.
| Prueba | Inicio a fin (hora de Singapur) | Campo | Vídeo elegido | Duración | Búsqueda | Danmaku | Subtítulos | Tiempo en serie | Cobro |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 00:14:39 a 00:15:28 | Educación | Clase de problemas de examen sobre determinantes | 54:49 | 20 filas | 100 filas | 983 líneas | 51,43 s | 0,00278 USD |
| 2 | 00:16:10 a 00:17:39 | Ciencia | «¿Qué fuerza tiene un agujero negro de un milímetro?» | 12:57 | 20 filas | 100 filas | 367 líneas | 91,54 s | 0,00278 USD |
| 3 | 00:22:41 a 00:24:20 | Agricultura | «La vida de una naranja», un documental agrícola | 6:15 | 20 filas | 19 filas | 1 línea | 100,26 s | 0,00278 USD |
Las 15 peticiones devolvieron HTTP 200. Cada llamada costó 0,000556 USD, cada cadena 0,00278 USD y las tres, 0,00834 USD. Antes de la prueba fijamos un objetivo: una mediana de 20 segundos o menos para los cinco pasos en serie. La mediana real fue de 91,54 segundos, muy lejos del objetivo. La causa fue el detalle del vídeo, que tardó 23,96, 64,95 y 37,45 segundos: el 46,6 %, el 71,0 % y el 37,4 % del tiempo en serie. La búsqueda y los comentarios tardaron menos de 2 segundos cada uno, y el danmaku entre 9,63 y 13,02 segundos.
En la prueba 3, los subtítulos tardaron 48,88 segundos, el único caso en que superaron al detalle. La lentitud del detalle no se corresponde con los flujos de audio y vídeo. La prueba 1 devolvió 6 flujos de vídeo y 3 de audio, con una calidad máxima de 480P, y fue la más rápida; la más lenta, la prueba 2, tenía solo 22 campos y ningún flujo. No sabemos la causa. Los flujos de la prueba 1 caducaban a las 02:15 (hora de Singapur) del 11 de noviembre, unas 2 horas después de la llamada. Si solo necesitas cifras, las filas de búsqueda ya traen reproducciones, «me gusta», comentarios, danmaku y favoritos, y puedes omitir el detalle.
La captura muestra lo que devuelve la API. Arriba, la petición de danmaku de la prueba 1 con dos de sus filas; abajo, la de subtítulos con sus dos primeras líneas. Dejamos solo dos filas, ocultamos el nombre del autor y quitamos el campo de saldo.

Las respuestas en bruto muestran otros resultados que quizá no esperas. Primero, el paso de comentarios devuelve comentarios destacados, ordenados por «me gusta». En la prueba 2, los primeros tenían 7825, 5544 y 2812 «me gusta», y 204, 504 y 46 respuestas. En la prueba 1, el primer comentario era del propio autor del vídeo y repetía la descripción.
Segundo, las filas de búsqueda tenían 19 o 20 campos, y ninguna de las 60 traía coin_count ni share_count. Coincide con la nota de campos del catálogo, así que las monedas se sacan del detalle. Tercero, los subtítulos del documental agrícola de la prueba 3 tenían el idioma «English» y una sola palabra de texto. Los tiempos venían como cadenas del tipo «00:00:01.560», mientras que en las pruebas 1 y 2 eran números de segundos. Ese vídeo tiene música e imágenes, pero no voz, y la llamada se cobró igualmente: 0,000556 USD. Un script que analice subtítulos debe comprobar antes el número de segments y el formato del tiempo.
La tabla recoge los primeros comentarios destacados de cada prueba, traducidos. Los «me gusta» y las respuestas son los que devolvió la API en el momento de la llamada.
| Prueba | «Me gusta» | Respuestas | Comentario destacado (traducido del chino) |
|---|---|---|---|
| 1 | 505 | 2 | Del autor del vídeo: practicad el libro de problemas paso a paso; a muchos les cuesta por falta de base |
| 1 | 239 | 2 | «La mayoría de los que se examinan en 2023 aún no ha empezado, ¿verdad?» |
| 1 | 195 | 4 | «¿Cómo se calcula un determinante de tres filas y cuatro columnas? No sé hacerlo.» |
| 2 | 7825 | 204 | «La próxima vez, ¿puedes mostrar un agujero negro de un nanómetro?» |
| 2 | 5544 | 504 | «¿Adónde van las cosas que caen en un agujero negro?» |
| 2 | 2812 | 46 | Una nota larga sobre cómo los vídeos del espacio le hacían sentir lo pequeña que es la Tierra |
| 3 | 54 | 3 | Un breve deseo de pronta recuperación |
| 3 | 39 | 6 | Una persona de Guangxi enumera con orgullo los cítricos de su región |
| 3 | 24 | 4 | Un apicultor cuenta que en abril lleva sus abejas a los naranjales del distrito de Zigui |
El tercer comentario destacado de la prueba 1 hace una pregunta que aparece cinco veces en el danmaku de ese vídeo, como verás en la sección de enseñanza. Una misma duda puede aparecer en los dos tipos de dato, así que conviene leerlos juntos.
Campos: qué devuelve cada paso
La tabla recoge los campos principales que devolvió cada paso en nuestras pruebas, contrastados con los response_fields del catálogo. Solo muestra los más útiles para el análisis; el catálogo tiene la lista completa.
| Capacidad | Campos por fila (medidos) | Campos habituales | Nota |
|---|---|---|---|
bilibili/search | 19 a 20 | id, url, title, view_count, like_count, comment_count, danmaku_count, favorite_count, duration_sec, posted_at, tags | Ninguna de 60 filas traía coin_count ni share_count |
bilibili/video | 22 o 26 | Los anteriores, más coin_count, share_count, video_streams, audio_streams, streams_expire_at | Los flujos caducan en unas 2 horas; las pruebas 2 y 3 no traían flujos y tenían 22 campos |
bilibili/comments | 10 | id, text, like_count, reply_count, posted_at | Comentarios destacados por «me gusta», con autor y enlace al perfil |
bilibili/danmaku | 10 | text, video_time, video_time_seconds, mode, color, pool, sent_at | Sin campo de remitente; en vídeos con mucho danmaku devuelve solo una parte |
bilibili/subtitles | 9 | language, text, segments (start, end, text), duration_seconds | Pruebas 1 y 2 en ai-zh; un vídeo sin voz dio una línea |
bilibili/popular | 24 | Los de búsqueda, más aid, recommend_reason, ip_location | 20 filas por página con next_page_token; las 20 traían ip_location |
La falta de un campo de remitente en el danmaku merece un comentario. El aviso de julio citaba «recopilar danmaku para averiguar la identidad real de los usuarios» entre las acciones infractoras. Las filas que recibimos solo tienen texto, tiempo en el vídeo, modo de visualización, color, grupo y hora de envío. Con esos campos no se puede averiguar quién lo envió. Para investigar es una ventaja, porque no necesitas un paso aparte para quitar identidades.
Los campos de tiempo posted_at y sent_at siguen la norma ISO 8601 con zona horaria. Por ejemplo, el vídeo de la prueba 2 muestra 2025-10-05T02:30:00+00:00, que son las 10:30 del 5 de octubre en Singapur. Herramientas como pandas y la mayoría de las bases de datos leen estos valores directamente.
También llamamos una vez a tres capacidades fuera de la cadena, entre las 00:25 y las 00:26 (hora de Singapur). El identificador de usuario era el del creador del vídeo de la prueba 2.
| Capacidad | Envío (hora de Singapur) | Tiempo | Qué devolvió | Campos | Cobro |
|---|---|---|---|---|---|
bilibili/user_posts | 00:25:50 | 7,88 s | Los 20 vídeos más recientes de un creador | 20 por fila | 0,000556 USD |
bilibili/profile | 00:26:06 | 8,21 s | Un perfil: 292 798 seguidores, 206 vídeos, nivel 6, 10 vídeos recientes | 15 | 0,000556 USD |
bilibili/popular | 00:26:14 | 1,58 s | 20 vídeos de la primera página de tendencias, con next_page_token | 24 por fila | 0,000806 USD |
El perfil incluye los campos gender y birthday. En este creador, el género estaba marcado como oculto y el cumpleaños mostraba solo mes y día. Son datos personales. Un proyecto que estudia vídeos no los necesita, así que no los guardes.
El danmaku es una muestra, y repetir no llena el hueco
El vídeo de la prueba 3 tiene un danmaku_count de 19, y la llamada de danmaku devolvió 19 filas, así que los obtuvimos todos. Los vídeos de las pruebas 1 y 2 tienen mucho más danmaku, y cada llamada devolvió 100 filas. En un vídeo con poco danmaku, una llamada trae el conjunto completo; en uno con mucho, solo una parte. El vídeo de la prueba 1 tiene 3731 danmaku, de modo que 100 filas son el 2,7 %; el de la prueba 2 tiene 36 824, así que 100 filas son el 0,27 %.
| Prueba | Danmaku del vídeo | Filas devueltas | Parte del total | Última fila en | Duración | Parte de la duración cubierta | Filas en los primeros 15 s |
|---|---|---|---|---|---|---|---|
| 1 | 3731 | 100 | 2,7 % | 10:06 | 54:49 | 18,4 % | 18 |
| 2 | 36 824 | 100 | 0,27 % | 12:02 | 12:57 | 92,9 % | 89 |
| 3 | 19 | 19 | 100 % | 5:31 | 6:15 | 88,2 % | 6 |
Queríamos saber si más llamadas llenan el hueco. Pedimos el danmaku cinco veces más para el vídeo de la prueba 2. La primera fue a las 00:25 (hora de Singapur) y las otras cuatro, entre las 00:27 y las 00:28. La llamada de las 00:17 y la de las 00:25 solo compartían 10 filas, así que la segunda aportó 90 nuevas. Las cuatro siguientes fueron idénticas a la de las 00:25 y no aportaron nada. Seis llamadas dieron 190 filas distintas, el 0,52 % de 36 824, por 6 veces 0,000556 USD, es decir 0,003336 USD.
Las dos muestras distintas eran además muy diferentes. La de las 00:17 tenía horas de envío del 05-10-2025 al 08-11-2026. La de las 00:25 solo tenía envíos del 5 al 28 de octubre de 2025, las tres primeras semanas tras la publicación.
Estas cifras muestran dos cosas. Primero, la capacidad de danmaku devuelve una muestra, no el conjunto completo. La muestra puede cambiar en cuestión de minutos. Pero las llamadas repetidas en poco tiempo devuelven el mismo lote, así que más llamadas no construyen el conjunto completo. Segundo, la muestra se concentra al principio del vídeo. En la prueba 2, 89 de 100 filas estaban en los primeros 15 segundos. De ellas, 66 eran la misma broma corta: dos caracteres que parten en dos la palabra china para «vale».
En la prueba 1, las 100 filas solo cubrían los primeros 606 segundos de un vídeo de 3289, el 18,4 %. Antes de la prueba fijamos una regla. Solo diríamos que el danmaku permite dibujar una línea de tiempo completa si las filas cubrían al menos el 80 % del vídeo. La prueba 1 no la cumplió. La prueba 2 cubrió el 92,9 % del tiempo. Pero el 89 % de las filas estaba en los primeros 15 segundos, y los minutos siguientes tenían una fila cada uno.
Nuestra conclusión: una llamada de danmaku muestra a qué reacciona el público al principio y en los primeros minutos. No muestra qué minuto de todo el vídeo tiene más danmaku. Para una línea de tiempo completa, usa los subtítulos. En la prueba 1 tenían 983 líneas, y la última terminaba en el segundo 3287,3, es decir, cubrían el vídeo entero.
Las filas también difieren en cuándo se enviaron y en cómo se ven. Las fechas de envío están en hora de Singapur.
| Prueba | Primera y última fecha de envío de la muestra | Modo de visualización | Longitud media en caracteres |
|---|---|---|---|
| 1 | 15 de febrero de 2022 a 25 de noviembre de 2023 | 93 desplazamiento, 7 arriba | 13,7 |
| 2 | 5 de octubre de 2025 a 8 de noviembre de 2026 | 77 desplazamiento, 22 arriba, 1 abajo | 5,8 |
| 3 | 14 de febrero de 2025 a 6 de julio de 2026 | 19 desplazamiento | 9,2 |
Las filas cortas de la prueba 2 son bromas de dos caracteres; las largas de la prueba 1, preguntas sobre la lección.
Un ejemplo docente: dónde reacciona el alumnado ante una clase
Docentes e investigadores del aprendizaje suelen preguntarse dónde se atasca el alumnado y dónde se engancha. Las encuestas y los paneles de la plataforma responden en parte, pero el panel solo lo ve el dueño del vídeo. El danmaku es distinto: cada línea tiene un tiempo en el vídeo, así que se puede alinear con los subtítulos. Ves qué dijo el público en un segundo y qué decía el profesor en ese mismo segundo. Para alinearlos usamos el módulo estándar bisect, y para contar por minuto, Counter. No hace falta ningún paquete adicional.
import bisect, json, re
from collections import Counter
dm = json.load(open("run1/4_danmaku.json"))["response"]["results"]
seg = json.load(open("run1/5_subtitles.json"))["response"]["results"]["segments"]
starts = [float(s["start"]) for s in seg]
def said_at(t): # línea de subtítulo que suena en el segundo t
i = max(0, bisect.bisect_right(starts, t) - 1)
return seg[i]["text"]
QWORDS = ["为什么", "怎么", "吗"] # «por qué», «cómo» y la partícula interrogativa en chino
per_minute = Counter(int(d["video_time_seconds"] // 60) for d in dm)
questions = [(d["video_time"], d["text"], said_at(d["video_time_seconds"]))
for d in dm if re.search(r"[??]", d["text"]) or any(w in d["text"] for w in QWORDS)]
print(per_minute.most_common(4), len(questions))La prueba 1 es una clase de problemas de 55 minutos sobre determinantes, para el examen de acceso al posgrado en China, en la parte de matemáticas. De los 100 danmaku, 25 estaban en el minuto 0 y 17 en el minuto 2. El pico fueron los minutos 6 y 7, con 37 filas en dos minutos. Los subtítulos explican por qué. En esos dos minutos, el profesor explicó cómo intercambiar filas en un determinante y lo comparó con «burbujas que suben». El público respondió al instante con líneas sobre el algoritmo de la burbuja y bromas sobre el profesor de matemáticas que ahora enseña informática.
De las 37 filas, 19 mencionaban informática, estructuras de datos, programación o la propia carrera. Una persona escribió que estudió arquitectura y nunca aprendió informática. Otra preguntó dónde iba a aprender el algoritmo de la burbuja alguien de una escuela de negocios. Para el profesor, la señal es clara. Una analogía de otro campo capta la atención, pero se convierte en una barrera nueva para quien nunca programó. La siguiente versión puede añadir una frase que explique la analogía.
Las preguntas son otra señal. Con una regla sencilla, un signo de interrogación o una palabra interrogativa china, encontramos 15 filas con preguntas. Cinco eran variantes de una misma pregunta: el espectador pide al profesor que le explique cómo calcular un determinante de tres filas y cuatro columnas. Un determinante solo existe para una matriz cuadrada. La pregunta muestra que parte del público aún no sabe que el determinante es propio de las matrices cuadradas.
Esa duda aparece una y otra vez en los primeros segundos del vídeo. Una breve tarjeta aclaratoria al inicio de la siguiente lección ayudaría. En el minuto 5:07, otra fila preguntaba por qué hay una matriz dentro de un determinante. En ese segundo, los subtítulos muestran al profesor con las propiedades de los cofactores. Todo esto sale de una muestra de 100 filas: te dice que una reacción existe, no qué parte del público la tuvo.
La tabla empareja algunas filas con preguntas de la prueba 1 con la línea de subtítulo que suena en ese mismo segundo. Las dos columnas son traducciones nuestras.
| Tiempo en el vídeo | Danmaku | Línea de subtítulo en ese segundo (transcripción automática) |
|---|---|---|
| 0:00 | «Profe, ¿cómo se calcula un determinante de tres filas y cuatro columnas?» | «Bien, veamos el dos y el tres» |
| 5:07 | «¿Por qué hay una matriz dentro de un determinante?» | «El segundo, multiplicado, debería dar cero» |
| 6:58 | «¿¿¿Esto también burbujea??? Ja, ja» | «Ahora quiero mover estas tres burbujas de abajo» |
| 7:10 | «¿¿¿Burbujas??? ¿Estoy ciego?» | «La primera burbuja sube» |
| 10:06 | «¿Por qué hacerlo burbujeando? ¿No se puede de una vez?» | «Así que el resultado final debería ser uno a la N, AB» |
La última línea de subtítulo muestra un límite de las transcripciones automáticas. En esa fórmula, el profesor casi seguro dijo «menos uno a la N», y la transcripción perdió el «menos». En el minuto 9:23, la línea de subtítulo es demasiado corta para tener sentido. Antes de citar una línea de subtítulo, compárala con el vídeo.
El vídeo de ciencia es distinto. En la prueba 2, 89 de 100 filas estaban en los primeros 15 segundos, y casi todas eran bromas. Solo 4 eran preguntas. Dos de ellas preguntaban por un agujero negro de un micrómetro y de un nanómetro. El comentario destacado principal, que pedía mostrar un agujero negro de un nanómetro la próxima vez, tenía 7825 «me gusta». El segundo, que preguntaba adónde van las cosas que caen en un agujero negro, tenía 504 respuestas.
La misma curiosidad apareció una vez en el danmaku y otra en los comentarios. El danmaku es una frase rápida en un momento; la sección de comentarios es donde la gente sigue la conversación. Para un divulgador, la pregunta con más respuestas suele ser el tema del siguiente vídeo.
El vídeo agrícola muestra un tercer patrón. El documental de la prueba 3 sobre naranjas solo tenía 19 danmaku, y una llamada los devolvió todos. Cuatro eran preguntas. Una persona preguntó para qué sirve la espina sujeta en la rama. Otras preguntaron cómo madura toda la fruta a la vez y cómo cosecharían sin ella. En los comentarios destacados, alguien de Guangxi enumeró los cítricos de su región. Otro contó que lleva abejas a los naranjales del distrito de Zigui, en Hubei, para hacer miel de azahar.
Para un equipo de extensión agraria o de promoción regional, esas 19 filas ya son una lista corta de lo que el público quiere saber. Como registro de una reacción colectiva en un segundo concreto, el danmaku tiene valor para la docencia, la divulgación y la agricultura. Para una clase de chino en Madrid, Bogotá o Ciudad de México es, además, lengua coloquial auténtica.
Coste por 1000 filas: el danmaku es lo más barato
Mucha gente que busca «bilibili api» quiere saber cuánto cuestan 1000 filas. No dividimos el precio del catálogo por el límite. Usamos los recuentos reales y los cobros reales de las tres cadenas, tres llamadas por capacidad.
| Capacidad | Cobro (catálogo) | Llamadas | Filas devueltas | Cobrado | Por 1000 filas |
|---|---|---|---|---|---|
bilibili/danmaku | 0,000556 USD por llamada | 3 | 219 filas | 0,001668 USD | unos 0,0076 USD |
bilibili/search | 0,000556 USD por llamada | 3 | 60 filas | 0,001668 USD | unos 0,0278 USD |
bilibili/video | 0,000556 USD por llamada | 3 | 3 vídeos | 0,001668 USD | 0,556 USD por 1000 vídeos |
bilibili/subtitles | 0,000556 USD por llamada (0,000792 desde el 12-11) | 3 | 3 vídeos, 1351 líneas | 0,001668 USD | 0,556 USD por 1000 vídeos |
El precio por llamada es el mismo, así que el coste por 1000 filas depende de cuántas filas trae cada llamada. El danmaku trae más, por eso es lo más barato: unas 3,7 veces menos que la búsqueda. Es lo contrario de nuestra prueba anterior de Douyin con Python. En Douyin, la búsqueda se cobra por página y es lo más caro, y los comentarios se cobran por tramos de 20 y son lo más barato. En Bilibili, todas las capacidades se cobran por llamada, así que la que devuelve más filas sale más barata.
Por eso, un plan para Bilibili debería pedir más danmaku y más búsqueda. Los subtítulos se cobran por vídeo: por 0,000556 USD en la prueba (0,000792 desde el 12-11-2026) obtienes el texto con tiempos de un vídeo entero. En la prueba 1 fueron 983 líneas, la mayor cantidad de información de los tres tipos de texto.
Si sumamos las llamadas repetidas de danmaku, el cuadro cambia un poco. Hubo 8 llamadas de danmaku en total: 3 en las cadenas y 5 repeticiones sobre el vídeo de la prueba 2. Devolvieron 719 filas y costaron 0,004448 USD, unos 0,0062 USD por 1000 filas. Pero solo 309 de esas filas eran distintas, así que por 1000 filas distintas el coste es de unos 0,0144 USD. Como vimos, las repeticiones no compensan.
Coste mensual en tres casos de uso
Los precios unitarios no bastan, así que calculamos tres casos reales. Los precios salen del catálogo leído el 12-11-2026: 0,000792 USD por llamada de subtítulos, 0,000806 USD por página de tendencias y 0,000556 USD por las demás llamadas. La tabla indica el número de llamadas de cada caso.
| Caso de uso | Qué hace cada ejecución | Frecuencia | Llamadas al mes | Coste de API al mes |
|---|---|---|---|---|
| Curso abierto de 20 lecciones, retroalimentación semanal | Detalle, comentarios destacados y danmaku de cada lección; subtítulos una vez al principio | Semanal, 4 semanas | 260 | 0,1493 USD |
| Vigilancia temática para un canal de ciencia | Búsqueda diaria de 10 palabras clave por novedad; cada semana, detalle, comentarios y danmaku de 5 vídeos por palabra | Búsqueda diaria, extracción semanal | 900 | 0,5004 USD |
| Foto diaria de la lista de tendencias | Guardar las 5 primeras páginas de tendencias, 100 vídeos | Diaria, 30 días | 150 | 0,1209 USD |
El primer caso cuesta menos de 15 centavos de dólar al mes, casi nada para un equipo docente. Su coste real es el tiempo humano para leer y clasificar las filas. En el segundo, la búsqueda son 10 llamadas al día, 0,1668 USD al mes, el 33 % del total; el resto son las extracciones semanales. El tercero usa bilibili/popular, la más cara de las ocho capacidades: 0,000806 USD por página.
A las 00:26 (hora de Singapur) obtuvimos una página de 20 filas; las 20 tenían ubicación por IP y categoría. Esa página tenía 3 filas de la categoría de vida cotidiana, 2 de deportes electrónicos y 1 de cada una de otras 15 categorías. Estas cifras cubren solo las tarifas de la API, no tus servidores ni tu almacenamiento. La página de precios y el mercado de datos listan todos los precios.
| Campo | Distribución en la primera página de tendencias, 20 filas |
|---|---|
| Categoría | Vida cotidiana 3, deportes electrónicos 2, y otras 15 con 1 cada una, como ciencia y naturaleza, historia, enseñanza musical y gastronomía |
| Ubicación por IP | Shanghái 3, Cantón 3, Pekín 2, Henan 2, Jiangsu 2, Sichuan 2, y otras 6 con 1 cada una, una de ellas Estados Unidos |
Errores y cobros: cuándo no pagas nada
Cuando un script propio falla, lo difícil es saber si el fallo costó dinero y si conviene repetir. A las 00:26 y 00:27 (hora de Singapur) provocamos algunos fallos a propósito e hicimos una llamada asíncrona. Junto con las pruebas anteriores, los resultados son estos.
| Caso | Estado HTTP | Qué dice la respuesta | Cobro |
|---|---|---|---|
| Sin clave | 401 | missing_key; next_steps dice que no se cobró nada | 0 |
| sort con el valor hottest | 422 | invalid_value; lista los 5 valores permitidos; did_you_mean propone most_liked y most_viewed | 0 |
Detalle del vídeo con "mode": "async" | 202 | job_id y poll_url a los 3,0 segundos; sondeando cada 5 segundos, finalizing a las 00:27:12 y succeeded a las 00:27:25 | 0,000556 USD |
| Subtítulos de un vídeo sin voz | 200 | Una línea, idioma English | 0,000556 USD |
| Por encima del límite por minuto | 429 | Ocurrió una vez, en el primer intento de búsqueda de la prueba 3, un minuto antes de las 00:22:41. La clave de prueba admite 10 llamadas por minuto. El script esperó 60 segundos y el reintento devolvió 200 | 0. No guardamos esa respuesta, pero otra respuesta 429 de esta API que leímos ese mismo día a las 00:15 dice «Nothing was charged». La prueba 3 cobró 5 llamadas, 0,00278 USD |
La fila del 422 merece un comentario. El error no solo dice que el valor es incorrecto: también lista los valores permitidos y los más parecidos. Eso ayuda mucho cuando una IA escribe y corrige el script, porque el modelo puede leer el error y arreglar la llamada. Para el danmaku, la URL debe contener el identificador BV del vídeo, como indica la nota de parámetros del catálogo.
El modo asíncrono va bien para pasos lentos como el detalle del vídeo. No mantienes una conexión abierta de 30 a 60 segundos: recibes un job_id y lo consultas. La llamada asíncrona pasó por tres estados, y el cobro se hizo una sola vez, al aceptar el trabajo.
| Hora (hora de Singapur) | Estado | billing_state | Qué haces |
|---|---|---|---|
| 00:26:50 | running, HTTP 202 a los 3,0 s | charged, 0,000556 USD | Guardar job_id y poll_url |
| 00:27:12 | finalizing | charged | Volver a consultar a los 5 segundos |
| 00:27:25 | succeeded, 22 campos en results | charged, reembolso no aplicable | Leer results y dejar de consultar |
La fila de los subtítulos es el único caso que terminó bien pero sin datos útiles, y aun así se cobró. Antes de pedir subtítulos en lote, filtra por categoría y duración con las filas de búsqueda. Para evitar cobros dobles en los reintentos, consulta nuestros artículos sobre claves de idempotencia y reintentos y sobre la conciliación de reembolsos de llamadas fallidas.
Cuándo encajan mejor las otras dos vías
La plataforma abierta gana con claridad en tres casos. El primero es la escritura: para subir, editar o borrar vídeos, publicar artículos o hacer directos, necesitas la plataforma abierta. La API de datos solo lee. El segundo son los datos privados de una cuenta autorizada, como el crecimiento en 30 días, los ingresos del programa de apoyo a creadores y las cifras del panel. Esos datos pertenecen al dueño de la cuenta, y la plataforma abierta los entrega a tu aplicación con su consentimiento. Otras vías no pueden obtenerlos y no deberían intentarlo.
El tercero es la interacción en salas de directo. La conexión larga empuja los mensajes en tiempo real, con mejor retardo y más completitud que cualquier sondeo, y la plataforma la aprueba. Si eres una empresa de China continental con creadores bajo contrato, las normas de admisión no son una barrera para ti.
Los proyectos de código abierto también tienen su sitio. Si solo descargas unos pocos vídeos que puedes ver, para una clase o una copia personal, un descargador es más rápido que cualquier alta. Puedes leer y cambiar el código, y los datos se quedan en tu ordenador. Descargadores generales activos como yt-dlp se mueven rápido, y a menudo alguien publica un arreglo en pocos días.
Pero cuenta dos costes. Uno es el mantenimiento: todas las incidencias de la vía 2 son de los últimos 30 días, y el arreglo de Bilibili sigue sin fusionarse. El otro es el riesgo: dos proyectos se detuvieron este año tras cartas de abogados, y los scripts basados en ellos no tienen quien los mantenga.
Una API de pago por llamada encaja en el amplio grupo intermedio. Quieres un flujo continuo de vídeos públicos, comentarios destacados, danmaku y subtítulos de otros creadores. No necesitas escribir. No eres una empresa de China continental o no quieres pasar por la aprobación. No tienes a nadie para mantener firmas, y quieres que las llamadas fallidas salgan gratis y que los resultados vayan directo a una tabla o una base de datos.
Sus límites también son reales. No puede obtener los datos privados de una cuenta. Los comentarios son los destacados, no toda la sección. En vídeos con mucho danmaku obtienes una muestra, no el conjunto completo. El detalle del vídeo tarda de 24 a 65 segundos por llamada. El mismo patrón de Python sirve para otras plataformas si cambias la plataforma y la acción. Ejemplos son la API de datos de Douyin y la API de datos de YouTube. Para dudas parecidas sobre Xiaohongshu, mira Xiaohongshu API: oficial frente a terceros, y para Instagram, extraer publicaciones y comentarios de Instagram con Python.
Cumplimiento y límites
Esta sección describe métodos y límites de los datos. No es asesoramiento jurídico. Las tres vías se enfrentan a las mismas leyes y al mismo acuerdo de usuario. Los artículos 13 y 27 de la Ley de Protección de la Información Personal de China tratan la información personal que una persona hizo pública o que ya es pública de forma lícita. Permiten tratarla dentro de un alcance razonable, salvo que la persona se oponga claramente. Si el tratamiento afecta de forma importante a sus derechos, hace falta consentimiento.
El apodo, el avatar y el enlace al perfil de quien comenta son información personal. Para investigación y retroalimentación de cursos, guarda solo el texto, los «me gusta», el número de respuestas y la hora. No guardes apodos ni enlaces a perfiles. Las filas de danmaku no tienen campo de remitente, así que ese lado ya viene más limpio.
El artículo 13 de la Ley contra la Competencia Desleal revisada en 2025 trata los datos que otra empresa tiene de forma lícita. Prohíbe a una empresa obtenerlos o usarlos con engaño, por la fuerza o saltándose o rompiendo controles técnicos. Las firmas WBI, los controles antibots y las sesiones de las que hablan los proyectos abiertos son controles técnicos de ese tipo. Por eso la vía 2 solo expone los hechos y no enseña a saltarlos. Las dos cartas de abogados de este año citan esa ley, el Código Civil y la Ley de Ciberseguridad.
Una decisión de reforma de 2025 cambió la Ley de Ciberseguridad, y el texto revisado entró en vigor el 1 de enero de 2026. El Reglamento de Gestión de la Seguridad de los Datos en Red, vigente desde el 1 de enero de 2025, fija reglas generales para el tratamiento de datos en red. Los proyectos grandes que guardan datos mucho tiempo deberían revisarlo también y, si hace falta, consultar a su propio asesor.
Si investigas desde la Unión Europea, también cuenta el Reglamento General de Protección de Datos. Su artículo 89 pide garantías adecuadas para el tratamiento con fines de investigación científica, en especial medidas para respetar la minimización de datos, como la seudonimización. El artículo 5 permite conservar datos más tiempo si se tratan solo con esos fines, siempre con esas garantías. En la práctica, significa lo mismo que antes: guarda pocas columnas, quita identidades pronto y fija un plazo de conservación.
Los comités de ética de investigación suelen preguntar cómo guardas el contenido público, cuánto tiempo lo conservas y cómo quitas las identidades. La tabla resume lo que trae cada tipo de dato.
| Dato | Qué trae que afecte a la ética | Qué hacer |
|---|---|---|
| Danmaku | Sin campo de remitente | Guardar texto, tiempo en el vídeo y hora de envío |
| Comentarios | Nombre del autor y enlace al perfil | Quitar esas dos columnas al guardar |
| Perfil | Género y cumpleaños | No pedirlo si estudias vídeos |
| Detalle del vídeo | Flujos que caducan en unas 2 horas | No guardar las direcciones de los flujos |
| Subtítulos | Transcripción automática ai-zh, con errores | Comparar con el vídeo antes de citar |
Decide las columnas antes de la primera llamada, pon el plazo de conservación del JSON en bruto en el plan del proyecto y borra los archivos al terminar.
Los propios datos también tienen límites que nuestras pruebas confirman.
| Límite medido | Qué no puedes hacer con él |
|---|---|
| Comentarios: solo los destacados | Medir el tono de toda la sección de comentarios |
| Danmaku: una muestra, concentrada al principio | Estimar la curva completa de danmaku del vídeo |
| Subtítulos: casi vacíos en vídeos sin voz | Analizar documentales solo con música |
| Búsqueda: sigue la clasificación propia de Bilibili | Contar todos los vídeos de un tema |
Preguntas frecuentes
¿Existe una api de bilibili gratis?
Depende de la vía. La plataforma abierta no cobra por llamada, pero solo admite personas jurídicas de China continental y lee los vídeos de los creadores que autorizan tu aplicación. Las bibliotecas de código abierto son gratis, pero las dos más populares están archivadas tras cartas de abogados. Una API de pago por llamada cobra cada petición: en nuestra prueba, una cadena completa de cinco pasos costó 0,00278 USD, y los fallos no se cobraron.
¿Hay una api de bilibili en español?
No encontramos documentación oficial en español: todas las páginas de la plataforma abierta que leímos están en chino. El sitio principal tiene una ruta /es/, pero su robots.txt la excluye para los rastreadores. Con una API de pago por llamada, los nombres de los campos van en inglés y el texto llega en su idioma original, casi siempre chino. Para traducirlo puedes pasar la columna text a la herramienta de traducción que uses.
¿Qué ofrece la bilibili open api?
La plataforma abierta ofrece consentimiento de cuenta, gestión de usuarios y vídeos, datos abiertos de los vídeos propios del creador que autoriza, gestión de artículos y directos. No encontramos búsqueda por palabra clave ni lectura de comentarios o danmaku de cualquier vídeo. Sus ejemplos de firma están en Go y C#, no en Python.
¿Por qué se bloquea una petición a la bilibili api?
Los endpoints web necesitan una firma WBI, y algunos también una sesión iniciada. Una firma ausente, una clave vieja o demasiadas peticiones pueden provocar un rechazo, a menudo con el estado 412. La solicitud #1000 de MediaCrawler, fusionada el 05-11-2026, corrigió una lectura de claves WBI y una petición de respaldo sin cookie de sesión. Del lado del pago por llamada, nuestras 28 peticiones de datos no recibieron ningún 412. Una sola chocó con el límite por minuto y recibió un 429, y el reintento 60 segundos después pasó. De los errores provocados a propósito, la falta de clave devolvió 401 y un valor de orden incorrecto, 422, sin cobro.
¿Qué significa danmaku en Bilibili?
El danmaku son los comentarios cortos que cruzan la pantalla en el segundo exacto del vídeo en que se enviaron. Cada fila lleva el tiempo en el vídeo, el modo de visualización, el color y la hora de envío. La capacidad bilibili/danmaku trae el tiempo dentro del vídeo y no tiene campo de remitente; en nuestra prueba costó unos 0,0076 USD por 1000 filas.
Primeros pasos
- Crea una clave de API en la consola. Guárdala en la variable de entorno
EVERYINFRA_API_KEY, como muestra el inicio rápido. - Lee el catálogo gratuito en
GET /api/v1/social/catalog?platform=bilibili. Revisa parámetros, precios yavailable. - Instala requests con pip. Copia el script de la vía 3 y ejecútalo con tu palabra clave.
- Abre los cinco archivos JSON de la carpeta de salida. Revisa
billing.charged_usdde cada paso. Cuenta lossegmentsde los subtítulos y trata el danmaku como una muestra.
Referencias
- Plataforma abierta de Bilibili, página principal de la documentación (en chino), consultado el 11-11-2026, https://open.bilibili.com/doc
- Plataforma abierta de Bilibili, presentación de la plataforma (en chino), consultado el 11-11-2026, https://open.bilibili.com/doc/4
- Plataforma abierta de Bilibili, normas de gestión, vigentes desde el 29 de julio de 2022 (en chino), consultado el 11-11-2026, https://open.bilibili.com/agreement/management-protocol
- Plataforma abierta de Bilibili, acuerdo de servicio para desarrolladores (en chino), consultado el 11-11-2026, https://open.bilibili.com/agreement/developer-service
- Plataforma abierta de Bilibili, política de privacidad (en chino), consultado el 11-11-2026, https://open.bilibili.com/agreement/privacy-policy
- Plataforma abierta de Bilibili, detalles de un vídeo (en chino), consultado el 11-11-2026, https://open.bilibili.com/doc/4/d9554788-dcef-f139-6217-b487d41c3826
- Plataforma abierta de Bilibili, crecimiento de todos los vídeos (en chino), consultado el 11-11-2026, https://open.bilibili.com/doc/4/708a4ce5-5a6e-d8ce-b2e8-ff8a26a83b05
- Plataforma abierta de Bilibili, datos de un vídeo (en chino), consultado el 11-11-2026, https://open.bilibili.com/doc/4/3f46ac2e-1318-3aa0-5548-0d9fd624d520
- Plataforma abierta de Bilibili, guía de OAuth 2.0 (en chino), consultado el 11-11-2026, https://open.bilibili.com/doc/4/eaf0e2b5-bde9-b9a0-9be1-019bb455701c
- Plataforma abierta de Bilibili, norma de firma y códigos de estado (en chino), consultado el 11-11-2026, https://open.bilibili.com/doc/4/8673959e-f7bb-56e6-6e68-d225f971b81b
- Plataforma abierta de Bilibili, información pública básica del usuario (en chino), consultado el 11-11-2026, https://open.bilibili.com/doc/4/feb66f99-7d87-c206-00e7-d84164cd701c
- GitHub, bilibili-openplatform/SignatureAlgorithm_DotnetDemo, consultado el 11-11-2026, https://github.com/bilibili-openplatform/SignatureAlgorithm_DotnetDemo
- Plataforma abierta de directos de Bilibili, protocolo de conexión larga (en chino), consultado el 11-11-2026, https://open-live.bilibili.com/document/657d8e34-f926-a133-16c0-300c1afc6e6b
- Bilibili, acuerdo de usuario, vigente desde el 7 de mayo de 2025 (en chino), consultado el 11-11-2026, https://www.bilibili.com/protocal/licence.html
- Bilibili, robots.txt, consultado el 11-11-2026 a las 00:23 hora de Singapur, https://www.bilibili.com/robots.txt
- GitHub, README de Nemo2011/bilibili-api con el aviso del 6 de julio de 2026 (en chino), consultado el 11-11-2026, https://github.com/Nemo2011/bilibili-api
- PyPI, bilibili-api-python 17.4.2, 19 de junio de 2026, https://pypi.org/project/bilibili-api-python/
- GitHub, README de SocialSisterYi/bilibili-API-collect sobre la carta del 28 de enero de 2026 (en chino), consultado el 11-11-2026, https://github.com/SocialSisterYi/bilibili-API-collect
- GitHub, pskdje/bilibili-API-collect, consultado el 11-11-2026, https://github.com/pskdje/bilibili-API-collect
- GitHub, README de nilaoda/BBDown, consultado el 11-11-2026, https://github.com/nilaoda/BBDown
- GitHub, Vespa314/bilibili-api, consultado el 11-11-2026, https://github.com/Vespa314/bilibili-api
- GitHub, README de xfgryujk/blivedm, consultado el 11-11-2026, https://github.com/xfgryujk/blivedm
- GitHub, yt-dlp/yt-dlp, consultado el 11-11-2026, https://github.com/yt-dlp/yt-dlp
- GitHub, incidencia #17847 de yt-dlp, 17-10-2026, https://github.com/yt-dlp/yt-dlp/issues/17847
- GitHub, incidencia #17879 de yt-dlp, 21-10-2026, https://github.com/yt-dlp/yt-dlp/issues/17879
- GitHub, incidencia #17890 de yt-dlp, 22-10-2026, https://github.com/yt-dlp/yt-dlp/issues/17890
- GitHub, incidencia #17894 de yt-dlp, 22-10-2026, https://github.com/yt-dlp/yt-dlp/issues/17894
- GitHub, solicitud de cambios #17898 de yt-dlp, 22-10-2026, https://github.com/yt-dlp/yt-dlp/pull/17898
- GitHub, README de NanmiCoder/MediaCrawler, consultado el 11-11-2026, https://github.com/NanmiCoder/MediaCrawler
- GitHub, solicitud de cambios #1000 de MediaCrawler, abierta el 04-11-2026 y fusionada el 05-11-2026, https://github.com/NanmiCoder/MediaCrawler/pull/1000
- EveryInfra, catálogo de la API de datos, consultado el 11-11-2026 a las 00:13 hora de Singapur, https://api.everyinfra.com/api/v1/social/catalog
- Documentación de requests, Advanced Usage: Session Objects, consultado el 11-11-2026, https://requests.readthedocs.io/en/latest/user/advanced/#session-objects
- PyPI, requests 2.34.2, 14 de mayo de 2026, https://pypi.org/project/requests/
- Documentación de Python, bisect, consultado el 11-11-2026, https://docs.python.org/3/library/bisect.html
- Documentación de Python, collections.Counter, consultado el 11-11-2026, https://docs.python.org/3/library/collections.html#collections.Counter
- Documentación de Python, hmac, consultado el 11-11-2026, https://docs.python.org/3/library/hmac.html
- Administración del Ciberespacio de China, Ley de Protección de la Información Personal (en chino), 20 de agosto de 2021, https://www.cac.gov.cn/2021-08/20/c_1631050028355286.htm
- Administración Nacional de Propiedad Intelectual de China, Ley contra la Competencia Desleal, revisión de 2025 (en chino), publicada el 20 de mayo de 2026, https://www.cnipa.gov.cn/art/2026/5/20/art_104_206437.html
- Ministerio de Ecología y Medio Ambiente de China, reproducción del Decreto 790 del Consejo de Estado, Reglamento de Gestión de la Seguridad de los Datos en Red (en chino), 3 de octubre de 2024, https://www.mee.gov.cn/zcwj/gwywj/202410/t20241003_1087417.shtml
- Administración del Ciberespacio de China, Ley de Ciberseguridad, texto vigente desde el 1 de enero de 2026 (en chino), 29 de diciembre de 2025, https://www.cac.gov.cn/2025-12/29/c_1768735112911946.htm
- Administración del Ciberespacio de China, decisión de reforma de la Ley de Ciberseguridad (en chino), 29 de octubre de 2025, https://www.cac.gov.cn/2025-10/29/c_1763461514768457.htm
- Boletín Oficial del Estado, Reglamento (UE) 2016/679, Reglamento General de Protección de Datos, artículos 5 y 89, consultado el 12-11-2026, https://www.boe.es/buscar/doc.php?id=DOUE-L-2016-80807
Referencia BL-133