MediaWiki API를 사용하여 hubot에 위키

Slack에서 bot에 위키 정보를 조사하는 방법을 소개합니다.



정보를 얻는 수단으로 MediaWiki API에서 요청을 보내 JSON 형식으로 결과를 받습니다.

MediaWiki의 공식 문서는 이쪽
htps //w w. 메아 아우키. 오 rg / uuki / api : Main_Page

MediaWiki API 사양



API를 사용하는데 필요한 최소한의 사양을 간단히 정리해 둡니다.

URL 형식



일본어 버전의 Wikipedia를 사용하려면 다음 URL로 요청을 보냅니다.
http://ja.wikipedia.org/w/api.php?パラメータ1=値1&パラメータ2=値2&...&パラメータn=値n

매개변수 유형



이번에는 다음의 파라미터를 이용합니다.


매개변수
의미



액션
조작
query, edit,...

format
출력 형식
json, xml, ...

prop
기사의 각 구성 요소 얻기
info, extracts, revisions,...

redirects
전송 설정
1(있음),0(없음)

exchars
문자 수
정수

explaintext
문자 수정을 제거
1(있음),0(없음)

titles
기사 제목
URL 인코딩된 문자열


소스 코드



소개 전체 소스를 붙입니다. copipe에서 작동합니다.

request 클라이언트가 없는 경우 설치하십시오.
npm install request

이하, 소스 코드
request = require('request');

module.exports = (robot) ->
robot.hear /wiki (.*)/i, (msg) ->
keyword = encodeURIComponent msg.match[1]
request.get("https://ja.wikipedia.org/w/api.php?action=query&format=json&prop=extracts&redirects=1&exchars=300&explaintext=1&titles=#{keyword}", (err, res, body) ->
if err or res.statusCode != 200
return msg.send "アクセスできなかったよ"

data = JSON.parse(body)
for id, value of data.query.pages
msg.send "#{value.extract}" 
)

그러면 각 처리에 대해 설명합니다.
keyword = encodeURIComponent msg.match[1]

API로 요청할 때 일본어는 URL로 인코딩해야 하므로 입력된 키워드를 변환하고 있습니다.
request.get("https://ja.wikipedia.org/w/api.php?action=query&format=json&prop=extracts&redirects=1&exchars=300&explaintext=1&titles=#{keyword}", (err, res, body) ->
  if err or res.statusCode != 200
    return msg.send "アクセスできなかったよ" 

실제로 요청하고 있는 것이 이 처리입니다. 위에서 소개한 파라미터를 “&”로 연결하고, titles 부분에는 URL 인코딩된 키워드를 사용합니다.

에러나 200(성공) 이외의 스테이터스 코드가 돌아왔을 경우에는 「액세스 할 수 없었다」라고 하는 메세지를 출력시킵니다.
data = JSON.parse(body)
for id, value of data.query.pages
msg.send "#{value.extract}" 

데이터 획득에 성공하면 json 데이터를 구문 분석하고 변환합니다. 일본어 문자열도 올바르게 표시됩니다. 얻은 json 데이터는 for of을 사용하여 결과 부분을 빼낼 수 있습니다.

위에서 "wiki [키워드]"를 입력하면 hubot이 위키됩니다.

참고

좋은 웹페이지 즐겨찾기