mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-13 09:12:52 +00:00
85 lines
2.2 KiB
JavaScript
85 lines
2.2 KiB
JavaScript
import _uniq from 'lodash-es/uniq';
|
|
|
|
import { json as d3_json } from 'd3-request';
|
|
|
|
import { utilQsString } from '../util';
|
|
import { currentLocale } from '../util/locale';
|
|
|
|
var endpoint = 'https://www.wikidata.org/w/api.php?';
|
|
var _wikidataCache = {};
|
|
|
|
export default {
|
|
|
|
init: function() {},
|
|
|
|
reset: function() {
|
|
_wikidataCache = {};
|
|
},
|
|
|
|
|
|
// Given a Wikipedia language and article title, return an array of
|
|
// corresponding Wikidata entities.
|
|
itemsByTitle: function(lang, title, callback) {
|
|
if (!title) {
|
|
callback('', {});
|
|
return;
|
|
}
|
|
|
|
lang = lang || 'en';
|
|
|
|
d3_json(endpoint + utilQsString({
|
|
action: 'wbgetentities',
|
|
format: 'json',
|
|
formatversion: 2,
|
|
sites: lang.replace(/-/g, '_') + 'wiki',
|
|
titles: title,
|
|
languages: 'en', // shrink response by filtering to one language
|
|
origin: '*'
|
|
}), function(err, data) {
|
|
if (err || !data || data.error) {
|
|
callback('', {});
|
|
} else {
|
|
callback(title, data.entities || {});
|
|
}
|
|
});
|
|
},
|
|
|
|
|
|
entityByQID: function(qid, callback) {
|
|
if (!qid) {
|
|
callback('', {});
|
|
return;
|
|
}
|
|
if (_wikidataCache[qid]) {
|
|
callback('', _wikidataCache[qid]);
|
|
return;
|
|
}
|
|
|
|
var langs = _uniq([
|
|
currentLocale.toLowerCase(),
|
|
currentLocale.split('-', 2)[0].toLowerCase(),
|
|
'en'
|
|
]);
|
|
|
|
d3_json(endpoint + utilQsString({
|
|
action: 'wbgetentities',
|
|
format: 'json',
|
|
formatversion: 2,
|
|
ids: qid,
|
|
props: /*sitelinks|*/'labels|descriptions',
|
|
//sitefilter: lang + 'wiki',
|
|
languages: langs.join('|'),
|
|
languagefallback: 1,
|
|
origin: '*'
|
|
}), function(err, data) {
|
|
if (err || !data || data.error) {
|
|
callback('', {});
|
|
} else {
|
|
_wikidataCache[qid] = data.entities[qid];
|
|
callback(qid, data.entities[qid] || {});
|
|
}
|
|
});
|
|
}
|
|
|
|
};
|