NONOYA API Core adalah antarmuka pemrograman aplikasi (API) scraper all-in-one yang mendukung pengambilan data dari berbagai sumber platform hiburan populer seperti Anime, Donghua, Komiku, dan Anoboy. Film, dan lain lain.
Sistem ini dirancang menggunakan Node.js dan Express, dengan penekanan pada performa, skalabilitas, serta stabilitas tinggi melalui penggunaan Cluster, In-Memory Caching, dan Rate Limiting.
- Fitur Utama
- Persyaratan Sistem
- Instalasi
- Konfigurasi Lingkungan
- Menjalankan Server
- Autentikasi
- Dokumentasi API
- Pemecahan Masalah
- Kontribusi
- Multi-Source Scraping: Menyediakan data terpadu dari Otakudesu, Donghua (Anichin), Komiku, dan Anoboy.
- Skalabilitas Multi-Worker: Terintegrasi dengan modul Cluster Node.js untuk mendistribusikan beban kerja di seluruh inti prosesor (CPU) server.
- In-Memory Caching: Cache pintar berkinerja tinggi guna mereduksi waktu respons dan mengurangi beban kueri ke sumber data asli.
- Keamanan & Rate Limiting: Dilindungi dengan header autentikasi
x-api-keydan pembatasan beban (60 permintaan per menit/IP) untuk mencegah penyalahgunaan. - Proxy M3U8 Cerdas: Menyertakan endpoint khusus guna meneruskan stream M3U8 sehingga terbebas dari restriksi Cross-Origin Resource Sharing (CORS).
- Structured Logging: Logging berbasis
pinodengan request ID, level log, response-time, dan format JSON siap observability. - API Playground: UI request tester bawaan (mirip Postman ringan) untuk mencoba endpoint scraper secara live.
- Node.js versi 18.x atau lebih baru.
- Akses ke command line / terminal.
- Disarankan menggunakan server dengan minimal 2 core CPU untuk memaksimalkan fungsionalitas Cluster.
- Clone repositori ini atau persiapkan direktori proyek pada komputer Anda.
- Navigasikan ke dalam direktori root proyek.
- Jalankan perintah instalasi dependensi berikut:
npm installSistem menggunakan file environment untuk pengaturan. Buat file .env di direktori root (Anda dapat menyalin dari .env.example jika tersedia) dan atur konfigurasi berikut:
PORT=5000
NODE_ENV=development
API_KEYS=kunci_rahasia_sangat_panjang_sekali_12345
ALLOWED_ORIGINS=http://localhost:3000,http://localhost:4321
CLUSTER_ENABLED=false
WORKERS=4
MAX_JSON_SIZE=100kb
TRUST_PROXY=1
LOG_LEVEL=debug
LOG_PRETTY=true
PLAYGROUND_ENABLED=falseKeterangan logging:
LOG_LEVEL: level log (trace,debug,info,warn,error,fatal).LOG_PRETTY:trueuntuk output terminal yang mudah dibaca saat development,falseuntuk JSON murni (direkomendasikan di production).PLAYGROUND_ENABLED:trueuntuk mengaktifkan UI playground di/playground,falseuntuk menonaktifkan total.
Terdapat beberapa opsi untuk menjalankan server tergantung lingkungan pengerjaan.
Untuk pengembangan lokal dengan dukungan live-reload (nodemon):
npm run devUntuk menjalankan secara normal:
npm startJika PLAYGROUND_ENABLED=true, buka:
http://localhost:5000/playground
Jika server berhasil dijalankan, log terminal akan menampilkan:
[2026-05-25 22:45:08.410] INFO: Server aktif {"service":"nonoya-api-core","env":"development","pid":12345,"port":5000,...}
[2026-05-25 22:45:08.411] INFO: Snapshot memori proses {"memory":{"rssMb":102,"heapUsedMb":18,"heapTotalMb":30}}
Semua rute (endpoint) di dalam nonoya API Core memerlukan autentikasi tingkat header. Kegagalan menyertakan kunci yang valid akan menghasilkan status 401 Unauthorized.
Pastikan klien yang mengonsumsi API ini menyisipkan header berikut:
- Kunci:
x-api-key - Nilai: Sesuai dengan konfigurasi
API_KEYSdi.env
Contoh permintaan menggunakan cURL:
curl -H "x-api-key: kunci_rahasia_sangat_panjang_sekali_12345" http://localhost:5000/anime/homeBase URL untuk seluruh endpoint adalah http://localhost:5000 (atau sesuaikan dengan port pada .env).
Fokus pada rilis anime dengan subtitle bahasa Indonesia.
GET /anime/home- Ikhtisar beranda (Sedang tayang & Tamat)GET /anime/schedule- Jadwal rilis animeGET /anime/ongoing-anime?page=1- Daftar anime yang sedang ditayangkanGET /anime/complete-anime/:page- Daftar anime yang sudah tamatGET /anime/search/:keyword- Pencarian animeGET /anime/anime/:slug- Detail informasi anime spesifikGET /anime/episode/:slug- Tautan stream dan data episodeGET /anime/genre- Indeks genreGET /anime/genre/:slug?page=1- Daftar anime di bawah genre spesifikGET /anime/unlimited- Indeks alfabetis seluruh koleksi
Animasi dari Tiongkok (Donghua).
GET /donghua/home/:page?- Rilis donghua terbaruGET /donghua/search/:keyword- Fungsi pencarianGET /donghua/detail/:slug- Rangkuman informasi dan daftar episodeGET /donghua/episode/:slug- Resolusi stream dan tautan episode
Baca komik dan novel grafis asiatik.
GET /komiku/home- Indeks komik terbaru dan populerGET /komiku/manga/:slug- Info detail komik dan indeks babGET /komiku/chapter/:slug- Kumpulan panel gambar untuk satu babGET /komiku/search?q=keyword- Pencarian koleksiGET /komiku/pustaka- Direktori lengkap dengan kapabilitas penyaringanGET /komiku/daftar-genre- Indeks genre globalGET /komiku/genre/:slug- Katalog berdasarkan genre spesifikGET /komiku/baca-manga,/komiku/baca-manhwa,/komiku/baca-manhua- Filter komik tipe khusus
Katalog sumber sekunder untuk serial anime.
GET /anime/anoboy/home- Koleksi pembaruan terakhirGET /anime/anoboy/search/:keyword- Fungsionalitas pencarianGET /anime/anoboy/anime/:slug- Detail dan indeks episode animeGET /anime/anoboy/episode/:slug- Tautan penyedia streaming tayangan
Koleksi film barat, lokal, dan serial televisi populer.
GET /film/lk21/home- Daftar film terbaru (latest)GET /film/lk21/home?page=2- Halaman selanjutnya untuk film terbaruGET /film/lk21/trending- Daftar film trending terpopulerGET /film/lk21/movie/:slug- Detail film, daftar server stream, dan download linkGET /film/lk21/genre/:genre- Daftar film berdasarkan kategori genre (misal:action,horror)GET /film/lk21/search?s=keyword- Pencarian film menggunakan live AJAX search API
Agregator pencarian lintas sumber.
GET /search/:keyword- Mencari secara bersamaan di Otakudesu, Anoboy, Donghua, dan Komiku
Fasilitas reverse proxy untuk mem-bypass CORS pada pemutar video berbasis web.
GET /proxy/m3u8?url={URL_M3U8}&referer={ORIGINAL_REFERER}
1. Respons 401 Unauthorized
- Penyebab: Header autentikasi salah eja, memiliki nilai tidak valid, atau tidak disertakan sama sekali.
- Solusi: Verifikasi keberadaan dan keabsahan
x-api-keydi bagian header request Anda terhadap nilaiAPI_KEYSdi.env.
2. Respons 429 Too Many Requests
- Penyebab: Klien Anda melebihi batas 60 request per menit.
- Solusi: Terapkan logika antrean request pada klien Anda atau gunakan sistem caching tambahan pada sisi klien.
3. Respons 400 Bad Request
- Penyebab: Format payload data JSON yang dikirim saat request tidak tepat (malformed JSON).
- Solusi: Evaluasi dan pastikan payload mematuhi standar JSON yang valid.
nonoya API Core selalu terbuka terhadap ulasan kode, peningkatan fungsionalitas, serta laporan bug.
Apabila Anda tertarik untuk berkontribusi, mohon ikuti alur standar pengembangan berikut:
- Lakukan forking pada repositori ini.
- Buat branch fitur Anda (contoh:
git checkout -b fitur-autentikasi-lanjutan). - Tulis pesan commit yang komprehensif dan jelas (
git commit -m 'Memperbarui mekanisme autentikasi'). - Unggah (push) perubahan menuju branch Anda di repositori fork (
git push origin fitur-autentikasi-lanjutan). - Ajukan Pull Request baru dengan deskripsi rinci terhadap perubahan yang diimplementasikan.