# bilibili.tv Scraper + Downloader Scraper dan downloader untuk **bilibili.tv** (Bilibili International / Bstation). Support UGC, OGV/episode, short link, dan raw ID. --- ## Instalasi ```bash npm install axios ffmpeg -version # pastikan ffmpeg tersedia ``` Tambahkan `"type": "module"` di `package.json` karena file ini menggunakan ESM. --- ## Penggunaan ### Ambil info stream (JSON) ```bash node bilibili.js ``` ```bash node bilibili.js "https://www.bilibili.tv/id/video/4800343157513216" node bilibili.js "https://bili.im/WnPvKUr" node bilibili.js 4800343157513216 ``` Output JSON berisi semua kualitas yang bisa diakses, ukuran file, codec, dan `locked_qualities` untuk kualitas yang terkunci (butuh premium). --- ### Download MP4 ```bash node bilibili.js -d [kualitas] ``` ```bash node bilibili.js "https://bili.im/WnPvKUr" -d 4K node bilibili.js 4800343157513216 -d 1080P node bilibili.js "https://www.bilibili.tv/id/video/4800343157513216" -d ``` Jika kualitas tidak disebutkan, default ke **kualitas tertinggi yang tersedia**. Jika kualitas yang diminta tidak ada, otomatis fallback ke yang tertinggi. --- ## Kualitas yang tersedia | Flag | Keterangan | |------|-----------| | `144P` | 144p | | `240P` | 240p | | `360P` | 360p | | `480P` | 480p | | `720P` | 720p — batas tertinggi tanpa cookie | | `1080P` | 1080p | | `1080P HD` | 1080p High Definition | | `1080P 60FPS` | 1080p 60fps | | `4K` | Ultra HD | Untuk kualitas dengan spasi, gunakan tanda kutip: `-d "1080P HD"`, `-d "1080P 60FPS"`. --- ## Contoh output ### Info stream ![output metadata](https://lokerku.pages.dev/i/s2ozrldr) ### Download ![output download ke local](https://lokerku.pages.dev/i/euuk7ify) --- ## Batas kualitas & cookie Berdasarkan pengujian langsung pada API: **Tanpa cookie** — maksimal **720P**. Kualitas di atasnya ada di response API tapi URL-nya dikosongkan server-side (`locked_qualities` di output JSON). **Dengan cookie login/premium** — bisa akses hingga 4K tergantung konten. Cookie bisa dari akun biasa atau premium, tergantung konten yang di-lock. Field `cookie_status` di output JSON: - `none` — tidak ada cookie - `valid` — cookie aktif, kualitas premium terbuka - `invalid/expired` — cookie ada tapi tetap dapat 720P saja --- ## Cookie (untuk 1080P+ / premium) ### Via CLI ```bash node bilibili.js -d 4K --cookie "SESSDATA=xxx; bili_jct=yyy" ``` ### Via `.env` Buat file `.env` di folder yang sama dengan script: ```env BILIBILI_COOKIE=SESSDATA=xxx%2C...; bili_jct=yyy ``` Lalu jalankan seperti biasa tanpa `--cookie`. Priority: `--cookie` arg > `.env`. Cookie bisa didapat dari browser setelah login ke bilibili.tv — DevTools → Application → Cookies → `www.bilibili.tv`. --- ## Kenapa URL tidak bisa dibuka langsung di browser? URL stream dari bilibili.tv bersifat **signed** dan membutuhkan header `Referer: https://www.bilibili.tv/`. Tanpa header tersebut: - Browser: video tidak bisa diputar - `curl` tanpa header: file terdownload tapi **corrupt** — karena video dan audio disimpan **terpisah** (format `.m4s`), bukan satu file MP4 utuh Flag `-d` menangani semua ini: download video + audio dengan header yang benar, lalu **merge otomatis via ffmpeg** menjadi `.mp4` yang siap diputar. --- ## Short link yang didukung `bili.im` · `b23.tv` · `b23.app` · `b23.wtf` · `b23.tf` · `b23.icu` · `b23bb.tv` · `bili2233.cn` · `bili2233.ch` · `bstation.app` --- ## Format URL yang didukung ``` https://www.bilibili.tv/id/video/4800343157513216 ← UGC https://www.bilibili.tv/en/video/4800343157513216 ← UGC (English) https://www.bilibili.tv/play/12345/67890 ← OGV / episode https://bili.im/WnPvKUr ← short link 4800343157513216 ← raw ID ``` --- ## Dependensi - [axios](https://github.com/axios/axios) — HTTP client - [ffmpeg](https://ffmpeg.org/) — merge video + audio (wajib terinstall di sistem)