🏠 Home 

TorrentBD - Uploaded torrents to CSV or Copy.

Copy or CSV download from TorrentBD uploaded torrent.


Install this script?
  1. // ==UserScript==
  2. // @name TorrentBD - Uploaded torrents to CSV or Copy.
  3. // @icon https://www.torrentbd.net/themes/material/static/favicon/favicon-32x32.png
  4. // @namespace Violentmonkey Scripts
  5. // @match https://www.torrentbd.com/account-details.php*
  6. // @match https://www.torrentbd.me/account-details.php*
  7. // @match https://www.torrentbd.net/account-details.php*
  8. // @match https://www.torrentbd.org/account-details.php*
  9. // @grant none
  10. // @version 4.8.1
  11. // @author TheMyth434
  12. // @run-at document-end
  13. // @description Copy or CSV download from TorrentBD uploaded torrent.
  14. // @license MIT
  15. // ==/UserScript==
  16. let k = 1;
  17. let uploader = document.querySelector("#middle-block > div:nth-child(2) > div > div.profile-tib-container > h5 > span").textContent
  18. let checkkbox = [
  19. {
  20. name: "Type",
  21. value: "Type",
  22. id: "torrentType",
  23. get: element => {
  24. return element.querySelector("td > img").title
  25. }
  26. },
  27. {
  28. name: "Name",
  29. value: "Name",
  30. id: "torrentName",
  31. get: element => {
  32. return element.querySelector("td > span").innerText
  33. }
  34. },
  35. {
  36. name: "Time",
  37. value: "Time",
  38. id: "torrentTime",
  39. get: element => {
  40. return element.querySelectorAll("td > span")[1].textContent
  41. }
  42. },
  43. {
  44. name: "Size",
  45. value: "Size",
  46. id: "torrentSize",
  47. get: element => {
  48. return element.querySelectorAll("td")[5].textContent
  49. }
  50. },
  51. {
  52. name: "Seeder",
  53. value: "S",
  54. id: "torrentSeeder",
  55. get: element => {
  56. return element.querySelectorAll("td")[6].textContent
  57. }
  58. },
  59. {
  60. name: "Lecher",
  61. value: "L",
  62. id: "torrentLecher",
  63. get: element => {
  64. return element.querySelectorAll("td")[7].textContent
  65. }
  66. },
  67. {
  68. name: "Completed",
  69. value: "C",
  70. id: "torrentCompleted",
  71. get: element => {
  72. return element.querySelectorAll("td")[8].textContent
  73. }
  74. }
  75. ]
  76. let checkboxArray = new Array()
  77. const getTorrent = (flag,checkedIndex) => {
  78. let a = document.querySelectorAll("#torrents-main > div > table tr")
  79. let torrents = "";
  80. for (i = 1; i < a.length; i++) {
  81. let tid = a[i].querySelector("span").dataset.tid
  82. if (tid != undefined) {
  83. if (flag) {
  84. torrents += `${k}\nlinks:https://www.torrentbd.net/torrents-details.php?id=${tid} `
  85. checkedIndex.forEach(x => {
  86. torrents += `\n${checkkbox[x].name}: ${checkkbox[x].get(a[i])}`
  87. })
  88. torrents += "\n\n"
  89. } else {
  90. torrents += `${k},https://www.torrentbd.net/torrents-details.php?id=${tid},`
  91. checkedIndex.forEach(x => {
  92. torrents += `"${checkkbox[x].get(a[i])}",`
  93. })
  94. torrents += "\n"
  95. }
  96. k++;
  97. }
  98. }
  99. return torrents;
  100. };
  101. function getCurrentDateTimeString() {
  102. const now = new Date();
  103. const year = now.getFullYear();
  104. const month = String(now.getMonth() + 1).padStart(2, '0');
  105. const day = String(now.getDate()).padStart(2, '0');
  106. const hours = String(now.getHours()).padStart(2, '0');
  107. const minutes = String(now.getMinutes()).padStart(2, '0');
  108. const seconds = String(now.getSeconds()).padStart(2, '0');
  109. const formattedDateTime = `${year}-${month}-${day}_${hours}-${minutes}-${seconds}`;
  110. return formattedDateTime;
  111. }
  112. const copyTorrentLinks = (output) => {
  113. const input = document.createElement("textarea");
  114. input.value = output
  115. document.body.appendChild(input);
  116. input.focus();
  117. input.select();
  118. let r###lt = document.execCommand("copy");
  119. document.body.removeChild(input);
  120. if (r###lt) alert("Torrent links copied to clipboard");
  121. else
  122. prompt("Failed to copy links. Manually copy from below\n\n", input.value);
  123. };
  124. function createCSVFile(output) {
  125. let newOutput =
  126. `Uploaded By:${uploader}
  127. Total Torrent:${k - 1}\n
  128. ${output}
  129. `
  130. let fileName = `${uploader} TBD Uploads ${getCurrentDateTimeString()}`
  131. var blob = new Blob([newOutput], { type: 'text/csv' });
  132. var link = document.createElement('a');
  133. link.download = fileName + '.csv';
  134. link.href = URL.createObjectURL(blob);
  135. document.body.appendChild(link);
  136. link.click();
  137. document.body.removeChild(link);
  138. }
  139. function sleep(ms) {
  140. return new Promise(resolve => setTimeout(resolve, ms));
  141. }
  142. async function mainfunction(flag) {
  143. if (flag!=true) {
  144. flag=false
  145. }
  146. k = 1
  147. let checkedIndex=new Array()
  148. let output=""
  149. if (!flag) {
  150. output = "No,URL,"
  151. checkboxArray.forEach(x => {
  152. if (x[0].checked) {
  153. checkedIndex.push(parseInt(x[0].dataset.index))
  154. output += `${x[1].textContent},`;
  155. }
  156. x[0].disabled = true
  157. })
  158. output += "\n"
  159. }else{
  160. checkboxArray.forEach(x => {
  161. if (x[0].checked) {
  162. checkedIndex.push(parseInt(x[0].dataset.index))
  163. }
  164. x[0].disabled = true
  165. })
  166. }
  167. dlBtn.disabled = true
  168. cpyBtn.disabled = true
  169. let prevelement = document.querySelector('li[title="Previous page"]');
  170. if (prevelement) {
  171. let page1 = document.querySelector('li[title="Page 1"]');
  172. page1.click()
  173. await sleep(2000);
  174. }
  175. while (true) {
  176. output += getTorrent(flag,checkedIndex);
  177. let nextelement = document.querySelector('li[title="Next page"]');
  178. if (nextelement == null || nextelement == undefined) {
  179. if (flag) {
  180. copyTorrentLinks(output)
  181. } else {
  182. createCSVFile(output)
  183. alert("CSV File Downloaded");
  184. }
  185. break;
  186. } else {
  187. nextelement.click()
  188. await sleep(2000);
  189. }
  190. }
  191. checkboxArray.forEach(x => {
  192. x[0].disabled = false
  193. })
  194. dlBtn.disabled = false
  195. cpyBtn.disabled = false
  196. }
  197. let container = document.querySelector("#torrents");
  198. const newDiv = document.createElement("div");
  199. newDiv.style = "text-align: center;margin-top: 10px;";
  200. const dlBtn = document.createElement("button");
  201. dlBtn.textContent = "Download Links";
  202. dlBtn.setAttribute("align", "center");
  203. dlBtn.setAttribute("title", "Download as CSV");
  204. dlBtn.style =
  205. "border-radius: 4px;margin: 6px 8px;padding: 6px 14px;border: none;";
  206. dlBtn.addEventListener("click", mainfunction);
  207. const cpyBtn = document.createElement("button");
  208. cpyBtn.textContent = "Copy Links";
  209. cpyBtn.setAttribute("align", "center");
  210. cpyBtn.style =
  211. "border-radius: 4px;margin: 6px 14px;padding: 6px 14px;border: none;";
  212. cpyBtn.addEventListener("click", () => mainfunction(flag=true));
  213. checkboxArray = checkkbox.map((x, index) => {
  214. let newCheckbox = document.createElement("input");
  215. newCheckbox.type = "checkbox";
  216. newCheckbox.value = x.value;
  217. newCheckbox.dataset.index = index
  218. newCheckbox.name = x.id;
  219. newCheckbox.id = x.id;
  220. let label = document.createElement("label");
  221. label.htmlFor = x.id;
  222. label.style = "padding-left: 26px;margin-right: 18px;"
  223. label.textContent = x.name;
  224. return [newCheckbox, label]
  225. })
  226. checkboxArray.forEach(x => {
  227. newDiv.appendChild(x[0]);
  228. newDiv.appendChild(x[1]);
  229. })
  230. newDiv.appendChild(dlBtn);
  231. newDiv.appendChild(cpyBtn);
  232. container.prepend(newDiv);