API:Prefixsearch

From mediawiki.org

API documentation[edit]


list=prefixsearch (ps)

(main | query | prefixsearch)
  • This module requires read rights.
  • This module can be used as a generator.
  • Source: MediaWiki
  • License: GPL-2.0-or-later

Perform a prefix search for page titles.

Despite the similarity in names, this module is not intended to be equivalent to Special:PrefixIndex; for that, see action=query&list=allpages with the apprefix parameter. The purpose of this module is similar to action=opensearch: to take user input and provide the best-matching titles. Depending on the search engine backend, this might include typo correction, redirect avoidance, or other heuristics.

Specific parameters:
Other general parameters are available.
pssearch

Search string.

This parameter is required.
psnamespace

Namespaces to search. Ignored if pssearch begins with a valid namespace prefix.

Values (separate with | or alternative): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 90, 91, 92, 93, 100, 101, 102, 103, 104, 105, 106, 107, 486, 487, 710, 711, 828, 829, 1198, 1199, 2600, 5500, 5501
To specify all values, use *.
Default: 0
pslimit

Maximum number of results to return.

Type: integer or max
The value must be between 1 and 500.
Default: 10
psoffset

When more results are available, use this to continue. More detailed information on how to continue queries can be found on mediawiki.org.

Type: integer
The value must be no less than 0.
Default: 0
psprofile

Search profile to use.

strict
Strict profile with few punctuation characters removed but diacritics and stress marks are kept.
normal
Few punctuation characters, some diacritics and stopwords removed.
normal-subphrases
Few punctuation characters, some diacritics and stopwords removed. It will match also subphrases (can be subphrases or subpages depending on internal wiki configuration).
fuzzy
Similar to normal with typo correction (two typos supported).
fast-fuzzy
Experimental fuzzy profile (may be removed at any time)
fuzzy-subphrases
Similar to normal with typo correction (two typos supported). It will match also subphrases (can be subphrases or subpages depending on internal wiki configuration).
classic
Classic prefix, few punctuation characters and some diacritics removed.
engine_autoselect
Let the search engine decide on the best profile to use.
One of the following values: classic, engine_autoselect, fast-fuzzy, fuzzy, fuzzy-subphrases, normal, normal-subphrases, strict
Default: engine_autoselect
Example:
Search for page titles beginning with meaning.
api.php?action=query&list=prefixsearch&pssearch=meaning [open in sandbox]

Example[edit]

GET request[edit]


Response[edit]

{
    "batchcomplete": "",
    "continue": {
        "psoffset": 10,
        "continue": "-||"
    },
    "query": {
        "prefixsearch": [
            {
                "ns": 0,
                "title": "Star Wars",
                "pageid": 26678
            },
            {
                "ns": 0,
                "title": "Star Wars: The Last Jedi",
                "pageid": 43910621
            },
            {
                "ns": 0,
                "title": "Star Wars: The Force Awakens",
                "pageid": 14723194
            },
            {
                "ns": 0,
                "title": "Star Wars (film)",
                "pageid": 52549
            }
            ...
        ]
    }
}

Sample code[edit]

Python[edit]

#!/usr/bin/python3

"""
    prefixsearch.py

    MediaWiki API Demos
    Demo of `Prefixsearch` module: Perform a prefix search for page titles

    MIT License
"""

import requests

S = requests.Session()

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

PARAMS = {
    "action": "query",
    "format": "json",
    "list": "prefixsearch",
    "pssearch": "Star Wars"
}

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

PAGES = DATA['query']['prefixsearch']

for page in PAGES:
    print(page["title"])

PHP[edit]

<?php
/*
    prefixsearch.php

    MediaWiki API Demos
    Demo of `Prefixsearch` module: Perform a prefix search for page titles

    MIT License
*/

$endPoint = "https://en.wikipedia.org/w/api.php";
$params = [
    "action" => "query",
    "list" => "prefixsearch",
    "pssearch" => "Star Wars",
    "format" => "json"
];

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

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

$result = json_decode( $output, true );

foreach( $result["query"]["prefixsearch"] as $page ) {
    echo( $page["title"] . "\n" );
}

JavaScript[edit]

/*
    prefixsearch.js

    MediaWiki API Demos
    Demo of `Prefixsearch` module: Perform a prefix search for page titles

    MIT License
*/

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

var params = {
    action: "query",
    list: "prefixsearch",
    pssearch: "Star Wars",
    format: "json"
};

url = url + "?origin=*";
Object.keys(params).forEach(function(key){url += "&" + key + "=" + params[key];});

fetch(url)
    .then(function(response){return response.json();})
    .then(function(response) {
        var pages = response.query.prefixsearch;
        for (var page in pages) {
            console.log( pages[page].title );
        }
    })
    .catch(function(error){console.log(error);});

MediaWiki JS[edit]

/*
	prefixsearch.js

	MediaWiki API Demos
	Demo of `Prefixsearch` module: Perform a prefix search for page titles

	MIT License
*/

var params = {
		action: 'query',
		list: 'prefixsearch',
		pssearch: 'Star Wars',
		format: 'json'
	},
	api = new mw.Api();

api.get( params ).done( function ( data ) {
	var pages = data.query.prefixsearch,
		page;
	for ( page in pages ) {
		console.log( pages[ page ].title );
	}
} );

Possible errors[edit]

Code Info
nopssearch The pssearch parameter must be set.

See also[edit]