Skill B站运营(Suite complète)
Fusion de 6 skills originaux : bilibili-cookie / bilibili-comment / bilibili-auto-comment / bilibili-message / bilibili-daily-report / bilibili-video-download.
Règle d'or Skill-First
Pour toute tâche Bilibili (téléchargement, commentaire, message privé, appel API, rapport quotidien, danmaku), la première étape est toujours skill_view(name='bilibili'). Ne jamais lancer yt-dlp nu, ne jamais écrire de script qui appelle directement l'API en dur, ne jamais forcer l'utilisation du navigateur sans passer par le skill. GK a corrigé ce problème à plusieurs reprises dans différentes sessions.
Toutes les requêtes Bilibili (téléchargement, appel API, commentaire) DOIVENT inclure un Cookie, même pour une résolution standard. Sans Cookie, vous obtiendrez une erreur 412.
Table de routage des fonctionnalités
| Tâche | Documentation détaillée | Script / Commande rapide |
|---|---|---|
| Obtention / rafraîchissement du Cookie (connexion par QR code) | references/cookie-login.md | Documentation intégrée au flux (avec code Python complet) |
| Recherche vidéo / utilisateur (WBI) | references/cookie-login.md | `scripts/bili_wbi_search.py "<mot-clé>" [video |
| Téléchargement de vidéo | references/video-download.md + section yt-dlp de references/cookie-login.md | scripts/cookie_to_netscape.py → yt-dlp |
| Publier / répondre / supprimer un commentaire | references/comment-api.md | scripts/post_reply.sh <BVID> <message> [root_rpid] [parent_rpid] |
| Robot de commentaire automatique | references/auto-comment.md | scripts/bili_auto_comment.py --count 30 --interval 600 |
| Envoyer un message privé | references/message-browser.md | Procédure navigateur, voir documentation (api.vc est verrouillé par le système anti-fraude) |
| Rapport quotidien PPT des tendances | references/daily-report.md | bash ~/.hermes/skills/bilibili/scripts/run_daily.sh |
| Validation complète des fonctionnalités ("tester si le skill fonctionne") | references/verification.md | Suivre la checklist de 10 points dans la documentation, effets secondaires minimaux |
| Extraction de danmaku | references/danmaku-protobuf.md | Voir documentation (analyse protobuf) |
| API tendances / classement | references/APIv2.popular.md, references/APIv2.ranking.md | Interfaces publiques, connexion non requise |
| Codes d'erreur / champs de l'API commentaire | references/comment-api.md (annexe avec référence de l'ancienne API reply) | — |
Base commune (À lire absolument pour toutes les fonctionnalités)
Cookie
- Fichier :
~/.bilibili-cookie, format sur une seule ligne :SESSDATA=xxx; bili_jct=xxx; DedeUserID=xxx - SESSDATA = jeton de connexion (obligatoire pour toute interface nécessitant une connexion) ; bili_jct = token CSRF (obligatoire pour les requêtes POST avec
csrf=xxx) ; DedeUserID = mid de l'utilisateur - Durée de validité : environ 30 jours. Toute interface retournant
-101ou indiquant "non connecté" via nav → Cookie expiré, suivre references/cookie-login.md pour un nouveau scan QR. Informez proactivement GK "Cookie expiré, besoin d'un nouveau scan QR", ne le laissez pas le découvrir lui-même - Avant toute opération nécessitant un Cookie, appelez d'abord l'interface nav pour une vérification rapide
- yt-dlp avec
--cookiesn'accepte que le format Netscape : exécutez d'abordpython3 ~/.hermes/skills/bilibili/scripts/cookie_to_netscape.py(sortie : /tmp/bili_netscape_cookie.txt) - Le compte actuellement connecté est déterminé par l'interface nav (
x/web-interface/nav) en temps réel, ne pas coder en dur un UID spécifique
Conventions de requête
- User-Agent uniforme : utilisez la chaîne Chrome complète :
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36(un UA trop court déclenche des mesures anti-fraude) - POST doit impérativement inclure
Referer: https://www.bilibili.com/video/{BVID}+Origin: https://www.bilibili.com+csrf - L'interface de recherche doit utiliser le chemin
/x/web-interface/wbi/search/type(toute route non-wbi renvoie une page d'erreur HTML)
Tableau de fiabilité des API (testé avec l'IP du serveur)
| Interface | Statut |
|---|---|
view (BVID→AID/CID) | Stable |
wbi/search/type (video/bili_user, sans signature wbi) | Fonctionnel |
reply/main / reply/add / reply/del | Fonctionnel |
popular / ranking/v2 | Fonctionnel, public, connexion non requise |
space/arc/search | -799 rate limit, ne pas utiliser |
search/type (sans chemin wbi) | Anti-fraude, renvoie page d'erreur HTML |
api.vc.bilibili.com (message privé) | Totalement verrouillé, uniquement via l'interface navigateur |
Codes d'erreur critiques
| Code | Signification | Action |
|---|---|---|
| -101 | Non connecté / Cookie invalide | Rescanner le QR code |
| -509 | Requêtes trop fréquentes | Attendre 5-10 secondes puis réessayer |
| -799 | IP du serveur limitée | Changer de chemin d'interface, réessais inutiles |
| -635 | Commentaires interdits sur la vidéo | Passer |
| -637 | Mot sensible | Passer / modifier le texte |
| 12014 | Limite quotidienne de commentaires atteinte | Arrêter le script et attendre 24 heures (pas quelques heures), ne pas redémarrer à intervalles courts |
| 412 | Téléchargement sans Cookie / anti-fraude | Utiliser un Cookie au format Netscape ou la méthode API |
| 12061 | L'UP a fermé la section commentaires | Passer |
Essentiel par fonctionnalité
Téléchargement vidéo
Priorité à yt-dlp + Cookie Netscape (permet de débloquer 1080P). En cas d'erreur 412 avec yt-dlp, basculer vers la méthode API : playurl avec fnval=0&platform=html5 pour obtenir un lien direct mp4 via durl (les flux dash séparés retournent 403 sans connexion), le téléchargement CDN doit inclure Referer: https://www.bilibili.com. qn : 16=360p 32=480p 64=720p 80=1080p.
Commentaires
oid est l'avid et non le bvid, il faut d'abord le convertir via l'interface view. Commentaire racine : root=0 parent=0 ; réponse : inclure root+parent. Pour trouver la dernière vidéo d'un utilisateur : recherche wbi search_type=video&order=pubdate et prendre le premier résultat. En cas de -509, attendre 5-10 secondes.
Robot de commentaire automatique
--count 30 --interval 600 (100/300 provoquent 12014). Avant de lancer, vérifier les processus résiduels avec ps aux | grep bili_auto_comment. Chaque commentaire : délai aléatoire de 1 à 3 secondes. Pour un arrière-plan persistant, utiliser terminal(background=true) ou crontab, pas nohup/disown. Arrêt immédiat en cas de 12014 massif.
Messages privés
L'api.vc n'est accessible ni via curl depuis l'IP du serveur ni via XHR depuis la page. Seule solution : navigateur → injecter le Cookie → page espace → cliquer sur "Envoyer un message" → saisir dans .brt-editor (doit dispatcher un événement input) → cliquer sur le bouton avec sélecteur flou [class*="_MessageSendBox__SendBtn_"]. Pour les utilisateurs non suivis, limitation à 1 message (pas une erreur).
Rapport quotidien
bash /home/ubuntu/bilibili-daily/run_daily.sh : une commande pour l'ensemble du flux, pas besoin de Cookie, environ 15 secondes. Le script maître se trouve dans scripts/ de ce skill, les données et la sortie PPT dans /home/ubuntu/bilibili-daily/. Piège de pptxgenjs : la couleur ne prend pas le #, l'objet option doit être recréé à chaque fois.
Pièges globaux
- Toujours inclure un Cookie dans les requêtes Bilibili, sinon erreur 412
- Le QR code doit être enregistré en fichier PNG pour que GK le scanne (/home/ubuntu/Downloads/bilibili_qrcode.png), ne jamais imprimer un QR code ASCII
- Les champs de recherche/titre contiennent des balises de surbrillance
<em class="keyword">, nettoyer avecre.sub(r'<[^>]+>', '', title) - En cas de 412/403, ajouter les cookies buvid3/buvid4 pour contrer l'anti-fraude
- Pour popular/ranking, espacement d'au moins 1 seconde entre chaque page pour éviter -799
- Pour les pièges spécifiques à chaque fonction, voir les documents references correspondants