GET request to get the difference between two pages.

MediaWiki version:
1.18

API documentation


Special:ApiHelp/compare

Example

GET request

Compare the current revisions of two different pages.

Response

{
    "compare": {
        "fromid": 1882196,
        "fromrevid": 739666518,
        "fromns": 10,
        "fromtitle": "Template:Unsigned",
        "toid": 32371774,
        "torevid": 909784724,
        "tons": 10,
        "totitle": "Template:UnsignedIP",
        ...
    }
}

Sample code

Python

#!/usr/bin/python3

"""
    compare.py

    MediaWiki Action API Code Samples
    Demo of `Compare` module: Compare the current revisions of two different pages
    
    MIT license
"""

import requests

S = requests.Session()

URL = "https://en.wikipedia.org/w/api.php"

PARAMS = {
    'action':"compare",
    'format':"json",
    'fromtitle':'Template:Unsigned',
    'totitle':'Template:UnsignedIP'
}

R = S.get(url=URL, params=PARAMS)
DATA = R.json()

print(DATA)

PHP

<?php
/*
    compare.php

    MediaWiki Action API Code Samples
    Demo of `Compare` module: Compare the current revisions of two different pages
    
    MIT license
*/

$endPoint = "https://en.wikipedia.org/w/api.php";
$params = [
    "action" => "compare",
    "format" => "json",
    "fromtitle" => "Template:Unsigned",
    "totitle" => "Template:UnsignedIP"

];

$url = $endPoint . "?" . http_build_query( $params );

$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$output = curl_exec( $ch );
curl_close( $ch );

echo( $output );

JavaScript

/*
    compare.js

    MediaWiki Action API Code Samples
    Demo of `Compare` module: Compare the current revisions of two different pages

    MIT license
*/

var url = "https://en.wikipedia.org/w/api.php"; 

var params = {
    action: "compare",
    format: "json",
    fromtitle: "Template:Unsigned",
    totitle: "Template:UnsignedIP"

};
request.get({ url: url, qs: params }, function(error, res, body) {
    if (error) {
        return;
    }
    console.log(body);
});

MediaWiki JS

/*
    compare.js

    MediaWiki Action API Code Samples
    Demo of `Compare` module: Compare the current revisions of two different pages

    MIT license
*/

var params = {
    action: "compare",
    format: "json",
    fromtitle: "Template:Unsigned",
    totitle: "Template:UnsignedIP"
},
api = new mw.Api();

api.get( params ).done( function ( data ) {
console.log( data );
} );

Possible errors

Code Info
compare-relative-to-nothing No 'from' revision for torelative to be relative to.
compare-relative-to-deleted Cannot use torelative=value relative to a deleted revision.
missingrev-title No current revision of title title.
baddiff The diff cannot be retrieved. One or both revisions do not exist or you do not have permission to view them.
missingcontent-revid Missing content for revision ID revid.
invalidtitle Bad title "title".
nosuchpageid There is no page with ID id.
missingtitle-byname The page name doesn't exist.
nosuchrevid There is no revision with ID id.
missingcontent-revid-role Missing content for revision ID id for role main.
compare-nosuchfromsection There is no section name in the 'from' content.
compare-nosuchtosection There is no section name in the 'to' content.
compare-maintextrequired Parameter fromtext-main is required when fromslots contains main (cannot delete the main slot).
compare-maintextrequired Parameter totext-main is required when toslots contains main (cannot delete the main slot).
compare-notext Parameter $1 cannot be used without $2.
compare-no-title Cannot pre-save transform without a title. Try specifying fromtitle or totitle.
compare-nofromrevision No 'from' revision. Specify fromrev, fromtitle, or fromid.
compare-notorevision No 'to' revision. Specify torev, totitle, or toid.
sectionsnotsupported Sections are not supported for content model model.
sectionreplacefailed Could not merge updated section.
missingparam At least one of the parameters fromtitle, fromid, fromrev, fromtext, fromrelative and fromslots is required.
missingparam At least one of the parameters totitle, toid, torev, totext, torelative and toslots is required.

Parameter history

  • v1.32: Introduced fromslots, toslots, fromtext-{slot}, fromsection-{slot}, fromcontentformat-{slot}, fromcontentmodel-{slot}, totext-{slot}, tosection-{slot}, tocontentformat-{slot}, tocontentmodel-{slot}
  • v1.30: Introduced frompst, torelative, topst, prop
  • v1.20: Introduced fromid, toid

Additional notes

To get the difference between two pages, a revision number, a page title, or a page ID for both from and to must be passed.

Relative comparison at first and last revision

  • You can ask for a relative comparison to prev at the first revision of a page, this will result in the full text of the first revision being returned as the diff. Note that this is not accurate, since in some cases there may be default content for the page before its first revision. The fromrevid property will be absent from the results.
  • Similarly, you can ask for the next relative comparison on the last revision of a page.
  • (Note: this is the last revision as of the writing of this topic. Because the page is protected, it probably should not change.) The result is an empty diff, and the torevid will be absent. Unlike most revision comparisons, these results will change if a new revision is created.

This behavior in the API is historical. It isn't consistent with the conceptual model of page history as a series of revisions. There is no previous revision to compare against the first revision, nor is there a next revision to compare against the last. Because of this, future versions of MediaWiki may give different results for this API call.

Using the HTML output

The prop values diff and parsedcomment return HTML snippets. The diff HTML is a list of table rows (<tr> elements) which should be embedded into a table with at least the following markup:

<table class="diff">
  <colgroup>
    <col class="diff-marker">
    <col class="diff-content">
    <col class="diff-marker">
    <col class="diff-content">
  </colgroup>
  <tbody>
    <translate nowrap><!--T:32--> DIFF HTML SNIPPET GOES HERE</translate>
  </tbody>
</table>

To display metadata as well, e. g. the user or comment, add extra rows and place the metadata inside a <td colspan="2"> element.

To make sure this diff displays correctly (e. g., that the diff marker and content columns aren’t the same width), you can add the mediawiki.diff.styles ResourceLoader module to your page:

<link rel="stylesheet" href="https://www.mediawiki.org/w/load.php?modules=mediawiki.diff.styles&only=styles">

If you want to display the parsedcomment, you will likewise want to add the mediawiki.legacy.shared module, which includes some basic styles for comments and autocomments:

<link rel="stylesheet" href="https://www.mediawiki.org/w/load.php?modules=mediawiki.legacy.shared&only=styles">

And if you want to display both the diff and the parsedcomment HTML on the page, you can combine these two tags into one:

<link rel="stylesheet" href="https://www.mediawiki.org/w/load.php?modules=mediawiki.legacy.shared|mediawiki.diff.styles&only=styles">
This article is issued from Mediawiki. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.