您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
CTRL+SHIFT: MP4 | CTRL+ALT: MP3 indir. YouTube sayfasına buton ekle, başlık otomatik, fallback site, ayarlar menüsü, reklam engelleme, sesli bildirim. FULL PRO paketi!
当前为
// ==UserScript== // @name YouTube SaveFrom MP3+MP4 Downloader PRO // @namespace http://tampermonkey.net/ // @version 7.0 // @description CTRL+SHIFT: MP4 | CTRL+ALT: MP3 indir. YouTube sayfasına buton ekle, başlık otomatik, fallback site, ayarlar menüsü, reklam engelleme, sesli bildirim. FULL PRO paketi! // @author ali // @match https://www.youtube.com/watch* // @grant none // @license MIT // ==/UserScript== (function () { 'use strict'; // Ayarlar (değiştirilebilir) const settings = { savefromBase: "https://en.savefrom.net/1/", fallbackBase: "https://y2mate.com/youtube/", enableButtons: true, enableToast: true, enableSound: true, soundUrl: "https://actions.google.com/sounds/v1/cartoon/wood_plank_flicks.ogg", }; // Ses objesi const sound = new Audio(settings.soundUrl); // Toast mesajı fonksiyonu function showToast(message) { if (!settings.enableToast) return; const toast = document.createElement('div'); toast.textContent = message; toast.style.cssText = ` position: fixed; top: 20px; right: 20px; background: #1f1f1f; color: white; padding: 12px 20px; border-radius: 8px; box-shadow: 0 0 10px #00000080; font-family: sans-serif; z-index: 999999; opacity: 0; transition: opacity 0.5s ease; `; document.body.appendChild(toast); setTimeout(() => toast.style.opacity = 1, 100); setTimeout(() => { toast.style.opacity = 0; setTimeout(() => toast.remove(), 1000); }, 3000); } // Video başlığı al function getVideoTitle() { const title = document.querySelector('h1.title yt-formatted-string') || document.querySelector('h1.title') || document.title; return title ? title.textContent.trim() : "video"; } // URL oluşturucu (SaveFrom format) function buildSaveFromUrl(videoUrl) { return settings.savefromBase + encodeURIComponent(videoUrl) + ".html"; } // URL oluşturucu (Fallback site y2mate) function buildFallbackUrl(videoUrl) { return settings.fallbackBase + encodeURIComponent(videoUrl); } // İndirme açılır penceresi function openDownloadPage(type) { const videoUrl = window.location.href; let urlToOpen = buildSaveFromUrl(videoUrl); // Önce SaveFrom deneyelim, eğer hata olursa fallback açalım fetch(urlToOpen, { method: 'HEAD' }) .then(response => { if (!response.ok) throw new Error('SaveFrom hata'); openUrl(urlToOpen, type); }) .catch(() => { // fallback urlToOpen = buildFallbackUrl(videoUrl); openUrl(urlToOpen, type); }); } // Pencere açıcı function openUrl(url, type) { window.open(url, '_blank'); if (settings.enableToast) showToast(type + " için yönlendiriliyorsun..."); if (settings.enableSound) sound.play(); } // Ayarlar menüsü function createSettingsMenu() { const btn = document.createElement('button'); btn.textContent = "⚙️ İndirici Ayarları"; btn.style.cssText = ` position: fixed; top: 80px; right: 20px; z-index: 9999999; padding: 8px 12px; border-radius: 6px; border: none; background: #ff4444; color: white; font-weight: 700; cursor: pointer; font-family: sans-serif; `; document.body.appendChild(btn); const panel = document.createElement('div'); panel.style.cssText = ` position: fixed; top: 120px; right: 20px; width: 260px; background: #222; border-radius: 8px; padding: 15px; font-family: sans-serif; color: white; display: none; z-index: 9999999; box-shadow: 0 0 15px #000; `; panel.innerHTML = ` <h3 style="margin-top:0;">Downloader Ayarları</h3> <label><input type="checkbox" id="toggleButtons" checked> Butonları Göster</label><br> <label><input type="checkbox" id="toggleToast" checked> Toast Mesajları</label><br> <label><input type="checkbox" id="toggleSound" checked> Ses Bildirimi</label> <br><br> <button id="closeSettings" style="background:#ff4444;color:#fff;padding:5px 10px;border:none;border-radius:4px;cursor:pointer;">Kapat</button> `; document.body.appendChild(panel); btn.addEventListener('click', () => { panel.style.display = panel.style.display === 'none' ? 'block' : 'none'; }); panel.querySelector('#closeSettings').addEventListener('click', () => { panel.style.display = 'none'; }); // Checkbox eventleri panel.querySelector('#toggleButtons').addEventListener('change', e => { settings.enableButtons = e.target.checked; toggleButtons(e.target.checked); }); panel.querySelector('#toggleToast').addEventListener('change', e => { settings.enableToast = e.target.checked; }); panel.querySelector('#toggleSound').addEventListener('change', e => { settings.enableSound = e.target.checked; }); } // Butonları ekle / kaldır let buttonsContainer = null; function createButtons() { if (buttonsContainer) return; buttonsContainer = document.createElement('div'); buttonsContainer.style.cssText = ` position: fixed; top: 50px; right: 20px; z-index: 999999; display: flex; flex-direction: column; gap: 8px; font-family: sans-serif; `; const btnMp4 = document.createElement('button'); btnMp4.textContent = "► MP4 İndir"; btnMp4.style.cssText = ` padding: 8px 14px; border: none; border-radius: 6px; background: #3b82f6; color: white; font-weight: 600; cursor: pointer; `; btnMp4.title = "MP4 olarak indir"; btnMp4.onclick = () => openDownloadPage("MP4"); const btnMp3 = document.createElement('button'); btnMp3.textContent = "♫ MP3 İndir"; btnMp3.style.cssText = ` padding: 8px 14px; border: none; border-radius: 6px; background: #ef4444; color: white; font-weight: 600; cursor: pointer; `; btnMp3.title = "MP3 olarak indir"; btnMp3.onclick = () => openDownloadPage("MP3"); buttonsContainer.appendChild(btnMp4); buttonsContainer.appendChild(btnMp3); document.body.appendChild(buttonsContainer); } function removeButtons() { if (buttonsContainer) { buttonsContainer.remove(); buttonsContainer = null; } } function toggleButtons(show) { if (show) createButtons(); else removeButtons(); } // Kısayol tuşları window.addEventListener('keydown', function (e) { if (document.activeElement.tagName === "INPUT" || document.activeElement.tagName === "TEXTAREA") return; if (e.ctrlKey && e.shiftKey) { e.preventDefault(); openDownloadPage("MP4"); } if (e.ctrlKey && e.altKey) { e.preventDefault(); openDownloadPage("MP3"); } }); // Reklam tarzı sahte butonları gizle (SaveFrom tarzı siteler için) function removeFakeAds() { const adSelectors = [ '#sf_wrapper > div.sf_advanced > div#sf_quality > div#sf_video > div#sf_video > div#sf_result > div.sf_result__links', '.sf_result__item.sf_result__item--ad', '.sf_result__footer-ad' ]; adSelectors.forEach(sel => { document.querySelectorAll(sel).forEach(el => el.style.display = 'none'); }); } // İlk sayfa yüklemesinde ayar menüsü ve butonları kur window.addEventListener('load', () => { createSettingsMenu(); if (settings.enableButtons) createButtons(); }); })();