IGDB List Extra Info

try to take over the world!

当前为 2017-11-18 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name IGDB List Extra Info
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @description try to take over the world!
  6. // @author You
  7. // @match https://www.igdb.com/users/*/lists/*
  8. // @grant none
  9. // @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
  10. // ==/UserScript==
  11. //$('.validation_ticker').remove();
  12. (function() {
  13. 'use strict';
  14.  
  15. // Your code here...
  16.  
  17. //api urls
  18. var apikey = 'a219bebccdba1921822242709439c6e4';
  19. var apiurl = 'https://api-2445582011268.apicast.io';
  20. var req = '/games/?search=';
  21. var reqid = '/games/1942?fields=*';
  22. var corsproxy = 'https://cors-anywhere.herokuapp.com/';
  23.  
  24.  
  25.  
  26. var pageDivs = document.getElementsByClassName("media-body");
  27. var gametextarray = [];
  28. var genresnodearray = [];
  29. var keywordsnodearray = [];
  30. var ratingnodearray = [];
  31. var promises = [];
  32. var sequence = Promise.resolve();
  33. //set header for apikey and json
  34. var myheaders = new Headers();
  35. myheaders.append('user-key', apikey);
  36. //myheaders.append('Accept', 'application/json');
  37.  
  38. //for every element "media-body" do
  39. for(var i = 0; i < pageDivs.length;i++)
  40. //for (var i = 0; i < 1; i++)
  41. {
  42. //add a textnode
  43. // modify with .nodeValue=
  44.  
  45. //set some elements
  46. // var filler = document.createTextNode(' | ');
  47. var genrestext = document.createTextNode('Genres: ');
  48. var genresspan = document.createElement('span');
  49. genresspan.style.fontSize= 'medium';
  50. genresspan.style.textDecoration = 'underline';
  51. genresspan.appendChild(genrestext);
  52. pageDivs[i].appendChild(genresspan);
  53. var genresnode = document.createTextNode('loading..');
  54. pageDivs[i].appendChild(genresnode);
  55. genresnodearray.push(genresnode);
  56. pageDivs[i].appendChild(document.createTextNode(' | '));
  57. var keywordstext = document.createTextNode('Keywords: ');
  58. var kwspan = document.createElement('span');
  59. kwspan.style.fontSize= 'medium';
  60. kwspan.style.textDecoration = "underline";
  61. kwspan.appendChild(keywordstext);
  62. pageDivs[i].appendChild(kwspan);
  63. var keywordsnode = document.createTextNode('loading..');
  64. pageDivs[i].appendChild(keywordsnode);
  65. keywordsnodearray.push(keywordsnode);
  66. pageDivs[i].appendChild(document.createTextNode(' | '));
  67. var ratingtext = document.createTextNode('Rating: ');
  68. var rtspan = document.createElement('span');
  69. rtspan.style.fontSize= 'medium';
  70. rtspan.style.textDecoration = "underline";
  71. rtspan.appendChild(ratingtext);
  72. pageDivs[i].appendChild(rtspan);
  73. var ratingnode = document.createTextNode('loading..');
  74. pageDivs[i].appendChild(ratingnode);
  75. ratingnodearray.push(ratingnode);
  76.  
  77.  
  78. //get the game name
  79. var gametext = 'test';
  80. var span1 = pageDivs[i].getElementsByTagName('span');
  81. gametext = span1[0].innerHTML;
  82. gametextarray.push(corsproxy + apiurl + req + gametext);
  83. console.log(gametext);
  84. // var ref = pageDivs[i].getElementsByClassName("link-dark");
  85. // text = document.createTextNode(ref[0].href);
  86. }
  87. // console.log(gametextarray);
  88.  
  89. // console.log(content2);
  90. // console.log(content2);
  91. // console.log(response);
  92. // var gameid = response.text();
  93. // var xhmr = httpGetAsync(req,function(response){
  94.  
  95. // console.log(xhmr);
  96. // console.log(gameid);
  97.  
  98.  
  99.  
  100. //execute multiple fetch promises
  101. //first fetch the game-id for a given name
  102. Promise.all(
  103. gametextarray.map(
  104. (url, index) => fetch(url, {
  105. headers: myheaders
  106. })
  107. .then(res => res.json())
  108. .then(data => {
  109. var gameidnum = data[0].id;
  110. var gameid = gameidnum.toString();
  111. //generate new url with id to query for the data
  112. var newurl = (corsproxy + apiurl + '/games/' + gameid + '?fields=*');
  113. return fetch(newurl, {
  114. headers: myheaders
  115. });
  116. })
  117. .then(res2 => res2.json())
  118. .then(data2 => {
  119. var rating = data2[0].rating;
  120. ratingnodearray[index].nodeValue = Math.round(rating);
  121.  
  122. var genresid = data2[0].genres;
  123. var keywordsid = data2[0].keywords;
  124. //concat all genrenames. fetch for all genre-ids at once
  125. var genresurl = corsproxy + apiurl + '/genres/' + data2[0].genres.toString();
  126. fetch(genresurl, {
  127. headers: myheaders
  128. })
  129. .then(resgenre => resgenre.json())
  130. .then(datagenre => {
  131. var newgenres = '';
  132. datagenre.forEach((tgenre, genreindex) => {
  133. newgenres = newgenres.concat(tgenre.name);
  134. if (genreindex < datagenre.length - 1) {
  135. newgenres = newgenres.concat('; ');
  136. }
  137.  
  138. });
  139. genresnodearray[index].nodeValue = newgenres;
  140.  
  141.  
  142.  
  143.  
  144. });
  145. //concat all keywords. fetch for all keyword-ids at once
  146. var keywordsurl = corsproxy + apiurl + '/keywords/' + data2[0].keywords.toString();
  147. fetch(keywordsurl, {
  148. headers: myheaders
  149. })
  150. .then(reskey => reskey.json())
  151. .then(datakey => {
  152. var newkeys = '';
  153. datakey.forEach((tkey, keyindex) => {
  154. newkeys = newkeys.concat(tkey.name);
  155. if (keyindex < datakey.length - 1) {
  156. newkeys = newkeys.concat('; ');
  157. }
  158.  
  159. });
  160. keywordsnodearray[index].nodeValue = newkeys;
  161.  
  162.  
  163.  
  164.  
  165. });
  166.  
  167. })
  168. )
  169. );
  170.  
  171.  
  172.  
  173. /*
  174. promises = gametextarray.map(function(x){
  175. return fetch(x,{headers:myheaders});
  176. });
  177.  
  178. promises.forEach(curpromise => {
  179. sequence = sequence.then(
  180. () => curpromise
  181. ).then(res => res.json())
  182. .then(data => console.log(data))
  183. ;
  184. }
  185. );
  186. */
  187.  
  188.  
  189.  
  190.  
  191. })();