Greasy Fork

Filmografie IMDb>WP

try to take over the world!

当前为 2018-11-19 提交的版本,查看 最新版本

// ==UserScript==
// @name         Filmografie IMDb>WP
// @namespace    http://tampermonkey.net/
// @version      0.7
// @description  try to take over the world!
// @author       You
// @match        https://www.imdb.com/name/*
// @grant        GM.xmlHttpRequest
// ==/UserScript==
(function() {
    var fetchWD = function getWB(id){
        GM.xmlHttpRequest({
            method: "GET",
            url: "https://www.wikidata.org/w/api.php?action=query&format=json&list=search&srsearch=haswbstatement:P345="+id,
            onload: function(response) {
                if(response.responseText.length > 0)
                {
                    var jsonString = response.responseText;
                    var jsonObj = JSON.parse(jsonString);
                    var tempImdb = response.finalUrl.split('P345=')[1].split('&')[0];
                    if (jsonObj.query.searchinfo.totalhits==1){
                        var tempWd = jsonObj.query.search[0].title;
                        expo=expo.replace(tempImdb,tempWd);
                        fetchWP(tempImdb,tempWd);
                        expo=deleteLooseEnds(expo);
                    }else{
                        expo=expo.replace('[['+tempImdb+'|','');
                        expo=deleteLooseEnds(expo);
                    }
                    //console.clear();
                    //console.log(expo);
                }
            },
            onerror: function(response) {
                console.log("Error in fetching contents: " + response.responseText);
            }

        });
    };

    function correctRest(text){
        var temp="";
        text.split('\n').sort().forEach(function(entry) {
            if(entry.includes('|')){
                entry=entry.replace('|'+entry.split('[[')[1].split(']]')[0].split('|')[1],'|').trim();
                if(!entry.split(']]')[0].includes('(')){
                    entry=entry.replace('|','').trim();
                }
            }
            temp+=entry.replace(/\\u2026/g,'…').replace(/\\u2019/g,'’').replace(/\\u2013/g,'–').replace(/\\u00e4/g,'ä').replace(/\\u00c4/g,'Ä').replace(/\\u00f6/g,'ö').replace(/\\u00d6/g,'Ö').replace(/\\u00fc/g,'ü').replace(/\\u00dc/g,'Ü').replace(/\\u00df/g,'ß')+'\n';});
        return temp.trim();
    };

    function deleteLooseEnds(text){
        var temp="";
        text.split('\n').sort().forEach(function(entry) {
            if(!entry.includes('[[')){
                entry=entry.replace(']]','').trim();
            }else{
                if (entry.split('[[')[1].split(']]')[0].split('|')[0]==entry.split('[[')[1].split(']]')[0].split('|')[1]){
                    entry=entry.replace(entry.split('[[')[1].split(']]')[0].split('|')[1]+'|','');
                }
            }
            temp+=entry+'\n';});
        return temp.trim();
    };

    var fetchWP = function getWP(imdbid,wdid){
        GM.xmlHttpRequest({
            method: "GET",
            url: "https://www.wikidata.org/w/api.php?action=wbgetentities&format=json&props=sitelinks|claims&sitefilter=dewiki&ids="+wdid+"&imdbid="+imdbid,
            onload: function(response) {
                if(response.responseText.length > 0)
                {
                    var jsonString = response.responseText;
                    var jsonObj = JSON.parse(jsonString);
                    var tempImdb = response.finalUrl.split('imdbid=')[1].split('&')[0];
                    var tempWd = response.finalUrl.split('ids=')[1].split('&')[0];
                    if(typeof Object.values(jsonObj.entities)[0].sitelinks.dewiki != "undefined"){
                        var tempWp = Object.values(jsonObj.entities)[0].sitelinks.dewiki.title;
                        expo=expo.replace(tempWd,tempWp);
                    }else{
                        expo=expo.replace('[['+tempWd+'|','');
                    }
                    if(typeof Object.values(jsonObj.entities)[0].claims.P1476 != 'undefined'){//check if Title of entity
                        var OT = Object.values(jsonObj.entities)[0].claims.P1476[0].mainsnak.datavalue.value.text;
                        console.log(tempWd+'/'+tempImdb+': '+OT);//Wikidata-ID: Wikidata-OT
                    }else{
                        console.log(tempWd+'/'+tempImdb);//Wikidata-ID
                    }
                    //console.clear();
                    //console.log(expo);
                }
            },
            onerror: function(response) {
                console.log("Error in fetching contents: " + response.responseText);
            }

        });
    };

    var el = document.getElementsByClassName('filmo-category-section')[0].children;
    var expa=[];
    var expo="";
    for (var i = 0; i<el.length;i++){
        var year=el[i].getElementsByClassName('year_column')[0].innerText.trim().split('/')[0].replace('-','–');
        var title=el[i].getElementsByTagName('a')[0].innerText.replace('-','–');
        var type=el[i].innerHTML.split('</b>')[1].split('<br>')[0].trim().replace('TV Movie documentary','Dokumentation').replace('TV Series documentary','Fernsehserie').replace('TV Series','Fernsehserie').replace('TV Mini-Series','Miniserie').replace('TV Movie','Fernsehfilm').replace('Video short','Kurzfilm').replace('TV Short','Kurzfilm').replace('Short','Kurzfilm').replace('(Video)','');
        if(!type.includes("in_production")){
            var id = el[i].getAttribute("id").split('-')[1];
            fetchWD(id);
            if(type=="(Fernsehserie)"||type=="(Miniserie)"){
                var number=0;var arr=el[i].getElementsByClassName('filmo-episodes');
                for(var j=0;j<arr.length;j++){if (!arr[j].innerText.includes('credit only')){number++};};
                if (number==0){
                    expa.push('* '+year+': [['+id+'|'+title+']] '+type.split(',')+'\n');
                }else if (number==1){
                    expa.push('* '+year+': [['+id+'|'+title+']] '+type.split(')')+' eine Folge)'+'\n');
                }else{
                    expa.push('* '+year+': [['+id+'|'+title+']] '+type.split(')')+' '+number+' Folgen)'+'\n');
                }
            }else{
                expa.push('* '+year+': [['+id+'|'+title+']] '+type+'\n');
            }}};
    expo="";expa.sort().forEach(function(entry) {expo+=entry;});
    setTimeout(function() {
        expo=deleteLooseEnds(expo);
        expo=correctRest(expo);
        console.log(expo);
    }, 3000);
})();