-
Notifications
You must be signed in to change notification settings - Fork 0
/
index-sync.js
120 lines (109 loc) · 3.99 KB
/
index-sync.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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
//Do not use - testing purposes only
let request = require('request');
if (typeof require !== 'undefined') XLSX = require('xlsx');
// Complete neccesary fields:
//Oauth2
const token_endpoint = 'https://icdaccessmanagement.who.int/connect/token';
const client_id = '' ; // Your client ID Here
const client_secret = '' ; // Your client secret here
const scope = 'icdapi_access';
const grant_type = 'client_credentials';
let access_token;
//XLS source details
var sourceWorkbook = XLSX.readFile('mini-snomed-list.xls');
var sourceWorksheet = sourceWorkbook.Sheets['Hoja1'];
//Options object to request token
let options = {
url: token_endpoint,
form: {
client_id: client_id,
client_secret: client_secret,
scope: scope,
grant_type: grant_type
}
};
request.post(options, (error, res, body) => {
if (error) {
console.error(error)
return
}
if(`${res.statusCode}` == 200){
console.log("Successfully connected to server");
}
console.log(`statusCode: ${res.statusCode}`);
var info = JSON.parse(body)
access_token = info.access_token;
//Options object to request search
searchOptions = {
uri: 'https://id.who.int/icd/entity/search?q={}',
headers: {
'Authorization': 'Bearer ' + access_token,
'Accept': 'application/json',
'Accept-Language': 'en'
}
}
let searchIndex = 2; //if data matrix starts in row 2
let finalIndex = 6194 + 2; // #ConceptsToSearch + 2
sourceWorksheet['A1'] = sourceWorksheet['A1'] ? sourceWorksheet['A1'] : {};
sourceWorksheet['A1'].t = 's';
sourceWorksheet['A1'].v = 'Concept ID'
sourceWorksheet['B1'] = sourceWorksheet['B1'] ? sourceWorksheet['B1'] : {};
sourceWorksheet['B1'].t = 's';
sourceWorksheet['B1'].v = 'Name'
sourceWorksheet['C1'] = sourceWorksheet['C1'] ? sourceWorksheet['C1'] : {};
sourceWorksheet['C1'].t = 's';
sourceWorksheet['C1'].v = 'Effective Time'
sourceWorksheet['D1'] = sourceWorksheet['D1'] ? sourceWorksheet['D1'] : {};
sourceWorksheet['D1'].t = 's';
sourceWorksheet['D1'].v = 'ICD11 match'
sourceWorksheet['E1'] = sourceWorksheet['E1'] ? sourceWorksheet['E1'] : {};
sourceWorksheet['E1'].t = 's';
sourceWorksheet['E1'].v = 'Score'
while (searchIndex < finalIndex) {
let sourceCell = 'B' + searchIndex;
let resultCell = 'D' + searchIndex;
let scoreCell = 'E' + searchIndex;
const range = {
s: {
c: 0,
r: 0
},
e: {
c: 100,
r: searchIndex + 1
}
};
sourceWorksheet['!ref'] = XLSX.utils.encode_range(range);
searchOptions.uri = 'https://id.who.int/icd/entity/search?q={' + sourceWorksheet[sourceCell].v + '}';
sourceWorksheet[resultCell] = sourceWorksheet[resultCell] ? sourceWorksheet[resultCell] : {};
sourceWorksheet[resultCell].t = 's';
sourceWorksheet[scoreCell] = sourceWorksheet[scoreCell] ? sourceWorksheet[scoreCell] : {};
sourceWorksheet[scoreCell].t = 'n';
request.get(searchOptions, (error, res, body) => {
if (error) {
console.error(error);
sourceWorksheet[resultCell].v = 'Bad request';
return;
}
console.log('Cell' + sourceCell + ' request returned ' + `statusCode: ${res.statusCode}`);
let info = JSON.parse(body);
info.DestinationEntities.sort(function (a, b) {
return b.Score - a.Score;
});
if (info.DestinationEntities.length == 0) {
sourceWorksheet[resultCell].v = 'No match';
} else {
sourceWorksheet[resultCell].v = info.DestinationEntities[0].Title;
sourceWorksheet[scoreCell].v = info.DestinationEntities[0].Score;
}
XLSX.writeFile(sourceWorkbook, 'mini-snomed-list-results.xls');
// console.log("Best match for SNOMEDCT term:'" + worksheet[cell].v + "' is:" + info.DestinationEntities[0].Title);
// let i = 0;
// while (i < info.DestinationEntities.length) {
// console.log("Best match:" + info.DestinationEntities[i].Title + ' with a score of: ' + info.DestinationEntities[i].Score);
// i++;
// }
});
searchIndex++;
}
});