Sleazy Fork is available in English.

Magnet Link Collector

Collects magnet links starting with "magnet:?xt=urn:btih:" and provides copy to clipboard.

  1. // ==UserScript==
  2. // @name Magnet Link Collector
  3. // @namespace mlc
  4. // @version 1.1.0
  5. // @description Collects magnet links starting with "magnet:?xt=urn:btih:" and provides copy to clipboard.
  6. // @author wzzzzz
  7. // @license MIT
  8.  
  9. // javbus有无码jav资源、论坛
  10. // @include *://*javbus.com/*
  11. // @include *://www.*bus*/*
  12. // @include *://www.*javsee*/*
  13. // @include *://www.*seejav*/*
  14.  
  15. // onejav有FC2资源、排行榜
  16. // @include *://*onejav.com/*
  17.  
  18. // avsox有无码jav资源,含FC2 tellme.pw/avsox
  19. // @include *://*avsox.*/*
  20.  
  21. // jav321有素人资源、排行榜
  22. // @include *://*jav321.com/video/*
  23. // @grant GM_setClipboard
  24. // ==/UserScript==
  25.  
  26. (function() {
  27. 'use strict';
  28.  
  29. // 收集磁力链接
  30. function collectMagnetLinks() {
  31. function traverseDOM(element) {
  32. var magnetLinks = [];
  33.  
  34. if (element.nodeType === Node.TEXT_NODE) {
  35. // 如果当前节点是文本节点,则在文本中查找磁力链接
  36. var pattern = /(magnet:\?xt=urn:btih:)[0-9a-fA-F]{40}/g;
  37. var pattern_lite = /[0-9a-fA-F]{40}[\s]?/g;
  38. var matches = element.nodeValue.match(pattern);
  39. if (matches) {
  40. magnetLinks = magnetLinks.concat(matches);
  41. } else {
  42. var lites = element.nodeValue.match(pattern_lite);
  43. if (lites) {
  44. lites = lites.map(str => `magnet:?xt=urn:btih:${str.replace(/^\s*|\s*$/g, '')}`);
  45. magnetLinks = magnetLinks.concat(lites);
  46. }
  47. }
  48. } else if (element.nodeType === Node.ELEMENT_NODE) {
  49. // 如果当前节点是元素节点,则递归遍历其子元素
  50. for (var i = 0; i < element.childNodes.length; i++) {
  51. magnetLinks = magnetLinks.concat(traverseDOM(element.childNodes[i]));
  52. }
  53. }
  54.  
  55. return magnetLinks;
  56. }
  57.  
  58. // 磁力链接去重
  59. function unique(arr) {
  60. let result = [];
  61. let obj = {};
  62. for (let i = 0; i < arr.length; i++) {
  63. let str = arr[i].toLowerCase();
  64. console.log(str);
  65. if (!obj[str]) {
  66. result.push(arr[i]);
  67. obj[str] = true;
  68. }
  69. }
  70. return result;
  71. }
  72.  
  73. // 获取 <body> 元素
  74. var bodyElement = document.getElementsByTagName('body')[0];
  75.  
  76. // 遍历 <body> 元素的所有子元素,并查找磁力链接
  77. var magnetLinks = unique(traverseDOM(bodyElement));
  78.  
  79. var linksText = magnetLinks.join("\n");
  80.  
  81. console.log(magnetLinks);
  82.  
  83. // 复制链接到剪贴板
  84. if (magnetLinks.length > 0) {
  85. var copyButton = document.createElement('button');
  86. copyButton.textContent = `Copy ${magnetLinks.length} Magnet Links`;
  87. copyButton.style.position = 'fixed';
  88. copyButton.style.bottom = '20px';
  89. copyButton.style.right = '20px';
  90. copyButton.style.zIndex = '9999';
  91. document.body.appendChild(copyButton);
  92.  
  93. copyButton.addEventListener('click', function() {
  94. navigator.clipboard.writeText(linksText).then(function() {
  95. alert('Links copied to clipboard!');
  96. }).catch(function(error) {
  97. console.error('Failed to copy links to clipboard:', error);
  98. });
  99. });
  100. }
  101. }
  102.  
  103. // 页面加载完成后收集磁力链接
  104. window.addEventListener('load', function() {
  105. collectMagnetLinks();
  106. });
  107.  
  108. })();