Similar Artists from WCD missing on RED

Add a box to the sidebar with the missing Similar Artists from the WCD metadata

目前为 2017-11-08 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Similar Artists from WCD missing on RED
  3. // @version 0.3
  4. // @description Add a box to the sidebar with the missing Similar Artists from the WCD metadata
  5. // @author Chameleon
  6. // @include http*://*redacted.ch/artist.php?id=*
  7. // @include http*://*redacted.ch/torrents.php?id=*
  8. // @grant GM_xmlhttpRequest
  9. // @namespace https://greasyfork.org/users/87476
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. 'use strict';
  14.  
  15. if(window.location.href.indexOf('artist.php?id=') !== -1)
  16. {
  17. artistpage();
  18. }
  19. else if(window.location.href.indexOf('torrents.php?id=') !== -1)
  20. {
  21. torrentspage();
  22. }
  23.  
  24. })();
  25.  
  26. function torrentspage()
  27. {
  28. var h2=document.getElementsByTagName('h2')[0];
  29. var artist=h2.getElementsByTagName('a')[0].textContent;
  30. var album=h2.getElementsByTagName('span')[0].textContent;
  31.  
  32. //var wcd_collage_table=document.createElement('table');
  33.  
  34. GM_xmlhttpRequest({method: "GET",
  35. url: "http://159.89.252.33/torrents.php?artistname="+encodeURIComponent(artist)+"&groupname="+encodeURIComponent(album),
  36. onload: gotSearch
  37. });
  38. }
  39.  
  40. function gotSearch(response)
  41. {
  42. var div=document.createElement('div');
  43. div.innerHTML=response.responseText;
  44.  
  45. var results=div.getElementsByClassName('group_info');
  46. if(results.length === 0)
  47. return;
  48. var link=results[0].getElementsByTagName('a')[1].href.split('torrents.php?id=')[1];
  49.  
  50. GM_xmlhttpRequest({method: "GET",
  51. url: "http://159.89.252.33/torrents.php?id="+link,
  52. onload: gotAlbum
  53. });
  54. }
  55.  
  56. function gotAlbum(response)
  57. {
  58. var div=document.implementation.createHTMLDocument();
  59. div.body.innerHTML=response.responseText;
  60. //document.body.innerHTML=response.responseText;
  61.  
  62. var table=div.getElementsByClassName('collage_table')[0];
  63. var as=table.getElementsByTagName('a');
  64. for(var i=0; i<as.length; i++)
  65. {
  66. as[i].href='javascript:void(0)';
  67. }
  68. var td=table.getElementsByTagName('td')[0];
  69. td.innerHTML=td.innerHTML.replace("is in", "was in")+" on WCD";
  70. var homeTable=document.getElementsByClassName('collage_table')[0];
  71. homeTable.parentNode.insertBefore(table, homeTable.nextElementSibling);
  72. }
  73.  
  74. function artistpage()
  75. {
  76. var artist=document.title.split(' :: Redacted')[0];
  77. var similar_artists=document.getElementsByClassName('box_artists')[0];
  78.  
  79. var box=document.createElement('div');
  80. box.innerHTML='<div class="head"><strong>WCD Similar Artists</strong></div>';
  81. box.setAttribute('class', 'box');
  82. var ul=document.createElement('ul');
  83. box.appendChild(ul);
  84. ul.setAttribute('class', 'stats nobullet');
  85. similar_artists.parentNode.insertBefore(box, similar_artists.nextElementSibling);
  86. //box.innerHTML='Searching for artist "'+artist+'" in the WCD metadata';
  87. GM_xmlhttpRequest({method: "GET",
  88. url: "http://159.89.252.33/artist.php?action=autocomplete&query="+encodeURIComponent(artist),
  89. onload: gotArtists.bind(undefined, ul, similar_artists)
  90. });
  91. }
  92.  
  93. function gotArtists(box, similar_artists, response)
  94. {
  95. var r=JSON.parse(response.responseText);
  96. if(r.suggestions.length === 0)
  97. {
  98. box.innerHTML='Artist not found';
  99. return;
  100. }
  101. var artistID=r.suggestions[0].data;
  102. GM_xmlhttpRequest({method: "GET",
  103. url: "http://159.89.252.33/ajax.php?action=similar_artists&id="+artistID+"&limit=1000",
  104. onload: gotSimilar.bind(undefined, box, similar_artists)
  105. });
  106. }
  107.  
  108. function gotSimilar(box, similar_artists, response)
  109. {
  110. var r=JSON.parse(response.responseText);
  111. if(r===null)
  112. {
  113. box.innerHTML='None found';
  114. return;
  115. }
  116. box.innerHTML='';
  117.  
  118. var s=similar_artists.getElementsByTagName('li');
  119. var names=[];
  120. for(var i=0; i<s.length; i++)
  121. {
  122. names.push(s[i].getElementsByTagName('a')[0].textContent);
  123. }
  124.  
  125. var final_artists=[];
  126. for(var i=0; i<r.length; i++)
  127. {
  128. var a=r[i];
  129. var found=false;
  130. for(var j=0; j<names.length; j++)
  131. {
  132. if(names[j].toLowerCase() === a.name.toLowerCase())
  133. {
  134. found=true;
  135. break;
  136. }
  137. }
  138. if(!found)
  139. final_artists.push(a.name);
  140. }
  141.  
  142. if(final_artists.length > 20)
  143. {
  144. var p=box.previousElementSibling;
  145. var a=document.createElement('a');
  146. p.appendChild(a);
  147. a.setAttribute('style', 'float: right;');
  148. a.innerHTML='(Show more)';
  149. a.href='javascript:void(0);';
  150. a.addEventListener('click', showMore.bind(undefined, box, final_artists, a));
  151. }
  152. showSimilar(box, final_artists, false);
  153. }
  154.  
  155. function showMore(box, final_artists, a)
  156. {
  157. if(a.textContent==='(Show more)')
  158. {
  159. a.innerHTML='(Show less)';
  160. showSimilar(box, final_artists, true);
  161. }
  162. else
  163. {
  164. a.innerHTML='(Show more)';
  165. showSimilar(box, final_artists, false);
  166. }
  167. }
  168.  
  169. function showSimilar(box, final_artists, all)
  170. {
  171. box.innerHTML='';
  172. var links=[];
  173. for(var i=0; i<final_artists.length; i++)
  174. {
  175. var f=final_artists[i];
  176. var li=document.createElement('li');
  177. li.innerHTML='<a href="/artist.php?artistname='+encodeURIComponent(f)+'">'+f+'</a>';
  178. var a=document.createElement('a');
  179. li.appendChild(a);
  180. a.setAttribute('style', 'float: right;');
  181. a.innerHTML='(Add)';
  182. a.href='javascript:void(0);';
  183. a.addEventListener('click', addArtist.bind(undefined, a, f, false, [], 0));
  184. links.push({a:a, f:f});
  185. box.appendChild(li);
  186. if(i >= 19 && !all)
  187. break;
  188. }
  189. var li=document.createElement('li');
  190. box.appendChild(li);
  191. li.setAttribute('style', 'text-align: center;');
  192. var a=document.createElement('a');
  193. li.appendChild(a);
  194. a.href='javascript:void(0);';
  195. a.innerHTML='(Add all to similar artists)';
  196. a.addEventListener('click', addAll.bind(undefined, links));
  197. }
  198.  
  199. function addAll(links)
  200. {
  201. addArtist(links[0].a, links[0].f, true, links, 0);
  202. }
  203.  
  204. function addArtist(a, f, addAll, links, index)
  205. {
  206. if(a.innerHTML==='(Added)')
  207. {
  208. if(addAll)
  209. {
  210. index++;
  211. if(index >= links.length)
  212. return;
  213. addArtist(links[index].a, links[index].f, addAll, links, index);
  214. }
  215. return;
  216. }
  217. a.innerHTML='(Adding)';
  218.  
  219. var inputs=document.getElementsByClassName('add_form')[0].getElementsByTagName('input');
  220.  
  221. GM_xmlhttpRequest({method: "POST",
  222. url: "/artist.php",
  223. headers: {
  224. "Content-Type": "application/x-www-form-urlencoded"
  225. },
  226. data: "action=add_similar&auth="+inputs[1].value+"&artistid="+inputs[2].value+"&artistname="+encodeURIComponent(f),
  227. onload: addedArtist.bind(undefined, a, addAll, links, index)
  228. });
  229. }
  230.  
  231. function addedArtist(a, addAll, links, index, response)
  232. {
  233. a.innerHTML='(Added)';
  234. if(!addAll)
  235. return;
  236.  
  237. index++;
  238. if(index >= links.length)
  239. return;
  240.  
  241. window.setTimeout(addArtist.bind(undefined, links[index].a, links[index].f, addAll, links, index), 1000);
  242. }