Wikipedia API を利用した「説明しよう!」bot を作った
説明しよう!bot
正体は 大迫半端ないbot with Wikipedia です.
する
や いる
を見つけて、あたかもそれが半端ないように説明します.
旬が過ぎそうなので公開しますね.
ソースコード
const request = require('request');
// Wiki API
const wiki_url = "http://ja.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&titles=";
const toHalfWidth = (string) => {
return string.replace(/[!-~]/g, (halfString) => String.fromCharCode(halfString.charCodeAt(0) - 0xFEE0))
.replace(/”/g, "\"")
.replace(/’/g, "'")
.replace(/‘/g, "`")
.replace(/¥/g, "\\")
.replace(/ /g, " ")
.replace(/〜/g, "~");
};
const requestWiki = (word, callback) => {
if (!word) {
callback(word + 'はんぱないって。');
return;
}
request(wiki_url + encodeURI(toHalfWidth(word)), (error, response, body) => {
if (!error && response.statusCode === 200) {
const info = JSON.parse(body);
const query = info.query;
var contents = [];
if (query && query.pages) {
for (var p in query.pages) {
if (query.pages[p].extract) {
contents = query.pages[p].extract.replace(/<("[^"]*"|'[^']*'|[^'">])*>/g,'').split('。');
if (contents && contents.length > 0) {
var suru = null;
for (var i = 0; i < contents.length; i++) {
if (contents[i].match(/(.*)する$/i) != null) {
suru = contents[i];
break;
}
}
if (!suru) {
for (var i = 0; i < contents.length; i++) {
if (contents[i].match(/(.*)いる$/i) != null) {
suru = contents[i].replace(/いる$/, "る");
break;
}
}
}
if (suru) {
callback(word + 'はんぱないって。アイツはんぱないって。' + suru.replace('\n', '') + 'もん。そんなん出来ひんやん、普通。');
return;
}
}
}
}
}
}
callback(word + 'はんぱないって。');
});
};
使い方
requestWiki('小倉唯', (body) => {
// 送信処理
});
おわりに
Wikipedia の文章は一見いろいろな書き方が存在するが、実はよく似た書き方がされている。 その特徴をつかんで面白おかしく実装するのもいいですね.