IMDB to RARBG Torrent Search

When on IMDB, click the small buttons to search for the movie/series on TorrentGalaxy, 1337x or RARBG Dump.

  1. // ==UserScript==
  2. // @name IMDB to RARBG Torrent Search
  3. // @description When on IMDB, click the small buttons to search for the movie/series on TorrentGalaxy, 1337x or RARBG Dump.
  4. // @namespace nickpapoutsis
  5. // @author nickpapoutsis
  6. // @copyright 2025, nickpapoutsis (https://openuserjs.org/users/nickpapoutsis)
  7. // @contributionURL https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=A6EL76QADA2YY&source=url
  8. // @license MIT
  9. // @match https://www.imdb.com/*
  10. // @version 0.8
  11. // @grant none
  12. // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALwAAABGCAMAAABBng7mAAAA3lBMVEUAAAD+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////84YLv///9TdcSiteDc4/NPc8O5x+iWq9tbfMesveN6ldJohsz09vv+/v9wjc9JbsHs8Pnj6fY9ZL2wwOSAmtTL1u5Dab9hgcm/zOnX3/LG0uyPpdmIoNZ2ktHQ2u+csN5Xeca1xObl2PI1AAAAKHRSTlMA/N5PhvHq98DXx+QqHbtAM9AZrY9uFHVjRw0D2qaXswhdIlc6oH6o47OqVgAAB9tJREFUaN7tmmlz2jAQhm3A3OWGcJMAoRgI92UgmDOB//+Hysq2JEsWdZNOZzrD+6Et9lr7eLVaSValhx566KGHHnrooYf+lUrF1I9U7vl3ZsVowUurEG9GcyVn0wQ2ij4zN5g2EvViiXnWrZfneiHry1RqsVq66mvlmzkxerwaCsiUAooSSaYzT4UfrGmu8eqxrJRk1YvxU3m4YWvD7wlXMtk49vsjCyaMl5qDl1I9nwkqKqVIuoWtGMU9qrOUWDZqZ/cFbAb+F4u9Kgva8Fe8KYO94tJLKhub3beijdOqWOECbdoAdloRs8G8rAoVSCfAJHvPS5zq29pMYJV0wPcyRAzeS5FkYpW7/Wp0dEa9p1ABPyvy4i2ZuZWhaKZaT9OW9Ety9E9wedS1aX09aLIZuCec2NHk7beMjQ4QDeQ0B523tDcxWvc/tJnJVjCe7dmdrK/vPdOL3yuB6j9NTPlw1LdtpNVlvLbeIMaOXB9cfWtzWs37qGXlxbJ8gd8HbNCBmwkUryCQtXltNx8GfSLuv/3Vd/QyMyyA3czg5WDBmM13iEVuiOB5XT5wuzg5NuR27/Yzw8BzOqOoBRsYntOwh4L6LKVeEfpstHWw6qwBvyKE57W6onZLRp+GoWUqJp+Qhgw8rwWwzdIYntf2HfowXmzJKOwTQUMb5E4Mz+uAcoOM7A86ZJCsdQIv0NsUOpzA81pA7/yMRxD7pf3X4BfguYqypgWGR/qmdrvQIvAijeFBITxogGYiVGGG7e/D87mRinGGXchmAi/UHrrvHvwbGo3wx9l+XR8u3MO/rdfrbveoU4P2dtcD1bIAWbNv05pARH+w8HNo4/NEveYRXNDwm5vJ6EgliFULr3SFuaKry9155Q5+qBp6Jy88vUUtas0Hn/gy9vnEwg9Us2hgM52FHxkWJ2zxYU5LxO3ioGJpG/fwoIOtz72SlENrEyYj15A3AnhqfCw4eJN1y8B3SWXUVFqHhXt4uiRCHbvNU2iW0di5AwZaTgBPcmwlgFfnZMoAyTjVtog9UC6XwS0qoAg+eB8eHoErExIUFPksHRndopreXjPvAO+PQGAxigj+bLUj4+4mBnI6jhaZSWNyPR3JJCWGV2I0PKRNICEV0exnQR+s/u7DHOYA70nS8AsR/JD0IOiEqwzwxhpPSL6Qaklu3Ie31CEDFjKjCaFc4kCNqRLuKQrSRsNVSQC/J1Mh0oWuz3JZ5tenOVfwGr38CklSHq09caCuVkLINy9eAfyILpUyBz/bWePqbI5fatXkrMqzG3h5TjuuScUqGV/ge0nHrOYMry3wsGFn2Mt8Pp/gUjOcqkg9MkYEUhIu4LU5HQQ5LyXKEJkVXhbg7D9B3kSd4N/fMOqMgue1mbLleaKK5LsHvxgMBqexTrUMcDnIGuJ7SM1WixtYIG+D16GNc4e0sYMSJoTXDzI7vY5VpN3Ypk9xqXTWBaLiMzdxYyq0ezolghQ8rxOwV4XwsCZhxsiGmbJIf4T+AP5Ng8DXYRNHzYfv9CR2hJS4B3+GwL7inZTA5u/D60sI2ou5AdyRCnPThqpGclIMfwLr8g8ML6CHYbHGafN9+NWnDOy3MfKMN4Ck6T5d1hQR/NsOFYmGZIfXIYeh3mCt6duTb8GT/Y0a5jaAV3tR/oRfIvj5zPhAAvD8JCX3cTXtzKhdWue78GANniNNSWrIUPpwRg6QLL9DITyoiwKQ4uCth1bUwNfIMvxL8J39fq+3bUFNRkvI5NgWSGPgN/v9+xbn3gcqzyJ49Uxdmm1JcQVpOyTdLfwQntna9wgVtAGcgYkwuOwkdbVvv5UCD6/4bbubI70YPKuU5u7hsWec9kqV3gDymrDweE4gIJ4sB18OzujUONFvstK+CA+emQEHGrSFWjrAT6FFKkf8grQ50U/1KL9fgmc8d1VTFzH8moPH4xu02qNdkSO8vLBdIsNt8FV43jNUArHmDDzbVZ2paDMib+zDq08v174Iz3smubl7xxpSm0EeXtYJiCP8tDci3bmQ0RJ/SOg7ffkr8MQzGfk6Y2CrFH0OHqStSGJheFbMVLdfUde24+4tVAfdPTzvGcK0tJMxu7gxDw9ak+TrCeFJQcU9zMs9fCCMPeO0H9EfQrjPI1uZhfd77N/uhlMRPJnKlAiaC78HX45jz3hRP6cwlZebftq+1R9Y+Bo6pVou6EW9GH6Ftit59MxscA8++Vt4ifW8wRvAsfXVqhmhYU4cfCpNNnZIfWQvPl2QM1KqooJ2W/HH5tjv4EMS53lOjzwfPoYiH2ZmDHxaSoTsSbDVBPCXNaoqlZIkwV4YwnZa8YPiiGr2k9OB2qRjaI4ia3oedDgtYQdPHjtb12+x06x/d40X9CoQzwl+dDxTd/bG9Mn8eDU/9FVy6MiuFjDwuzpddSbdHjk6vX+UmZGQZ0eRtCuILYwXLGZU11JaJkwxC+mI+A+jwel0OnZ3PRmfeOYlRvUgc2bdhCPXlvBMOCshpX6qYsVQGMMu0QPBBsFJhGWBWaQalTjFQzZ2A67+qjg7yhAvQpiYkVnNpJugl9OATlRsBP18k55YNiU5qe4Llj1I5XCmaR13NytJD6tQ7UXCSuXTSXw9A9asTb0VC1mPlmNVpsFyKBROO/2PglI0E46QZFY84WqhJP1HKjafXmuxWKxWzUf/K/CHHnrooYcekn4BP1SLjzAI1FoAAAAASUVORK5CYII=
  13. // ==/UserScript==
  14.  
  15. (function() {
  16. 'use strict';
  17.  
  18. console.log('So long, and thanks for all the fish RARBG team. o7');
  19.  
  20. function fn_getMovieYear() {
  21. let scripts = document.querySelectorAll('script[type="application/ld+json"]');
  22. for (let script of scripts) {
  23. try {
  24. let jsonContent = JSON.parse(script.innerHTML);
  25. if (jsonContent && jsonContent.datePublished) {
  26. return jsonContent.datePublished.split('-')[0];
  27. }
  28. } catch (e) {
  29. console.error('Error parsing JSON LD script:', e);
  30. }
  31. }
  32. return null;
  33. }
  34.  
  35. function fn_getMovieName() {
  36. let scripts = document.querySelectorAll('script[type="application/ld+json"]');
  37. for (let script of scripts) {
  38. try {
  39. let jsonContent = JSON.parse(script.innerHTML);
  40. if (jsonContent && jsonContent.name) {
  41. return jsonContent.name;
  42. }
  43. } catch (e) {
  44. console.error('Error parsing JSON LD script:', e);
  45. }
  46. }
  47. return null;
  48. }
  49.  
  50. function fn_createSearchableMovieName(movieName, movieYear) {
  51. if (!movieName) return null;
  52. let name = movieName.replace(/[^\w\s]/g, '');
  53. if (movieYear) name += ' ' + movieYear;
  54. return name.replace(/\s+/g, '+');
  55. }
  56.  
  57. function fn_getMovieId() {
  58. let x = window.location.pathname.toLowerCase();
  59. let arr = x.split('/');
  60. for (let i = 0; i < arr.length; i++) {
  61. if (arr[i].substring(0, 2) === 'tt') {
  62. return arr[i];
  63. }
  64. }
  65. return null;
  66. }
  67.  
  68. function fn_fromTrailerGetMovieData() {
  69. const script = document.getElementById('__NEXT_DATA__');
  70. if (script) {
  71. const rawContent = script.textContent;
  72. // Safely handle the truncated content
  73. // Trim up to the last valid closing brace
  74. const safeContent = rawContent.substring(0, rawContent.lastIndexOf('}') + 1);
  75. try {
  76. const jsonContent = JSON.parse(safeContent);
  77. // console.log(jsonContent);
  78. let mov_id = jsonContent.props.pageProps.videoPlaybackData.video.primaryTitle.id;
  79. let mov_name = jsonContent.props.pageProps.videoPlaybackData.video.primaryTitle.titleText.text;
  80. let mov_year = jsonContent.props.pageProps.videoPlaybackData.video.primaryTitle.releaseYear.year;
  81. return {
  82. id: mov_id,
  83. name: mov_name,
  84. year: mov_year
  85. };
  86. } catch (e) {
  87. console.error("Unable to parse JSON after truncation fix:", e);
  88. }
  89. } else {
  90. console.error("Script with id '__NEXT_DATA__' not found.");
  91. }
  92. return null;
  93. }
  94.  
  95. function fn_createServiceButton(serviceName, searchUrl, urlParams, identifier, container) {
  96. let a = document.createElement('a');
  97. a.href = `${searchUrl}${identifier}${urlParams}`;
  98. a.target = '_blank';
  99. a.style.background = '#ffffff';
  100. a.style.color = 'blue';
  101. a.style.display = 'block';
  102. a.style.margin = '6px';
  103. a.style.padding = '4px 6px';
  104. a.style.border = '1px solid deepskyblue';
  105. a.style.borderRadius = '4px';
  106. a.style.textDecoration = 'none';
  107. a.style.fontWeight = '500';
  108. a.style.fontSize = '0.75em';
  109. a.style.textAlign = 'center';
  110. a.style.transition = 'all 0.2s ease';
  111. a.innerText = serviceName;
  112.  
  113. a.onmouseover = function() {
  114. this.style.background = 'deepskyblue';
  115. this.style.color = '#ffffff';
  116. this.style.border = '1px solid deepskyblue';
  117. };
  118.  
  119. a.onmouseout = function() {
  120. this.style.background = '#ffffff';
  121. this.style.color = 'blue';
  122. this.style.border = '1px solid deepskyblue';
  123. };
  124.  
  125. container.appendChild(a);
  126. }
  127. var movieId = fn_getMovieId();
  128. var movieName = fn_getMovieName();
  129. var movieYear = fn_getMovieYear();
  130. var searchableMovieName = fn_createSearchableMovieName(movieName, movieYear);
  131.  
  132. if (!movieId) {
  133. const fromTrailerData = fn_fromTrailerGetMovieData();
  134. if (fromTrailerData) {
  135. movieId = fromTrailerData.id;
  136. movieName = fromTrailerData.name;
  137. movieYear = fromTrailerData.year;
  138. searchableMovieName = fn_createSearchableMovieName(movieName, movieYear);
  139. }
  140. }
  141.  
  142. if (movieId || searchableMovieName) {
  143. let services = [
  144. // { name: "RARBG", url: "https://rarbgprx.org/torrents.php?imdb=", urlParams: "&order=size&by=ASC", use: 'id' },
  145. { name: "TorrentGalaxy", url: "https://torrentgalaxy.to/torrents.php?search=", urlParams: "&lang=1&nox=2#results", use: 'id' },
  146. { name: "1337x", url: "https://1337x.to/search/", urlParams: "/1/", use: 'name' },
  147. { name: "RARBG Dump", url: "https://rarbgdump.com/search/", urlParams: "", use: 'name' }
  148. ];
  149.  
  150. let container = document.createElement('div');
  151. container.style.position = "fixed";
  152. container.style.left = "1%";
  153. container.style.top = "8%";
  154. container.style.zIndex = '9999';
  155.  
  156. document.body.append(container);
  157.  
  158. services.forEach(service => {
  159. let identifier = service.use === 'id' ? movieId : searchableMovieName;
  160. if (identifier) {
  161. fn_createServiceButton(service.name, service.url, service.urlParams, identifier, container);
  162. }
  163. });
  164. }
  165.  
  166. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址