Edit: cbjson
Nama Worker
Kode Sumber
/* * Nama Worker: JSON to M3U Converter (v4.1 - Dynamic Referrer) * Fungsi: Mengubah JSON ke M3U menggunakan format #KODIPROP * dengan Referer yang dinamis berdasarkan data dari file JSON. */ addEventListener('fetch', event => { event.respondWith(handleRequest(event.request)); }); async function handleRequest(request) { const url = new URL(request.url); const providedKey = url.searchParams.get('key'); // ===================================================================================== // --- KONFIGURASI ANDA --- // ===================================================================================== const SECRET_KEY = 'KUDACUKI'; const JSON_PLAYLIST_URL = 'https://raw.githubusercontent.com/KR7Team/KR7Team/refs/heads/main/playlist.json'; // Pengaturan DRM Statis const DRM_LICENSE_TYPE = 'clearkey'; // ===================================================================================== // --- JANGAN UBAH KODE DI BAWAH INI --- // ===================================================================================== if (providedKey !== SECRET_KEY) { return new Response('Akses Ditolak: Kunci Rahasia Salah.', { status: 403 }); } try { const response = await fetch(JSON_PLAYLIST_URL); if (!response.ok) throw new Error(`Gagal mengambil file JSON. Status: ${response.status}`); const data = await response.json(); const categoryMap = new Map(data.categories.map(cat => [cat.id, cat.name])); let m3uOutput = '#EXTM3U\n'; for (const channel of data.channels) { const groupTitle = categoryMap.get(channel.cid) || 'Tanpa Kategori'; const logo = channel.poster || ''; const channelName = channel.name; const streamUrl = channel.stream_url; const licenseUrl = channel.deremel || ''; const drmUserAgent = channel.drmuseragent || 'Google'; // Ambil Referer dari JSON jika ada const referrer = channel.referer || ''; // Hanya tambahkan baris DRM jika channel memiliki URL lisensi if (licenseUrl) { // **PERUBAHAN DI SINI** // Hanya tambahkan header Referer jika ada datanya di JSON if (referrer) { m3uOutput += `#EXTVLCOPT:http-referrer=${referrer}\n`; } m3uOutput += `#EXTVLCOPT:http-user-agent=${drmUserAgent}\n`; m3uOutput += `#KODIPROP:inputstream.adaptive.license_type=${DRM_LICENSE_TYPE}\n`; m3uOutput += `#KODIPROP:inputstream.adaptive.license_key=${licenseUrl}\n`; } m3uOutput += `#EXTINF:-1 tvg-logo="${logo}" group-title="${groupTitle}",${channelName}\n`; m3uOutput += `${streamUrl}\n`; } return new Response(m3uOutput, { headers: { 'Content-Type': 'application/vnd.apple.mpegurl; charset=utf-8', 'Access-Control-Allow-Origin': '*', }, }); } catch (e) { return new Response(`Terjadi error saat membuat playlist: ${e.message}`, { status: 500 }); } }
Bindings
Tambah KV
Tambah R2
Tambah D1
← Kembali
Simpan & Deploy
Hapus Script Worker Ini