This repository has been archived by the owner on Mar 15, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 15
/
name_unmatches_with_wikidata.js
78 lines (69 loc) · 2.22 KB
/
name_unmatches_with_wikidata.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
'use strict';
var request = require('request');
module.exports = nameUnmatchesWithWikidata;
function getWikidataName(feature, id) {
if (
feature.hasOwnProperty('entities') &&
feature['entities'].hasOwnProperty(id) &&
feature['entities'][id].hasOwnProperty(['labels']) &&
feature['entities'][id]['labels'].hasOwnProperty('en')
)
return feature['entities'][id]['labels']['en']['value'];
else
return undefined;
}
function getWikidataAliasNames(feature, id) {
var names = [];
if (
feature.hasOwnProperty('entities') &&
feature['entities'].hasOwnProperty(id) &&
feature['entities'][id].hasOwnProperty(['aliases']) &&
feature['entities'][id]['aliases'].hasOwnProperty('en')
) {
var aliases = feature['entities'][id]['aliases']['en'];
for (var i = 0; i < aliases.length; i++) {
names.push(aliases[i]['value']);
}
}
return names;
}
function nameUnmatchesWithWikidata(newVersion, oldVersion, callback) {
if (newVersion.deleted) return callback(null, false);
// Check if feature is newly created.
if (newVersion.properties['osm:version'] !== 1) {
if (
!oldVersion ||
newVersion.properties['name'] === oldVersion.properties['name']
)
return callback(null, false);
}
if (
newVersion.properties.hasOwnProperty('wikidata') &&
newVersion.properties.hasOwnProperty('name')
) {
var osmName = newVersion.properties['name'];
var wikidataID = newVersion.properties['wikidata'];
var url = 'https://www.wikidata.org/w/api.php?action=wbgetentities&ids=' +
wikidataID +
'&format=json';
request(url, function(error, response, body) {
if (!error && response && response.statusCode === 200) {
var wikidataFeature = JSON.parse(body);
var wikidataName = getWikidataName(wikidataFeature, wikidataID);
var wikidataAliasNames = getWikidataAliasNames(
wikidataFeature,
wikidataID
);
if (
osmName !== wikidataName && wikidataAliasNames.indexOf(osmName) === -1
)
return callback(null, {
'result:name_unmatches_with_wikidata': true
});
}
return callback(null, false);
});
} else {
return callback(null, false);
}
}