Skill de Operaciones de Bilibili (Paquete Completo)
Fusionado de 6 skills originales: bilibili-cookie / bilibili-comment / bilibili-auto-comment / bilibili-message / bilibili-daily-report / bilibili-video-download.
Regla de Oro Skill-First
Cualquier tarea de Bilibili (descarga, comentar, enviar mensajes, llamar API, informe diario, danmaku) el primer paso siempre es skill_view(name='bilibili'). No uses yt-dlp directamente, no escribas scripts que llamen a la API manualmente, no entres al navegador sin guía. GK ha corregido repetidamente en múltiples sesiones el problema de "no usar el skill".
Todas las solicitudes a Bilibili (descargas, llamadas API, comentarios) deben incluir Cookie, incluso para resoluciones normales; sin ellas obtendrás un error 412.
Tabla de Funciones
| Tarea | Documentación Detallada | Script/Comando Rápido |
|---|---|---|
| Obtener/Actualizar Cookie (inicio de sesión por código QR) | references/cookie-login.md | Flujo integrado en documentos (incluye código Python completo) |
| Búsqueda de videos/usuarios (WBI) | references/cookie-login.md | `scripts/bili_wbi_search.py "<término>" [video |
| Descarga de videos | references/video-download.md + sección yt-dlp de references/cookie-login.md | scripts/cookie_to_netscape.py → yt-dlp |
| Enviar/Responder/Eliminar comentarios | references/comment-api.md | scripts/post_reply.sh <BVID> <mensaje> [root_rpid] [parent_rpid] |
| Robot de comentarios automáticos | references/auto-comment.md | scripts/bili_auto_comment.py --count 30 --interval 600 |
| Enviar mensajes privados | references/message-browser.md | Flujo de navegador, ver documentación (api.vc está bloqueado, no se puede usar API pura) |
| Informe diario PPT de tendencias | references/daily-report.md | bash ~/.hermes/skills/bilibili/scripts/run_daily.sh |
| Verificación completa del skill ("probar si el skill funciona") | references/verification.md | Seguir las 10 pruebas del documento, mínimo impacto lateral |
| Extracción de danmaku | references/danmaku-protobuf.md | Ver documentación (análisis protobuf) |
| API de flujo popular / ranking | references/APIv2.popular.md, references/APIv2.ranking.md | Interfaces públicas sin necesidad de inicio de sesión |
| Campos de API de comentarios / códigos de error | references/comment-api.md (apéndice con referencia de API reply original) | — |
Base Compartida (Lectura Obligatoria para Todas las Funciones)
Cookie
- Archivo:
~/.bilibili-cookie, formato de una líneaSESSDATA=xxx; bili_jct=xxx; DedeUserID=xxx - SESSDATA=credencial de inicio de sesión (obligatorio en todas las interfaces que requieren inicio de sesión); bili_jct=token csrf (obligatorio en POST con
csrf=xxx); DedeUserID=mid del usuario - Válido aproximadamente 30 días. Cualquier interfaz que devuelva
-101o nav muestre no conectado → Cookie caducada, volver a escanear código QR según references/cookie-login.md. Informa activamente a GK "Cookie caducada, necesita volver a escanear código QR", no esperes a que lo descubra - Antes de operaciones que requieran Cookie, primero verifica rápidamente con la interfaz nav
- yt-dlp con --cookies solo acepta formato Netscape: primero ejecuta
python3 ~/.hermes/skills/bilibili/scripts/cookie_to_netscape.py(salida /tmp/bili_netscape_cookie.txt) - La cuenta actual conectada se determina por la interfaz nav (
x/web-interface/nav) real, no asumas un UID fijo
Convenciones de Solicitudes
- UA uniforme: cadena completa de Chrome:
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36(UA corta será bloqueada) - POST debe incluir
Referer: https://www.bilibili.com/video/{BVID}+Origin: https://www.bilibili.com+csrf - La interfaz de búsqueda debe usar la ruta
/x/web-interface/wbi/search/type(rutas no wbi devuelven página HTML de error)
Tabla de Fiabilidad de API (Medido con IP de Servidor Real)
| Interfaz | Estado |
|---|---|
view (BVID→AID/CID) | Estable |
wbi/search/type (video/bili_user, sin firma wbi) | Disponible |
reply/main / reply/add / reply/del | Disponible |
popular / ranking/v2 | Disponible, público sin inicio de sesión |
space/arc/search | -799 limitación de tráfico, no usar |
search/type (sin ruta wbi) | Bloqueado, devuelve página HTML de error |
api.vc.bilibili.com (mensajes privados) | Completamente bloqueado, solo posible a través de la interfaz del navegador |
Códigos de Error Clave
| Código | Significado | Acción |
|---|---|---|
| -101 | No conectado / Cookie caducada | Volver a escanear código QR |
| -509 | Demasiadas solicitudes | Esperar 5-10 segundos y reintentar |
| -799 | IP del servidor limitada | Cambiar ruta de interfaz, reintento no válido |
| -635 | Video no permite comentarios | Saltar |
| -637 | Palabra sensible | Saltar / modificar texto |
| 12014 | Límite diario de comentarios alcanzado | Detener el script y esperar 24 horas (no pocas horas), no reiniciar a intervalos cortos |
| 412 | Descarga sin Cookie / bloqueo | Incluir Cookie Netscape o usar método API |
| 12061 | Creador cerró la sección de comentarios | Saltar |
Esencia de Cada Función
Descarga de Videos
Priorizar yt-dlp + Cookie Netscape (puede desbloquear 1080P). Si yt-dlp da 412, cambiar a método API: playurl con fnval=0&platform=html5 para obtener enlace directo mp4 (dash stream sin inicio de sesión da 403). La descarga CDN debe incluir Referer: https://www.bilibili.com. qn: 16=360p 32=480p 64=720p 80=1080p.
Comentarios
oid es avid, no bvid, convertir primero con interfaz view. Comentario de primer nivel root=0 parent=0; responder incluir root+parent. Encontrar el video más reciente de un usuario: búsqueda wbi search_type=video&order=pubdate obtener el primero. -509 esperar 5-10 segundos.
Robot de Comentarios Automáticos
--count 30 --interval 600 (100/300 provocará 12014). Antes de iniciar, ps aux | grep bili_auto_comment para ver procesos residuales. Cada comentario con retardo aleatorio de 1-3 segundos. Para segundo plano persistente usar terminal(background=true) o crontab, no nohup/disown. Detener inmediatamente si hay 12014 masivo.
Mensajes Privados
api.vc no funciona ni con curl desde IP del servidor ni con XHR desde la página. Única solución: inyectar Cookie en navegador → página de espacio hacer clic en "Enviar mensaje" → escribir en .brt-editor (debe despachar evento input) → hacer clic en [class*="_MessageSendBox__SendBtn_"] con coincidencia difusa. Usuarios no seguidos solo pueden recibir 1 mensaje (no es error).
Informe Diario
bash /home/ubuntu/bilibili-daily/run_daily.sh un solo comando para todo el flujo, sin Cookie, unos 15 segundos. El script original está en scripts/ de este skill, la salida de datos y PPT en /home/ubuntu/bilibili-daily/. Errores comunes de pptxgenjs: color sin #, objeto option debe crearse cada vez.
Errores Comunes Globales
- Siempre incluir Cookie en solicitudes a Bilibili, de lo contrario 412
- El código QR debe guardarse como archivo PNG para que GK lo escanee (/home/ubuntu/Downloads/bilibili_qrcode.png), nunca imprimir código QR en ASCII
- Los campos de búsqueda/título pueden contener etiquetas de resaltado
<em class="keyword">, limpiar conre.sub(r'<[^>]+>', '', title) - En caso de 412/403, agregar campos de Cookie como buvid3/buvid4 para manejar bloqueos
- Al paginar popular/ranking, esperar al menos 1 segundo entre páginas para evitar -799
- Ver errores comunes por función en los documentos de referencia correspondientes