JSFiddle - React, Tailwind, and code Playground

by Mert Ener

HTML

<h2>OK.ru HTML Embed'den Video Linki Çıkarıcı</h2>
    <p>HTML elementini (div veya tum snippet'i) aşağıdaki alana yapıştırın:</p>
    
    <textarea id="rawInput" placeholder="HTML kodunu buraya yapıştırın..."></textarea>
    <button onclick="extractVideoUrl()">1080p Linki Üret</button>

    <div id="output" class="result" style="display:none;"></div>

CSS

body { font-family: sans-serif; max-width: 700px; margin: 30px auto; padding: 0 20px; }
        textarea { width: 100%; height: 180px; margin-bottom: 10px; font-family: monospace; }
        button { padding: 10px 20px; font-size: 16px; cursor: pointer; }
        .result { margin-top: 20px; padding: 15px; background: #f0f0f0; border-radius: 5px; word-break: break-all; }
        a { color: #0066cc; font-weight: bold; }

JavaScript

function extractVideoUrl() {
            const rawText = document.getElementById('rawInput').value;
            const outputDiv = document.getElementById('output');

            try {
                // 1. HTML Entity'leri çözmek için geçici bir DOM elementi kullanıyoruz (&quot; -> ")
                const parser = new DOMParser();
                const decodedText = parser.parseFromString(rawText, 'text/html').body.textContent;

                // 2. "metadata" JSON string'ini regex ile buluyoruz
                const metadataMatch = rawText.match(/&quot;metadata&quot;:&quot;(.*?)&quot;,&quot;saveLastPlayingTimeFrom&quot;/);

                if (!metadataMatch || !metadataMatch[1]) {
                    // Alternatif arama: Çözülmüş metin üzerinden regex
                    const altMatch = decodedText.match(/"metadata":"(.*?)","saveLastPlayingTimeFrom"/);
                    if (!altMatch) {
                        throw new Error("Metadata alanı HTML içerisinde bulunamadı.");
                    }
                }

                // 3. İç içe geçmiş kaçış karakterlerini (unescape) düzeltiyoruz
                let metadataStr = (metadataMatch ? metadataMatch[1] : altMatch[1])
                    .replace(/\\&quot;/g, '"')
                    .replace(/\\"/g, '"')
                    .replace(/\\\\u0026/g, '&')
                    .replace(/\\u0026/g, '&');

                const metadata = JSON.parse(metadataStr);

                // 4. Video dizisinden 1080p (full) veya en yüksek kaliteyi buluyoruz
                const videos = metadata.videos;
                let targetVideo = videos.find(v => v.name === 'full') 
                               || videos.find(v => v.name === 'hd') 
                               || videos[videos.length - 1];

                if (targetVideo && targetVideo.url) {
                    outputDiv.style.display = 'block';
                    outputDiv.innerHTML = `
                       ...