API:검색
Appearance
Outdated translations are marked like this.
이 문서는 MediaWiki Action API 문서의 부분입니다. |
미디어위키 버전: | ≥ 1.11 |
제목이나 문서 내용의 일치 여부로 검색하는 개선된 방식으로 불러오기(GET) 요청을 보냅니다.
API에 대한 설명
불러오기(GET) 요청
이 검색 API를 사용하는 쿼리문에는 UTF8 인코딩 항목이 빠져있습니다. 위의 GET 요청에서 utf8을 다른 값을 넣으면 어떻게 되는지 확인해보세요.
응답
{
"batchcomplete": "",
"continue": {
"sroffset": 10,
"continue": "-||"
},
"query": {
"searchinfo": {
"totalhits": 5060
},
"search": [
{
"ns": 0,
"title": "Nelson Mandela",
"pageid": 21492751,
"size": 196026,
"wordcount": 23664,
"snippet": "<span class=\"searchmatch\">Nelson</span> Rolihlahla <span class=\"searchmatch\">Mandela</span> (/mænˈdɛlə/, Xhosa: [xoliɬaˈɬa <span class=\"searchmatch\">manˈdɛla</span>]; 18 July 1918 – 5 December 2013) was a South African anti-apartheid revolutionary,",
"timestamp": "2018-07-23T07:59:43Z"
},
{
"ns": 0,
"title": "Death of Nelson Mandela",
"pageid": 41284488,
"size": 133513,
"wordcount": 13512,
"snippet": "On December 5, 2013, <span class=\"searchmatch\">Nelson</span> <span class=\"searchmatch\">Mandela</span>, the first President of South Africa to be elected in a fully representative democratic election, as well as the country's",
"timestamp": "2018-07-19T17:30:59Z"
}
...
]
}
}
예제 코드
Python
#!/usr/bin/python3
"""
search.py
MediaWiki API Demos
Demo of `Search` module: Search for a text or title
MIT License
"""
import requests
S = requests.Session()
URL = "https://en.wikipedia.org/w/api.php"
SEARCHPAGE = "Nelson Mandela"
PARAMS = {
"action": "query",
"format": "json",
"list": "search",
"srsearch": SEARCHPAGE
}
R = S.get(url=URL, params=PARAMS)
DATA = R.json()
if DATA['query']['search'][0]['title'] == SEARCHPAGE:
print("Your search page '" + SEARCHPAGE + "' exists on English Wikipedia")
PHP
<?php
/*
search.php
MediaWiki API Demos
Demo of `Search` module: Search for a text or title
MIT License
*/
$searchPage = "Nelson Mandela";
$endPoint = "https://en.wikipedia.org/w/api.php";
$params = [
"action" => "query",
"list" => "search",
"srsearch" => $searchPage,
"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 );
if ($result['query']['search'][0]['title'] == $searchPage){
echo("Your search page '" . $searchPage . "' exists on English Wikipedia" . "\n" );
}
JavaScript
/*
search.js
MediaWiki API Demos
Demo of `Search` module: Search for a text or title
MIT License
*/
var url = "https://en.wikipedia.org/w/api.php";
var params = new URLSearchParams({
action: "query",
list: "search",
srsearch: "Nelson Mandela",
format: "json",
origin: location.origin
});
fetch(`${url}?${params}`)
.then(function(response){return response.json();})
.then(function(response) {
if (response.query.search[0].title === "Nelson Mandela"){
console.log("Your search page 'Nelson Mandela' exists on English Wikipedia" );
}
})
.catch(function(error){console.log(error);});
MediaWiki JS
/*
search.js
MediaWiki API Demos
Demo of `Search` module: Search for a text or title
MIT License
*/
var params = {
action: 'query',
list: 'search',
srsearch: 'Nelson Mandela',
format: 'json'
},
api = new mw.Api();
api.get( params ).done( function ( data ) {
if ( data.query.search[ 0 ].title === 'Nelson Mandela' ) {
console.log( "Your search page 'Nelson Mandela' exists on English Wikipedia" );
}
} );
발생 가능한 오류들
코드 | 정보 |
---|---|
nosrsearch | srsearch 변수는 설정해야 합니다. 1.17 버전 이하에서 파라미터로 검색할 때 발생하는 오류입니다.
|
search-text-disabled | text search is disabled. |
search-title-disabled | title search is disabled. |
search-error | search error has occurred |
파라미터의 변경 역사
- v1.24: 에서
score
,hasrelated
가 더이상 사용되지 않게 됨 - v1.23:
- 에서
srredirects
가 제거됨. 하지만 넘겨주기 검색은 여전히 유효함. - 에서
srinterwiki
가 도입됨
- 에서
- v1.22: 에서
srbackend
가 도입됨 - v1.17: 에서
nearmatch
,score
,titlesnippet
,redirecttitle
,redirectsnippet
,sectiontitle
,sectionsnippet
,hasrelated
가 도입됨 - v1.16: 에서
srinfo
,srprop
가 도입됨
추가 참고사항
사용하는 검색 백엔드 방식에 따라 srsearch
의 인터프리트 결과는 다를 수 있습니다.
CirrusSearch
를 사용하는 위키미디어 위키에서는 Help:CirrusSearch 에서 예제 구문을 확인할 수 있습니다.