尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗REST API scraper untuk OPPADRAMA — drama Korea/China/Thailand/Jepang, series, anime, variety show, dan film subtitle Indonesia.
Menyediakan metadata lengkap (judul alternatif, sinopsis, cast, sutradara, genre, rating, status, negara, jaringan TV), daftar episode, server streaming HLS (1080p / 720p / 480p) yang siap diputar di hls.js / Video.js, link download, pencarian, dan seluruh arsip taksonomi.
pip install -r requirements.txt
python -m oppadrama_api.app
# -> http://127.0.0.1:5000/docs
⚠️ Proyek edukasi. API ini tidak menghosting konten apa pun. Semua data dibaca dari halaman publik oppadrama.io dan tautan streaming dimiliki pihak ketiga. Gunakan dengan bijak dan hormati situs sumber.
| Method | Path | Isi |
|---|---|---|
| GET | / | Daftar endpoint |
| GET | /health | Status layanan & cache |
| GET | /docs | Dokumentasi Swagger UI |
| GET | /player | Halaman uji pemutaran HLS di browser |
| GET | /openapi.json | Skema OpenAPI 3.0 |
| GET | /home?page=1 | Beranda: rilis terbaru, rekomendasi, sidebar |
| GET | /home/{section} | Satu bagian beranda (ongoing, recommendation, newseries, latest) |
| GET | /series | Daftar series + filter (status, tipe, genre, negara, musim, studio, network, urutan) |
| GET | /series/filters | Semua opsi filter yang tersedia |
| GET | /series/latest?page=1 | Rilisan episode terbaru |
| GET | /series/list?page=1 | Daftar A–Z (mode teks) |
| GET | /series/{slug} | Detail series lengkap |
| GET | /series/{slug}/episodes | Daftar episode satu series |
| GET | /episode/{slug} | Detail episode + seluruh server mirror + link download |
| GET | /episode/{slug}/stream | Stream HLS siap putar untuk server terpilih |
| GET | /stream?url= | Resolusi embed vidara → info stream |
| GET | /stream/playlist?u= | Proxy playlist HLS (semua URI diarahkan ulang) |
| GET | /stream/seg?u= | Relay byte segmen/subtitle (Range diteruskan) |
| GET | /search?q= | Cari drama / series / film |
| GET | /genres | Semua genre + jumlah judul |
| GET | /genre/{slug} | Series per genre |
| GET | /country/{slug} | Series per negara |
| GET | /cast/{slug} | Series per pemain |
| GET | /director/{slug} | Series per sutradara |
| GET | /tag/{slug} | Series per tag |
| GET | /network/{slug} | Series per jaringan TV |
| GET | /season/{slug} | Series per musim |
| GET | /studio/{slug} | Series per studio |
| GET | /domains | Info domain aktif & kandidat cadangan |
Section beranda: ongoing (Sedang Tayang), recommendation (Rekomendasi per genre),
newseries (Judul Drama/Series Baru), latest (Rilisan Terbaru).
curl 'http://127.0.0.1:5000/home'
curl 'http://127.0.0.1:5000/home/ongoing'
curl 'http://127.0.0.1:5000/search?q=deception'
curl 'http://127.0.0.1:5000/series/100-days-of-deception'
curl 'http://127.0.0.1:5000/series/100-days-of-deception/episodes'
curl 'http://127.0.0.1:5000/episode/100-days-of-deception-episode-4'
# Drama Korea yang sedang tayang, urut terbaru
curl 'http://127.0.0.1:5000/series?country=south-korea&status=ongoing&order=update'
# Beberapa genre sekaligus
curl 'http://127.0.0.1:5000/series?genre=action&genre=romance&type=drama'
Satu langkah — ambil stream siap pakai:
curl 'http://127.0.0.1:5000/episode/100-days-of-deception-episode-4/stream'
Respons memuat data.masterProxyUrl (playlist master lewat proxy API) dan
data.qualities[] dengan proxyUrl per kualitas. Tunjuk masterProxyUrl atau
proxyUrl mana pun langsung ke hls.js:
<script src="https://cdn.jsdelivr.net/npm/hls.js@1"></script>
<video id="v" controls></video>
<script>
const src = "http://127.0.0.1:5000" + data.masterProxyUrl; // dari response API
const video = document.getElementById("v");
if (Hls.isSupported()) {
const hls = new Hls();
hls.loadSource(src);
hls.attachMedia(video);
} else {
video.src = src; // Safari/iOS native HLS
}
</script>
Pilih server lain bila ada beberapa mirror:
curl 'http://127.0.0.1:5000/episode/100-days-of-deception-episode-4/stream?server=2'
Atau resolusi manual dari URL embed:
curl 'http://127.0.0.1:5000/stream?url=https://vidara.to/e/2gxTamNdmrlOo'
Buka http://127.0.0.1:5000/player, masukkan slug episode, klik Muat Stream.
Halaman itu memakai hls.js dan memutar lewat endpoint proxy API yang sama —
cara tercepat memastikan hasil scraping benar-benar bisa diputar.
Kenapa perlu proxy? Playlist HLS dari CDN penyedia membawa token yang terikat
ke alamat IP pemanggil dan bisa menolak permintaan lintas-origin. Endpoint
/stream/playlist dan /stream/seg meneruskan permintaan dengan Referer yang
benar, menulis ulang setiap URI di playlist agar menunjuk kembali ke API, dan
meneruskan header Range, sehingga hasilnya dapat diputar dari mana saja.
Semua endpoint mengembalikan JSON dengan pembungkus konsisten:
{ "success": true, "data": { "...": "..." } }
Error:
{ "success": false, "message": "Series tidak ditemukan", "hint": "..." }
Kode status: 400 parameter tidak valid, 404 slug tidak ada, 502 upstream gagal.
dataKartu (/home, /series, /search, arsip):
{
"title": "100 Days of Deception",
"slug": "100-days-of-deception",
"url": "https://oppadrama.io/series/100-days-of-deception/",
"type": "Drama",
"poster": "https://i2.wp.com/...jpg",
"episode": null,
"episodeLabel": "Ongoing",
"sub": "Sub",
"status": "Ongoing",
"updatedAgo": "6 hours lalu",
"movieId": "6835"
}
Detail series (/series/{slug}) menambahkan altTitle, synopsis,
description, genres, tags, rating {value,count}, meta (status, network,
country, director, cast, totalEpisodes, duration, released, updated), dan
episodes[].
Detail episode (/episode/{slug}):
{
"title": "100 Days of Deception Episode 4",
"type": "Drama",
"series": { "title": "100 Days of Deception", "slug": "100-days-of-deception" },
"mirrors": [
{ "name": "vidara.to", "host": "vidara.to",
"embed": "https://vidara.to/e/2gxTamNdmrlOo", "index": 1 }
],
"downloads": [
{ "server": "Buzzheavier", "quality": "FHD 1080p",
"url": "https://buzzheavier.com/gqo6ykb3oo3x" }
],
"prev": "https://oppadrama.io/...episode-3/",
"next": null
}
Stream (/episode/{slug}/stream, /stream):
{
"filecode": "2gxTamNdmrlOo",
"streamingUrl": "https://s13-....com/hls/.../master.m3u8?token=...",
"isMaster": true,
"qualityLabels": ["1080p", "720p", "480p"],
"masterProxyUrl": "/api/oppadrama-api/stream/playlist?u=...",
"qualities": [
{ "label": "1080p", "resolution": "1920x1080", "bandwidth": 2600000,
"url": "https://s13-.../index_1920x1080.m3u8?token=...",
"proxyUrl": "/api/oppadrama-api/stream/playlist?u=..." }
],
"subtitles": [],
"thumbnail": "https://...jpg"
}
Lewat environment variable:
| Variabel | Default | Keterangan |
|---|---|---|
PORT | 5000 | Port server |
OPPADRAMA_BASE_URL | https://oppadrama.io | Domain upstream |
OPPADRAMA_DOMAINS | https://oppadrama.io | Daftar kandidat domain (dipisah koma) |
OPPADRAMA_TIMEOUT | 25 | Timeout HTTP (detik) |
OPPADRAMA_CACHE_TTL | 300 | TTL cache halaman HTML (detik) |
OPPADRAMA_STREAM_CACHE_TTL | 600 | TTL cache hasil resolusi stream (detik) |
OPPADRAMA_MAX_RETRIES | 3 | Jumlah percobaan ulang |
OPPADRAMA_MAX_PAGE | 500 | Batas nomor halaman |
Cache disimpan di memori (tanpa database) dan dibersihkan otomatis saat entri kedaluwarsa.
gunicorn -w 4 -b 0.0.0.0:5000 'oppadrama_api.app:app'
docker build -t oppadrama-api .
docker run -d --name oppadrama-api -p 5000:5000 oppadrama-api
Aplikasi sadar akan SCRIPT_ROOT, jadi bila dipasang di sub-path seperti
/api/oppadrama-api, seluruh URL di dokumentasi dan proxy playlist otomatis
mengikuti prefix tersebut. Contoh Nginx:
location /api/oppadrama-api/ {
proxy_pass http://127.0.0.1:5001/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Prefix /api/oppadrama-api;
}
article.bs (kartu), .bigcontent .infox (detail series),
.megavid + select.mirror (episode), .eplister (daftar episode).vidara.to. Filecode pada
URL embed dikirim ke POST https://vidara.to/api/stream untuk memperoleh
master HLS bertoken. Resolver menangani host mirror dan fallback otomatis.subtitles upstream bila tersedia; saat ini
umumnya kosong.MIT. Proyek edukasi, tidak berafiliasi dengan oppadrama.io.