IGDB List Extra Info

try to take over the world!

目前為 2017-11-18 提交的版本,檢視 最新版本

// ==UserScript==
// @name         IGDB List Extra Info
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://www.igdb.com/users/*/lists/*
// @grant        none
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// ==/UserScript==
//$('.validation_ticker').remove();
(function() {
	'use strict';

	// Your code here...

	//api urls
	var apikey = 'a219bebccdba1921822242709439c6e4';
	var apiurl = 'https://api-2445582011268.apicast.io';
	var req = '/games/?search=';
	var reqid = '/games/1942?fields=*';
	var corsproxy = 'https://cors-anywhere.herokuapp.com/';



	var pageDivs = document.getElementsByClassName("media-body");
	var gametextarray = [];
	var genresnodearray = [];
	var keywordsnodearray = [];
	var ratingnodearray = [];
	var promises = [];
	var sequence = Promise.resolve();
	//set header for apikey and json
	var myheaders = new Headers();
	myheaders.append('user-key', apikey);
	//myheaders.append('Accept', 'application/json');

	//for every element "media-body" do
    for(var i = 0; i < pageDivs.length;i++)
	//for (var i = 0; i < 1; i++)
    {
		//add a textnode
		// modify with .nodeValue=

		//set some elements
		//    var filler = document.createTextNode('  |  ');
		var genrestext = document.createTextNode('Genres: ');
        var genresspan = document.createElement('span');
        genresspan.style.fontSize= 'medium';
        genresspan.style.textDecoration = 'underline';
        genresspan.appendChild(genrestext);
		pageDivs[i].appendChild(genresspan);
		var genresnode = document.createTextNode('loading..');
		pageDivs[i].appendChild(genresnode);
		genresnodearray.push(genresnode);
		pageDivs[i].appendChild(document.createTextNode('   |   '));
		var keywordstext = document.createTextNode('Keywords: ');
        var kwspan = document.createElement('span');
        kwspan.style.fontSize= 'medium';
        kwspan.style.textDecoration = "underline";
        kwspan.appendChild(keywordstext);
		pageDivs[i].appendChild(kwspan);
		var keywordsnode = document.createTextNode('loading..');
		pageDivs[i].appendChild(keywordsnode);
		keywordsnodearray.push(keywordsnode);
		pageDivs[i].appendChild(document.createTextNode('   |   '));
		var ratingtext = document.createTextNode('Rating: ');
        var rtspan = document.createElement('span');
        rtspan.style.fontSize= 'medium';
        rtspan.style.textDecoration = "underline";
        rtspan.appendChild(ratingtext);
		pageDivs[i].appendChild(rtspan);
		var ratingnode = document.createTextNode('loading..');
		pageDivs[i].appendChild(ratingnode);
		ratingnodearray.push(ratingnode);


		//get the game name
		var gametext = 'test';
		var span1 = pageDivs[i].getElementsByTagName('span');
		gametext = span1[0].innerHTML;
		gametextarray.push(corsproxy + apiurl + req + gametext);
		console.log(gametext);
		//    var ref = pageDivs[i].getElementsByClassName("link-dark");
		//  text = document.createTextNode(ref[0].href);
	}
	//    console.log(gametextarray);

	//    console.log(content2);
	//   console.log(content2);
	//    console.log(response);
	//    var gameid = response.text();
	//    var xhmr = httpGetAsync(req,function(response){

	//    console.log(xhmr);
	//  console.log(gameid);



	//execute multiple fetch promises
	//first fetch the game-id for a given name
	Promise.all(
		gametextarray.map(
			(url, index) => fetch(url, {
				headers: myheaders
			})
			.then(res => res.json())
			.then(data => {
				var gameidnum = data[0].id;
				var gameid = gameidnum.toString();
				//generate new url with id to query for the data
				var newurl = (corsproxy + apiurl + '/games/' + gameid + '?fields=*');
				return fetch(newurl, {
					headers: myheaders
				});
			})
			.then(res2 => res2.json())
			.then(data2 => {
				var rating = data2[0].rating;
				ratingnodearray[index].nodeValue = Math.round(rating);

				var genresid = data2[0].genres;
				var keywordsid = data2[0].keywords;
				//concat all genrenames. fetch for all genre-ids at once
                var genresurl = corsproxy + apiurl + '/genres/' + data2[0].genres.toString();
				fetch(genresurl, {
						headers: myheaders
					})
					.then(resgenre => resgenre.json())
					.then(datagenre => {
						var newgenres = '';
						datagenre.forEach((tgenre, genreindex) => {
							newgenres = newgenres.concat(tgenre.name);
							if (genreindex < datagenre.length - 1) {
								newgenres = newgenres.concat('; ');
							}

						});
						genresnodearray[index].nodeValue = newgenres;




					});
				//concat all keywords. fetch for all keyword-ids at once
                var keywordsurl = corsproxy + apiurl + '/keywords/' + data2[0].keywords.toString();
				fetch(keywordsurl, {
						headers: myheaders
					})
					.then(reskey => reskey.json())
					.then(datakey => {
						var newkeys = '';
						datakey.forEach((tkey, keyindex) => {
							newkeys = newkeys.concat(tkey.name);
							if (keyindex < datakey.length - 1) {
								newkeys = newkeys.concat('; ');
							}

						});
						keywordsnodearray[index].nodeValue = newkeys;




					});

			})
		)
	);



	/*
    promises = gametextarray.map(function(x){
    return fetch(x,{headers:myheaders});
    });

    promises.forEach(curpromise => {
        sequence = sequence.then(
            () => curpromise
        ).then(res => res.json())
        .then(data => console.log(data))
        ;
    }
    );
*/




})();