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 (" -> ")
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(/"metadata":"(.*?)","saveLastPlayingTimeFrom"/);
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(/\\"/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 = `
...