🎉 欢迎访问GreasyFork.Org 镜像站!本镜像站由公众号【爱吃馍】搭建,用于分享脚本。联系邮箱📮

Greasy fork 爱吃馍镜像

Youtube MP3 download button → ytmp3 (auto-download) - (by SuchtiOnTour)

Aggiunge un pulsante Download accanto al pulsante Condividi e scarica automaticamente l’MP3 tramite ytmp3.la

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

You will need to install an extension such as Tampermonkey to install this script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

🚀 安装遇到问题?关注公众号获取帮助

公众号二维码

扫码关注【爱吃馍】

回复【脚本】获取最新教程和防失联地址

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

🚀 安装遇到问题?关注公众号获取帮助

公众号二维码

扫码关注【爱吃馍】

回复【脚本】获取最新教程和防失联地址

// ==UserScript==
// @name            Youtube MP3 download button → ytmp3 (auto-download) - (by SuchtiOnTour)
// @name:de         Youtube MP3 download button → ytmp3 (Auto-Download) - (by SuchtiOnTour)
// @namespace       Violentmonkey Scripts
// @version         1.6.0
// @author          SuchtiOnTour
// @license         MIT
// @match           https://www.youtube.com/watch*
// @match           https://*.youtube.com/*
// @match           https://ytmp3.la/*
// @match           https://ytmp3.as/*
// @grant           GM_addStyle
// @run-at          document-idle
// @description     Adds a Download button next to the Share button and auto-downloads the MP3 via ytmp3.la
// @description:pt-BR Adiciona um botão Download ao lado de Compartilhar e baixa MP3 automaticamente pelo ytmp3.la
// @description:ar  يضيف زر تنزيل بجوار زر المشاركة ويُحمّل ملف MP3 تلقائياً عبر ytmp3.la
// @description:bg  Добавя бутон „Сваляне“ до бутона „Сподели“ и автоматично сваля MP3 чрез ytmp3.la
// @description:cs  Přidá tlačítko Stáhnout vedle tlačítka Sdílet a automaticky stáhne MP3 přes ytmp3.la
// @description:da  Tilføjer en Download-knap ved siden af Del og downloader automatisk MP3 via ytmp3.la
// @description:de  Fügt rechts neben „Teilen“ einen Download-Button ein und lädt die MP3 über ytmp3.la automatisch herunter
// @description:el  Προσθέτει κουμπί Λήψη δίπλα στο κουμπί Κοινοποίηση και κατεβάζει αυτόματα το MP3 μέσω ytmp3.la
// @description:eo  Aldonas elŝutan butonon apud la butono Kunhavigi kaj aŭtomate elŝutas MP3 per ytmp3.la
// @description:es  Añade un botón Descargar junto al botón Compartir y descarga automáticamente el MP3 vía ytmp3.la
// @description:fi  Lisää Lataa-painikkeen Jaa-painikkeen viereen ja lataa MP3-tiedoston automaattisesti ytmp3.la-palvelusta
// @description:fr  Ajoute un bouton Télécharger à côté de Partager et lance automatiquement le téléchargement MP3 via ytmp3.la
// @description:fr-CA Ajoute un bouton Télécharger à côté de Partager et télécharge automatiquement le MP3 via ytmp3.la
// @description:he  מוסיף כפתור הורדה ליד כפתור השיתוף ומוריד אוטומטית את ה-MP3 דרך ytmp3.la
// @description:hu  Letöltés gombot ad a Megosztás gomb mellé, és automatikusan letölti az MP3-at a ytmp3.la-n
// @description:id  Menambahkan tombol Download di samping tombol Bagikan dan otomatis mengunduh MP3 via ytmp3.la
// @description:it  Aggiunge un pulsante Download accanto al pulsante Condividi e scarica automaticamente l’MP3 tramite ytmp3.la
// @description:ja  共有ボタンの横にダウンロードボタンを追加し、ytmp3.laで自動的にMP3をダウンロードします
// @description:ko  공유 버튼 옆에 다운로드 버튼을 추가하고 ytmp3.la를 통해 MP3를 자동으로 다운로드합니다
// @description:nb  Legger til en Last ned-knapp ved siden av Del og laster automatisk ned MP3 via ytmp3.la
// @description:nl  Voegt een Download-knop naast Delen toe en downloadt automatisch de MP3 via ytmp3.la
// @description:pl  Dodaje przycisk Pobierz obok przycisku Udostępnij i automatycznie pobiera MP3 przez ytmp3.la
// @description:ro  Adaugă un buton Download lângă butonul Distribuie și descarcă automat MP3-ul prin ytmp3.la
// @description:ru  Добавляет кнопку «Скачать» рядом с кнопкой «Поделиться» и автоматически скачивает MP3 через ytmp3.la
// @description:sk  Pridá tlačidlo Stiahnuť vedľa tlačidla Zdieľať a automaticky stiahne MP3 cez ytmp3.la
// @description:sr  Додаје дугме Преузми поред дугмета Подели и аутоматски преузима MP3 преко ytmp3.la
// @description:sv  Lägger till en Hämta-knapp bredvid Dela och hämtar automatiskt MP3 via ytmp3.la
// @description:th  เพิ่มปุ่มดาวน์โหลดถัดจากปุ่ม แชร์ และดาวน์โหลด MP3 อัตโนมัติผ่าน ytmp3.la
// @description:tr  Paylaş düğmesinin yanına İndir düğmesi ekler ve MP3’ü ytmp3.la ile otomatik olarak indirir
// @description:uk  Додає кнопку «Завантажити» поруч із кнопкою «Поділитися» та автоматично завантажує MP3 через ytmp3.la
// @description:ug  «ھەمبەھىرلەش» توپچىقىنىڭ يېنىغا چۈشۈرۈش كۇنۇپكىسى قوشۇپ، ytmp3.la ئارقىلىق MP3 نى ئاپتوماتىك چۈشۈرىدۇ
// @description:vi  Thêm nút Tải xuống bên cạnh nút Chia sẻ và tự động tải MP3 qua ytmp3.la
// @description:zh-CN 在“分享”旁添加下载按钮,并通过 ytmp3.la 自动下载 MP3
// @description:zh-TW 在「分享」旁新增下載按鈕,並透過 ytmp3.la 自動下載 MP3
// ==/UserScript==



