미디어위키 API는 이용자들이 특히 CLI 환경에서 데이터를 쉽고 빠르게 다룰 수 있게 도와줍니다. 그 중에서 가장 많이 사용하는 것이 바로 특정 조건의 문서를 검색하는 쿼리(query) 작업입니다. 이 문서에서는 미디어위키의 쿼리 작업을 하는 방법에 대해 안내하겠습니다.
사용방법[원본 편집]
가장 편한 방법은 API 실험실에서 action=query, format=json(그나마 가장 보기 좋습니다.)을 선택한 뒤 action=query 탭에서 옵션을 고르시면 됩니다.
프로그래밍 언어를 이용한 접근[원본 편집]
직접 쿼리 URL을 입력해서 정보를 긁어올 수도 있지만 대게는 프로그래밍 언어를 활용해서 데이터를 가져올 수 있습니다. 여기서는 파이썬과 미디어위키용 자바스크립트를 이용해서 쿼리에 접근하는 방법에 대해 알아보겠습니다. 예시는 '리브레 위키'로 시작하는 리브레 위키의 모든 문서명을 조회하는 쿼리입니다.
- 미디어위키 쿼리 URL
- /api.php?action=query&format=json&list=allpages&titles=리브레_위키&apfilterredir=nonredirects&aplimit=35
응답 결과 출력
리브레 위키 미디어쿼리 응답 결과 출력 |
---|
{
"batchcomplete": "",
"query": {
"allpages": [
{
"pageid": 1941,
"ns": 0,
"title": "리브레 위키"
},
{
"pageid": 15714,
"ns": 0,
"title": "리브레 위키-위키쨩 디자인 분쟁"
},
{
"pageid": 141789,
"ns": 0,
"title": "리브레 위키/en"
},
{
"pageid": 69000,
"ns": 0,
"title": "리브레 위키/고지 달성"
},
{
"pageid": 14636,
"ns": 0,
"title": "리브레 위키/고지 달성/비공식 고지"
},
{
"pageid": 76079,
"ns": 0,
"title": "리브레 위키/다른 위키들과의 차이점"
},
{
"pageid": 78957,
"ns": 0,
"title": "리브레 위키/만우절"
},
{
"pageid": 45493,
"ns": 0,
"title": "리브레 위키/문제점"
},
{
"pageid": 5416,
"ns": 0,
"title": "리브레 위키/역사"
},
{
"pageid": 112485,
"ns": 0,
"title": "리브레 위키/연도별 기록"
},
{
"pageid": 33073,
"ns": 0,
"title": "리브레 위키/오늘의 게시판은 몇 시에 터졌나"
},
{
"pageid": 1230,
"ns": 0,
"title": "리브레 위키/오늘의 리브레 위키는 몇 시에 터졌나"
},
{
"pageid": 57921,
"ns": 0,
"title": "리브레 위키/오늘의 리브레 위키는 몇 시에 터졌나/2015년"
},
{
"pageid": 82246,
"ns": 0,
"title": "리브레 위키/오늘의 리브레 위키는 몇 시에 터졌나/2016년"
},
{
"pageid": 13153,
"ns": 0,
"title": "리브레 위키/통계"
},
{
"pageid": 55222,
"ns": 0,
"title": "리브레 위키/통계/보존문서"
},
{
"pageid": 55225,
"ns": 0,
"title": "리브레 위키/통계/보존문서/2015년"
},
{
"pageid": 56407,
"ns": 0,
"title": "리브레 위키/통계/보존문서/2016년"
},
{
"pageid": 77218,
"ns": 0,
"title": "리브레 위키/통계/보존문서/2017년"
},
{
"pageid": 94848,
"ns": 0,
"title": "리브레 위키/통계/보존문서/2018년"
},
{
"pageid": 103398,
"ns": 0,
"title": "리브레 위키/통계/보존문서/2019년"
},
{
"pageid": 138220,
"ns": 0,
"title": "리브레 위키/통계/보존문서/2020년"
},
{
"pageid": 51508,
"ns": 0,
"title": "리브레 위키 12·10 서버 사태"
},
{
"pageid": 58698,
"ns": 0,
"title": "리브레 위키 2016년 2월 서버 대란"
},
{
"pageid": 59410,
"ns": 0,
"title": "리브레 위키 2016년 3월 DDoS 공격 사태"
},
{
"pageid": 67051,
"ns": 0,
"title": "리브레 위키 2016년 7월 서버 대란"
},
{
"pageid": 13247,
"ns": 0,
"title": "리브레 위키 5·12 저작권 사태"
},
{
"pageid": 17087,
"ns": 0,
"title": "리브레 위키 5·24 위키방 사태"
},
{
"pageid": 19239,
"ns": 0,
"title": "리브레 위키 6·10 예비군 사태"
},
{
"pageid": 31764,
"ns": 0,
"title": "리브레 위키 6·29 게시판 폭파 사태"
},
{
"pageid": 19241,
"ns": 0,
"title": "리브레 위키 대피소"
}
]
}
}
|
참조 : mw:API:Allpages
Python
JS for mediawiki
"""
get_allpages.py
리브레 위키에서 "리브레 위키"로 시작하는 문서 찾기
"""
import requests
S = requests.Session()
URL = "https://librewiki.net/api.php"
PARAMS = {
"action": "query",
"format": "json",
"list": "allpages",
"apfrom": "리브레_위키",
"apfilterredir": "nonredirects",
"aplimit":"35",
"utf8":1 #한글 표기시 반드시 해야 한다.
}
R = S.get(url=URL, params=PARAMS)
DATA = R.json()
PAGES = DATA["query"]["allpages"] # 페이지 목록만 추출
for page in PAGES:
print(page["title"])
/*
get_allpages.js
MediaWiki API Demos
리브레 위키에서 '리브레 위키'로 시작하는 문서 추출
MIT License
*/
var params = {
"action": "query",
"format": "json",
"list": "allpages",
"apfrom": "리브레_위키",
"apfilterredir": "nonredirects",
"aplimit":"35",
"utf8":1 // 한글 표기시 반드시 해야 한다.
},
api = new mw.Api();
api.get( params ).done( function ( data ) {
var pages = data.query.allpages,
p;
for ( p in pages ) {
console.log( pages[ p ].title ); //콘솔창에 출력
}
} );
참조[원본 편집]
- mw:API:Query - 미디어위키 홈페이지 도움말
기초 사용법 | |
---|---|
위키 문법 | |
특수 기능 |