Files
iD/modules/services/wikipedia.js
2018-07-04 17:05:26 +01:00

100 lines
2.7 KiB
JavaScript

import { json as d3_json } from 'd3-request';
import { utilQsString } from '../util';
var endpoint = 'https://en.wikipedia.org/w/api.php?';
export default {
init: function() {},
reset: function() {},
search: function(lang, query, callback) {
if (!query) {
callback('', []);
return;
}
lang = lang || 'en';
d3_json(endpoint.replace('en', lang) +
utilQsString({
action: 'query',
list: 'search',
srlimit: '10',
srinfo: 'suggestion',
format: 'json',
origin: '*',
srsearch: query
}), function(err, data) {
if (err || !data || !data.query || !data.query.search || data.error) {
callback('', []);
} else {
var results = data.query.search.map(function(d) { return d.title; });
callback(query, results);
}
}
);
},
suggestions: function(lang, query, callback) {
if (!query) {
callback('', []);
return;
}
lang = lang || 'en';
d3_json(endpoint.replace('en', lang) +
utilQsString({
action: 'opensearch',
namespace: 0,
suggest: '',
format: 'json',
origin: '*',
search: query
}), function(err, data) {
if (err || !data || data.error) {
callback('', []);
} else {
callback(data[0], data[1] || []);
}
}
);
},
translations: function(lang, title, callback) {
if (!title) {
callback({});
return;
}
d3_json(endpoint.replace('en', lang) +
utilQsString({
action: 'query',
prop: 'langlinks',
format: 'json',
origin: '*',
lllimit: 500,
titles: title
}), function(err, data) {
if (err || !data || !data.query || !data.query.pages || data.error) {
callback({});
} else {
var list = data.query.pages[Object.keys(data.query.pages)[0]],
translations = {};
if (list && list.langlinks) {
list.langlinks.forEach(function(d) {
translations[d.lang] = d['*'];
});
}
callback(translations);
}
}
);
}
};