Я пытаюсь сделать массовые вызовы FHIR API из R. Я наткнулся на пакет R [RonFHIR][1]
. Но я застрял с endpoint needs authorization
и не понял, как передать запрос авторизации или каковы требуемые параметры авторизации? На странице github есть пример, но он не может заставить его работать.
В качестве альтернативы, есть среда SMARTonFHIR, у нее также есть открытый сервер, но я все равно получаю то же самое.
library(RonFHIR)
client <- fhirClient$new("https://r3.smarthealthit.org")
Warning: The endpoint requires authorization.
Я пытаюсь сделать вызовы API из R / Shiny и получить образцы данных FHIR в сеанс R. Любое решение с вышеуказанным пакетом или альтернативное решение с Python / R будет полезно. Или возможность использования клиента JS SMARTonFHIR непосредственно в блестящем будет идеальной.
Я пытался использовать клиент JS SMART / FHIR напрямую, а не в зависимости от пакета RonFhir. В основном это пример Плункер Но безуспешно. Ниже приведен код. Вывод на блестящий пользовательский интерфейс просто names list NULL
, когда переменная todaysDiagnoses
отправляется на блестящий. Если var smart
возвращается из JS в R, он просто возвращает все ссылки, но не информацию о пациенте.
app.r
library(shiny)
library(shinyjs)
if (interactive()) {
# testing url
options(shiny.port = 8100)
APP_URL <- "http://localhost:8100/"
} else {
# deployed URL
APP_URL <- "https://servername/path-to-app"
}
ui <- fluidPage(
tags$head(
tags$script(src = "https://code.jquery.com/jquery-2.0.3.min.js")
),
tags$script(src = "https://cdn.rawgit.com/smart-on-fhir/client-js/v0.1.8/dist/fhir-client.js"),
includeScript(path = "get-data.js"),
includeScript(path = "demo-settings.js"),
bootstrapPage(
# include the js code
# includeScript("demo-settings.js"),
# a div named mydiv
tags$div(
id = "mydiv",
style = "width: 50px; height :50px; left: 100px; top: 100px;
background-color: gray; position: absolute"
),
# an element for unformatted text
verbatimTextOutput("results")
)
)
server <- function(input, output) {
output$results = renderPrint({
print(input$mydata)
})
}
shinyApp(ui = ui, server)
#demo-settings.js$(document).ready(function() {
document.getElementById("mydiv").onclick = function() {
var smart = FHIR.client({
serviceUrl:'https://r2.smarthealthit.org',
patientId:'smart-1137192'
})
var todaysDiagnoses = smart.api.search({
type:'Condition',
query:{
dateRecorded:'2014-05-01'
}
})
Shiny.onInputChange("mydata", todaysDiagnoses)
}
Shiny.addCustomMessageHandler("myCallbackHandler", function(color) {
document.getElementById("mydiv").style.backgroundColor = color
})
})
демо-settings.js
$(document).ready(function() {
document.getElementById("mydiv").onclick = function() {
//var number = Math.random();
var smart = FHIR.client({
serviceUrl: 'https://r2.smarthealthit.org',
patientId: 'smart-1137192'
});
var todaysDiagnoses = smart.api.search({
type: 'Condition',
query: {dateRecorded: '2014-05-01'}
});
Shiny.onInputChange("mydata", todaysDiagnoses);
};
Shiny.addCustomMessageHandler("myCallbackHandler",
function(color) {
document.getElementById("mydiv").style.backgroundColor = color;
}
);
});
Get-data.js
function getPatientName(pt) {
if (pt.name) {
var names = pt.name.map(function(name) {
return name.given.join(" ") + " " + name.family.join(" ");
});
return names.join(" / ")
} else {
return "anonymous";
}
}
function getMedicationName(medCodings) {
var coding = medCodings.find(function(c) {
return c.system == "http://www.nlm.nih.gov/research/umls/rxnorm";
});
return coding && coding.display || "Unnamed Medication(TM)"
}
function displayPatient(pt) {
document.getElementById('patient_name').innerHTML = getPatientName(pt);
}
var med_list = document.getElementById('med_list');
function displayMedication(medCodings) {
med_list.innerHTML += "<li> " + getMedicationName(medCodings) + "</li>";
}
// Create a FHIR client (server URL, patient id in `demo`)
var smart = FHIR.client(demo),
pt = smart.patient;
// Create a patient banner by fetching + rendering demographics
smart.patient.read().then(function(pt) {
displayPatient(pt);
});
// A more advanced query: search for active Prescriptions, including med details
smart.patient.api.fetchAllWithReferences({
type: "MedicationOrder"
}, ["MedicationOrder.medicationReference"]).then(function(results, refs) {
results.forEach(function(prescription) {
if (prescription.medicationCodeableConcept) {
displayMedication(prescription.medicationCodeableConcept.coding);
} else if (prescription.medicationReference) {
var med = refs(prescription, prescription.medicationReference);
displayMedication(med && med.code.coding || []);
}
});