vhugoelosegui

Mediafire Link Converter For JDownloader

Jul 18th, 2025
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.86 KB | Help | 0 0
  1. // ==UserScript==
  2. // @name Mediafire Link Converter For JDownloader
  3. // @namespace TampermonkeyScripts
  4. // @version 1.1
  5. // @author vhugoelosegui
  6. // @description Convierte enlaces de Mediafire a enlaces directos para JDownloader.
  7. // @match https://www.mediafire.com/
  8. // @grant GM_setClipboard
  9. // ==/UserScript==
  10.  
  11. function checkUrl(link) {
  12. try {
  13. new URL(link);
  14. return true;
  15. }
  16. catch (error) {
  17. return false;
  18. }
  19. }
  20.  
  21. // Contenedor principal para la interfaz
  22. document.body.insertAdjacentHTML('afterbegin', `
  23. <div style="margin-bottom: 20px; padding: 15px; border: 1px solid #ccc; background-color: #f9f9f9; border-radius: 8px; z-index: 999999;">
  24. <h3 style="margin-top: 0; color: #333;">Conversor de Enlaces Mediafire para JDownloader</h3>
  25. <textarea id="input_md_converter" style="width:100%; min-height:150px; margin-bottom: 10px; padding: 10px; border: 1px solid #ddd; border-radius: 4px;" placeholder="Pega uno o más enlaces de Mediafire aquí (uno por línea)"></textarea>
  26. <button id="copy_all_button" style="padding: 10px 15px; background-color: #007bff; color: white; border: none; border-radius: 4px; cursor: pointer;">Copiar todo al portapapeles</button>
  27. <h4 style="margin-top: 20px; margin-bottom: 5px; color: #333;">Enlaces Convertidos:</h4>
  28. <textarea id="output_md_converter" style="width:100%; min-height:150px; padding: 10px; border: 1px solid #ddd; border-radius: 4px; background-color: #e9e9e9;" readonly placeholder="Los enlaces convertidos aparecerán aquí..."></textarea>
  29. <div id="error_messages" style="color: red; margin-top: 10px;"></div>
  30. </div>
  31. `);
  32.  
  33. // Ajuste del encabezado (puede ser opcional si ya no causa problemas visuales)
  34. document.querySelector("header#header")?.setAttribute("style", "position:relative!important");
  35.  
  36. let inputContainer = document.getElementById("input_md_converter");
  37. let outputContainer = document.getElementById("output_md_converter");
  38. let copyButton = document.getElementById("copy_all_button");
  39. let errorMessagesDiv = document.getElementById("error_messages");
  40.  
  41. // Función para copiar al portapapeles (requiere @grant GM_setClipboard)
  42. copyButton.addEventListener("click", () => {
  43. const textToCopy = outputContainer.value;
  44. if (textToCopy) {
  45. GM_setClipboard(textToCopy);
  46. copyButton.textContent = "¡Copiado!";
  47. setTimeout(() => {
  48. copyButton.textContent = "Copiar todo al portapapeles";
  49. }, 2000);
  50. } else {
  51. copyButton.textContent = "Nada que copiar";
  52. setTimeout(() => {
  53. copyButton.textContent = "Copiar todo al portapapeles";
  54. }, 2000);
  55. }
  56. });
  57.  
  58. inputContainer.addEventListener("input", async () => {
  59. const links = inputContainer.value.split("\n").map(link => link.trim()).filter(link => link.length > 0);
  60. let convertedLinks = [];
  61. errorMessagesDiv.innerHTML = ""; // Limpiar mensajes de error anteriores
  62.  
  63. if (links.length > 0) {
  64. for (const trimmedLink of links) {
  65. if (checkUrl(trimmedLink) && trimmedLink.includes("mediafire.com")) {
  66. try {
  67. const res = await fetch(trimmedLink);
  68. const data = await res.text();
  69.  
  70. const tempDiv = document.createElement('div');
  71. tempDiv.style.display = 'none';
  72. tempDiv.innerHTML = data;
  73. document.body.appendChild(tempDiv);
  74.  
  75. let downloadButton = tempDiv.querySelector('#downloadButton');
  76.  
  77. if (downloadButton) {
  78. let scrambledUrl = downloadButton.getAttribute('data-scrambled-url');
  79. if (scrambledUrl) {
  80. let decodedUrl = atob(scrambledUrl);
  81. convertedLinks.push(decodedUrl);
  82. } else {
  83. errorMessagesDiv.innerHTML += `<div>⚠️ No se encontró URL codificada para: ${trimmedLink}</div>`;
  84. console.warn(`No se encontró 'data-scrambled-url' en el botón de descarga para: ${trimmedLink}`);
  85. }
  86. } else {
  87. errorMessagesDiv.innerHTML += `<div>❌ Botón de descarga no encontrado para: ${trimmedLink}</div>`;
  88. console.warn(`No se encontró el botón de descarga (#downloadButton) en: ${trimmedLink}`);
  89. }
  90. tempDiv.remove(); // Eliminar el div temporal
  91. } catch (error) {
  92. errorMessagesDiv.innerHTML += `<div>❌ Error al procesar: ${trimmedLink}</div>`;
  93. console.error(`Error al procesar el enlace ${trimmedLink}:`, error);
  94. }
  95. } else {
  96. if (trimmedLink.length > 0) { // Solo mostrar error si la línea no está vacía
  97. errorMessagesDiv.innerHTML += `<div>❗ Formato de URL incorrecto o no es de Mediafire: ${trimmedLink}</div>`;
  98. }
  99. }
  100. }
  101. outputContainer.value = convertedLinks.join('\n'); // Mostrar enlaces en el textarea de salida
  102. } else {
  103. outputContainer.value = "";
  104. }
  105. });
Add Comment
Please, Sign In to add comment