도움말:미디어위키 쿼리

미디어위키 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 ); //콘솔창에 출력
	}
} );

참조[원본 편집]