(() => {
/* ---------- YouTube: einfacher <a>-Button RECHTS von „Teilen“ ---------- */
if (location.host.includes('youtube.com')) {
  const API    = location.host.startsWith('ytmp3.') ? `https://${location.host}/#` : 'https://ytmp3.as/#';
  const BTN_ID = 'dwnldBtn';

  // Styling: gleiche Pill-Optik, mit Abstand zu Share & YouTube-Download
  try {
    GM_addStyle(`
      #${BTN_ID}{
        background:#0F0F0F;color:#FFF;border:1px solid rgba(255,255,255,.25);
        margin-left:8px; margin-right:8px; /* Abstand links & rechts */
        padding:0 16px;border-radius:18px;
        font:500 14px/normal Roboto,Noto,sans-serif;display:inline-flex;align-items:center;
        height:36px;text-decoration:none;white-space:nowrap;flex:0 0 auto;
        position:relative; z-index:1; pointer-events:auto; cursor:pointer;
      }
      #${BTN_ID}:hover{background:#3F3F3F;border-color:#3F3F3F}
    `);
  } catch {}

  const getVid  = () =>
    ((/v=([\w-]{11})|shorts\/([\w-]{11})/i.exec(location.href)||[]).slice(1).find(Boolean)) || '';
  const makeUrl = () => API + getVid() + '/mp3';

  // Aktionsleiste finden (YT testet mehrere Varianten)
  const findActions = () => {
    const sels = [
      'ytd-watch-metadata #actions-inner #top-level-buttons-computed',
      'ytd-watch-metadata #top-level-buttons-computed',
      'ytd-watch-metadata #actions-inner #actions',
      'ytd-watch-metadata #actions',
      '#actions-inner #top-level-buttons-computed',
      '#actions-inner #actions',
      '#top-level-buttons-computed',
      '#actions'
    ];
    for (const s of sels) {
      const el = document.querySelector(s);
      if (el) return el;
    }
    return null;
  };

  // „Teilen“ finden (Text, aria-label oder Share-Icon)
  const findShare = (actions) => {
    if (!actions) return null;
    const nodes = [...actions.querySelectorAll('ytd-button-renderer,button,a,yt-button-shape')];
    return nodes.find(n => {
      const t = (n.textContent || '').toLowerCase();
      const aria = (n.getAttribute?.('aria-label') || '').toLowerCase();
      const hasIcon = n.querySelector?.('yt-icon[icon="share"]');
      return /teilen|share/.test(t) || /teilen|share/.test(aria) || hasIcon;
    }) || null;
  };

  function placeOnce(){
    if (!location.pathname.startsWith('/watch')) return false;

    const actions = findActions();
    if (!actions) return false;

    const share = findShare(actions);
    if (!share) return false;

    // Duplikate wegräumen (nur 1 Button)
    const dups = [...document.querySelectorAll(`#${BTN_ID}`)];
    if (dups.length > 1) dups.slice(1).forEach(n=>n.remove());

    // Button holen/erstellen
    let a = document.getElementById(BTN_ID);
    if (!a) {
      a = document.createElement('a');
      a.id = BTN_ID;
      a.textContent = 'Download';
      a.target = '_blank';
      a.rel = 'noopener';
      // Fallback, falls irgend ein Overlay Klicks frisst
      a.addEventListener('click', (e)=>{
        const href = a.getAttribute('href');
        if (!href) { e.preventDefault(); window.open(makeUrl(), '_blank', 'noopener'); }
      }, true);
    }
    a.href = makeUrl();

    // Rechts von „Teilen“ einsetzen
    if (share.nextElementSibling !== a) {
      share.insertAdjacentElement('afterend', a);
    }
    return true;
  }

  // leichte Retry-Logik (max. ~5s), keinerlei schwere Observer
  function init(){
    let tries = 0;
    const tick = () => {
      const ok = placeOnce();
      tries++;
      if (!ok && tries < 20) setTimeout(tick, 250);
    };
    tick();
  }

  // initial + bei Navigation in der YouTube-SPA
  init();
  window.addEventListener('yt-navigate-finish', init);
  window.addEventListener('yt-page-data-updated', init);
}

/* ---------- ytmp3.*: Auto-Download auslösen ---------- */
if (location.host.startsWith('ytmp3.')) {
  const isDl = el=>{
    if(!el) return false;
    const t = (el.textContent || '').trim().toLowerCase();
    return t === 'download' || t.startsWith('download ');
  };
  const click = ()=>{
    const el = [...document.querySelectorAll('a,button')].find(isDl);
    if (el) { el.click(); console.log('[YTMP3] Download-Button geklickt'); }
    else    setTimeout(click, 400);
  };
  setTimeout(click, 200);
}
})();