User:Chieftain Alex/API javascripts

From Guild Wars Wiki
Jump to navigationJump to search
gw2:User:Chieftain Alex/API javascripts
<div id="apidata">[[File:Mediawiki loading animation.gif]]</div>
Mediawiki loading animation.gif (nothing is loading until you paste a script from below into your javascript scratchpad)

Other snippets[edit]

Wiki - API - Pages in namespace[edit]

/* GWW API query tool for all pages */

// Setup
var redirectfilter = 'all'; // all, redirects, nonredirects
var languagelinkfilter = 'all'; // withlanglinks, withoutlanglinks
var nsfilter =  102; // Game_link
var baseurl = 'https://wiki.guildwars.com/api.php?action=query&format=json&list=allpages&aplimit=500&apfilterredir='+redirectfilter+'&apnamespace='+nsfilter+'&apfilterlanglinks='+languagelinkfilter;
var datadrop = [];

// Function to concatenate all data
function processdata (datadrop) {
    var contribs = [];
    $.each(datadrop, function(k,v){
        $.each(v, function(kk,vv){
            contribs.push(vv);
        });
    });
    $('#mw-content-text').html(makeTableHTML(contribs));
}

// Function to convert an object variable into a table
function makeTableHTML( data ) {
        var result = '<table class="table mech1"><tbody>'
                    +'<tr><th>Pageid</th><th>Name</th></tr>';
        $.each(data, function(k, v) {
                result += '<tr id="'+v['revid']+'">'
                          +'<td>'+v['pageid']+'</td><td>'+v['title']+'</td>'
                         +'</tr>';
        });
        result += "</tbody></table>";
        return result;
}

// Fetch all the pages
function apiQuery (token,startkey) {
    var url = baseurl;
    if (startkey) {
     url += '&apfrom=' + startkey;
    }
    if (token) {
     url += '&apcontinue=' + token;
    }
    // console.log(url);
    $.getJSON(url).done(function(data){
        datadrop.push(data['query']['allpages']);

        if (data['continue']) {
            apiQuery(data['continue']['apcontinue']);
        } else {
            console.log('Query complete.');
            processdata(datadrop);
        }
    });
}

console.log('User pressed run. Starting queries for Special:AllPages');
//apiQuery(null,'Z');
apiQuery();

Wiki - API - External links[edit]

/* GWW API query tool for external links */

// Based on:
// https://wiki.guildwars.com/api.php?action=help&modules=query%2Bexturlusage

// Setup
var searchterm = 'www.gw-memorial.net';
var baseurl = 'https://wiki.guildwars.com/api.php?action=query&format=json&list=exturlusage&euquery=' + searchterm + '&eulimit=500';
var datadrop = [];

// Function to concatenate all data
function processdata (datadrop) {
    var contribs = [];
    $.each(datadrop, function(k,v){
        $.each(v, function(kk,vv){
            contribs.push(vv);
        });
    });
    $('#apidata').html(makeTableHTML(contribs));
}

// Function to convert an object variable into a table
function makeTableHTML( data ) {
        var result = '<table class="wikitable"><tbody>'
                    +'<tr><th>Pageid</th><th>Name</th><th>NS</th><th>Web address</th></tr>';
        $.each(data, function(k, v) {
                result += '<tr id="'+v['revid']+'">'
                          +'<td>'+v['pageid']+'</td><td>'+v['title']+'</td><td>'+v['ns']+'</td><td>'+v['url']+'</td>'
                         +'</tr>';
        });
        result += "</tbody></table>";
        return result;
}

// Fetch all the pages
function apiQuery (token) {
    var url = baseurl;
    if (token) {
     url += '&euoffset=' + token;
    }
    // console.log(url);
    $.getJSON(url).done(function(data){
        datadrop.push(data['query']['exturlusage']);

        if (data['continue']) {
            apiQuery(data['continue']['euoffset']);
        } else {
            console.log('Query complete.');
            processdata(datadrop);
        }
    });
}

console.log('User pressed run. Starting queries for Special:LinkSearch');
apiQuery();

Wiki - API - Namespaces[edit]

/* GW2W API query tool for Mediawiki namespaces statistics */

// Function to convert an object variable into a table
function makeTableHTML( data ) {
        var result = '<table class="wikitable"><tbody>'+'<tr><th>Namespace ID</th><th>Name</th></tr>';
        $.each(data, function(k, v) {
            result += '<tr>'+'<td>'+v['id']+'</td><td>'+v['canonical']+'</td>'+'</tr>';
        });
        result += "</tbody></table>";
        return result;
}

// Fetch all the namespaces
function apiQuery () {
    // console.log(url);
    $.getJSON('https://wiki.guildwars.com/api.php?action=query&format=json&meta=siteinfo&siprop=namespaces').done(function(data){
        $('#mw-content-text').html(makeTableHTML(data['query']['namespaces']));
    });
}
apiQuery();

Wiki - API - Template parameter check[edit]

/* GWW API query tool for Template parameters */
function apiQuery () {
    mw.loader.using('mediawiki.api', function () {
        var template = 'Achievement table row';
        var parameters = 'name:page';
        var firstquery = '{{User:Chieftain Alex/Templates/Parameter check|mode=1|template='+template+'}}';

        var api = new mw.Api();
        api.parse(firstquery).done(function (resulttext) {

            // Find the output token
            var pattern = /\<div class\="apiresults"\>(\d+)\<\/div\>/;
            var m = resulttext.match(pattern);
            console.log('regexp', m);

            // Check something matched
            if (!m) {
                console.log('No regular expression matched, quitting.')
                return;
            }

            // Convert match from text into a number.
            var n = Number(m[1]);
            if (n == 0) {
                console.log('Zero results found, quitting.');
            } else {
                console.log(n, ' results found, querying...');

                // Repeat query n/500 times until done
                var promises = [];
                for (var i=0; i<n; i+=500) {
                    var furtherquery = '{{User:Chieftain Alex/Templates/Parameter check|mode=2|template='+template+'|parameters='+parameters+'|offset='+i+'}}';
                    promises.push(api.parse(furtherquery));
                }

                // Wait until all the GET requests have finished
                $.when.apply($,promises).done(function() {
                    // Concatenate the api results
                    var table = $.map(arguments, function(v) { return v; }).join('\n');

                    // Write to document
                    $('#apidata').html(table);

                    // Now copy the output to excel, then remove duplicates including table headings.
                    console.log('Batch query complete.');
                });
            }
        });
    });
}
apiQuery();