Commit 6a098ae0 authored by Pauline Maury Laribière's avatar Pauline Maury Laribière
Browse files

documenting

parent 1c55d76c
Pipeline #269578 failed with stage
in 1 minute and 34 seconds
^.*\.Rproj$
^\.Rproj\.user$
Package: fso_metadata
Type: Package
Title: Metadata Auto R
Version: 0.0.0.1
\ No newline at end of file
Version: 0.0.0.1
Authors@R: person("Pauline", "Maury Laribiere", email = "pauline.maury-laribiere@bfs.admin.ch", role = c("aut", "cre"))
Depends: R (>= 3.1.0)
License: What license is it under?
LazyData: true
Imports:
glue,
hash,
httr,
jsonlite,
RoxygenNote: 7.1.1
# Generated by roxygen2: do not edit by hand
library(hash)
###############################################################
########################## i14y APIs ##########################
###############################################################
get_codelist <- function(
identifier,
export_format="SDMX-ML",
version_format=2.1,
annotations=FALSE
){
# @export
get_codelist <- function(identifier,
export_format = "SDMX-ML",
version_format = 2.1,
annotations = FALSE) {
api <- api_class(
api_type = "codelist",
export_format = export_format,
......@@ -20,14 +17,14 @@ get_codelist <- function(
}
get_content_configuration <- function(){
get_content_configuration <- function() {
api <- api_class(api_type = "content_configuration")
api$get_response()
}
get_identifier_content <- function(identifier){
get_identifier_content <- function(identifier) {
api <- api_class(
api_type = "content_configuration_identifier",
id = identifier
......@@ -38,10 +35,10 @@ get_identifier_content <- function(identifier){
get_dataset_description <- function(identifier, language='fr'){
get_dataset_description <- function(identifier, language = "fr") {
api <- api_class(
api_type = "dcat_dataset_description",
id = identifier,
id = identifier,
language = language
)
api$get_response()
......@@ -49,10 +46,10 @@ get_dataset_description <- function(identifier, language='fr'){
get_dataset_information <- function(identifier, language='en'){
get_dataset_information <- function(identifier, language = "en") {
api <- api_class(
api_type = "dcat_dataset_information",
id = identifier,
id = identifier,
language = language
)
api$get_response()
......@@ -60,10 +57,10 @@ get_dataset_information <- function(identifier, language='en'){
get_data_structure <- function(identifier, language='en'){
get_data_structure <- function(identifier, language = "en") {
api <- api_class(
api_type = "dcat_data_structure",
id = identifier,
id = identifier,
language = language
)
api$get_response()
......@@ -71,15 +68,13 @@ get_data_structure <- function(identifier, language='en'){
get_nomenclature_path_nodes <- function(
identifier,
path='.',
filters='',
language='en'
){
get_nomenclature_path_nodes <- function(identifier,
path = ".",
filters = "",
language = "en") {
api <- api_class(
api_type = "nomenclature_path_nodes",
id = identifier,
id = identifier,
path = path,
parameters = stringify(filters),
language = language
......@@ -88,39 +83,35 @@ get_nomenclature_path_nodes <- function(
}
get_nomenclature_one_level<- function(
identifier,
filters,
level_number=1,
language='en',
annotations=FALSE
){
parameters = glue("language={language}&level={level_number}&annotations={tolower(annotations)}&{stringify(filters)}")
get_nomenclature_one_level <- function(identifier,
filters,
level_number = 1,
language = "en",
annotations = FALSE) {
parameters <- glue::glue("language={language}&level={level_number}&annotations={tolower(annotations)}&{stringify(filters)}")
print(parameters)
api <- api_class(
api_type = "nomenclature_one_level",
id = identifier,
id = identifier,
parameters = parameters,
export_format= "CSV"
export_format = "CSV"
)
api$get_response()
}
get_nomenclature_multiple_levels <- function(
identifier,
filters,
level_from=1,
level_to=2,
language='en',
annotations=FALSE
){
parameters = glue("language={language}&levelFrom={level_from}&levelTo={level_to}&annotations={tolower(annotations)}&{stringify(filters)}")
get_nomenclature_multiple_levels <- function(identifier,
filters,
level_from = 1,
level_to = 2,
language = "en",
annotations = FALSE) {
parameters <- glue::glue("language={language}&levelFrom={level_from}&levelTo={level_to}&annotations={tolower(annotations)}&{stringify(filters)}")
api <- api_class(
api_type = "nomenclature_multiple_levels",
id = identifier,
id = identifier,
parameters = parameters,
export_format= "CSV"
export_format = "CSV"
)
api$get_response()
###############################################################
......@@ -129,18 +120,16 @@ get_nomenclature_multiple_levels <- function(
}
query_nomenclature <- function(
identifier,
query,
page_number,
page_size,
filters,
language='en'
){
parameters = glue("query={URLencode(query)}&page={page_number}&pageSize={page_size}&language={language}&{stringify(filters)}")
query_nomenclature <- function(identifier,
query,
page_number,
page_size,
filters,
language = "en") {
parameters <- glue::glue("query={URLencode(query)}&page={page_number}&pageSize={page_size}&language={language}&{stringify(filters)}")
api <- api_class(
api_type = "nomenclature_search",
id = identifier,
id = identifier,
parameters = parameters
)
api$get_response()
......@@ -153,7 +142,7 @@ query_nomenclature <- function(
###############################################################
dcat_list_all_agents <- function(){
dcat_list_all_agents <- function() {
api <- api_class(
api_type = "agents_list",
root_url = DCAT_URL
......@@ -162,7 +151,7 @@ dcat_list_all_agents <- function(){
}
dcat_get_agent_from_id <- function(agent_id){
dcat_get_agent_from_id <- function(agent_id) {
api <- api_class(
api_type = "agent_id",
root_url = DCAT_URL,
......@@ -172,7 +161,7 @@ dcat_get_agent_from_id <- function(agent_id){
}
dcat_list_all_datasets <- function(){
dcat_list_all_datasets <- function() {
api <- api_class(
api_type = "dataset_list",
root_url = DCAT_URL
......@@ -181,7 +170,7 @@ dcat_list_all_datasets <- function(){
}
dcat_get_distributions_from_dataset_id <- function(dataset_id){
dcat_get_distributions_from_dataset_id <- function(dataset_id) {
api <- api_class(
api_type = "dataset_id_distributions",
root_url = DCAT_URL,
......@@ -191,7 +180,7 @@ dcat_get_distributions_from_dataset_id <- function(dataset_id){
}
dcat_get_dataset_from_id <- function(dataset_id){
dcat_get_dataset_from_id <- function(dataset_id) {
api <- api_class(
api_type = "dataset_id",
root_url = DCAT_URL,
......@@ -201,7 +190,7 @@ dcat_get_dataset_from_id <- function(dataset_id){
}
dcat_get_dataset_from_identifier <- function(identifier){
dcat_get_dataset_from_identifier <- function(identifier) {
api <- api_class(
api_type = "dataset_identifier",
root_url = DCAT_URL,
......@@ -211,7 +200,7 @@ dcat_get_dataset_from_identifier <- function(identifier){
}
dcat_get_distributions_from_dataset_identifier <- function(identifier){
dcat_get_distributions_from_dataset_identifier <- function(identifier) {
api <- api_class(
api_type = "dataset_identifier_distributions",
root_url = DCAT_URL,
......@@ -221,7 +210,7 @@ dcat_get_distributions_from_dataset_identifier <- function(identifier){
}
dcat_list_all_distributions <- function(){
dcat_list_all_distributions <- function() {
api <- api_class(
api_type = "distributions_list",
root_url = DCAT_URL
......@@ -230,7 +219,7 @@ dcat_list_all_distributions <- function(){
}
dcat_get_distribution_from_id <- function(distribution_id){
dcat_get_distribution_from_id <- function(distribution_id) {
api <- api_class(
api_type = "distribution_id",
root_url = DCAT_URL,
......
library(hash)
library(methods)
library(glue)
#' Api class to make appropriate request based on parameters
#'
#' @field api_type character. The name of the api to call (see url_mapping)
#' @field export_format character (default = "JSON"). The export's format
#' Available are CSV, XLSX, SDMX-ML and JSON
#' @field root_url character (default = "BASE_URL"). Root url to call (for i14y or dcat)
#' @field parameters character. Additional request parameters
#' @field id character. The identifier or id of the request's object
#' @field language character (default = "en"). The language of the response data.
#' Available are 'fr', 'de', 'it', 'en'
#' @field version_format numeric (default = 2.1). The export format's version
#' (2.0 or 2.1 when format is SDMX-ML)
#' (for 'codelist')
#' @field path character. The path leading to the nodes
#' (for 'nomenclature_search')
#' @field api_url character. The url to make the request to.
#'
#' @examples
#' api <- api_class(api_type = "codelist", id = "CL_NOGA_SECTION")
#' api <- api_class(api_type = "content_configuration")
api_class <- setRefClass(
"Api",
"Api",
fields = list(
api_type = "character",
export_format = "character",
api_type = "character",
export_format = "character",
root_url = "character",
parameters = "character",
id = "character",
language = "character",
version_format="numeric",
version_format = "numeric",
path = "character",
api_url = "character"
),
methods = list(
initialize = function(
...,
export_format = "JSON",
root_url = BASE_URL,
parameters = "",
id = "",
language = "en",
version_format=2.1,
path = "."
){
initialize = function(...,
export_format = "JSON",
root_url = BASE_URL,
parameters = "",
id = "",
language = "en",
version_format = 2.1,
path = ".") {
callSuper(
...,
export_format = export_format,
root_url = root_url,
parameters = parameters,
id = id,
language = language,
version_format=version_format,
...,
export_format = export_format,
root_url = root_url,
parameters = parameters,
id = id,
language = language,
version_format = version_format,
path = path
)
get_url()
},
get_response = function(){
get_response = function() {
request_function <- REQUEST_FUNCTION_MAPPING[[export_format]]
print(request_function)
if(parameters==""){
url = glue("{root_url}/api/{api_url}")
if (parameters == "") {
url <- glue::glue("{root_url}/api/{api_url}")
} else {
url = glue("{root_url}/api/{api_url}?{parameters}")
url <- glue::glue("{root_url}/api/{api_url}?{parameters}")
}
print(url)
request_function(url)
},
},
get_url = function() {
url_mapping <- hash(
url_mapping <- hash::hash(
# i14y
'codelist'=
glue('CodeLists/{id}/exports/{export_format}/{version_format}'),
'content_configuration' =
glue('ContentConfigurations'),
'content_configuration_identifier' =
glue('ContentConfigurations/{id}'),
'dcat_data_structure' =
glue('DataStructures/{id}/{language}'),
'dcat_dataset_description' =
glue('Datasets/{id}/{language}/description'),
'dcat_dataset_information' =
glue('Datasets/{id}/{language}/distributions'),
'nomenclature_path_nodes' =
glue('Nomenclatures/Childnodes/{id}/{language}/{path}'),
'nomenclature_one_level' =
glue('Nomenclatures/{id}/levelexport/CSV'),
'nomenclature_multiple_levels' =
glue('Nomenclatures/{id}/multiplelevels/CSV'),
'nomenclature_search' =
glue('Nomenclatures/{id}/search'),
"codelist" =
glue::glue("CodeLists/{id}/exports/{export_format}/{version_format}"),
"content_configuration" =
glue::glue("ContentConfigurations"),
"content_configuration_identifier" =
glue::glue("ContentConfigurations/{id}"),
"dcat_data_structure" =
glue::glue("DataStructures/{id}/{language}"),
"dcat_dataset_description" =
glue::glue("Datasets/{id}/{language}/description"),
"dcat_dataset_information" =
glue::glue("Datasets/{id}/{language}/distributions"),
"nomenclature_path_nodes" =
glue::glue("Nomenclatures/Childnodes/{id}/{language}/{path}"),
"nomenclature_one_level" =
glue::glue("Nomenclatures/{id}/levelexport/CSV"),
"nomenclature_multiple_levels" =
glue::glue("Nomenclatures/{id}/multiplelevels/CSV"),
"nomenclature_search" =
glue::glue("Nomenclatures/{id}/search"),
# dcat
'agents_list' =
glue('Agent'),
'agent_id' =
glue('Agent/{id}'),
'dataset_list' =
glue('Dataset'),
'dataset_id_distributions' =
glue('Dataset/{id}/distributions'),
'dataset_id' =
glue('Dataset/{id}'),
'dataset_identifier' =
glue('Datataset/identifier/{id}'),
'dataset_identifier_distributions' =
glue('Datataset/identifier/{id}/distributions'),
'distributions_list' =
glue('Distribution'),
'distribution_id' =
glue('Distribution/{id}')
"agents_list" =
glue::glue("Agent"),
"agent_id" =
glue::glue("Agent/{id}"),
"dataset_list" =
glue::glue("Dataset"),
"dataset_id_distributions" =
glue::glue("Dataset/{id}/distributions"),
"dataset_id" =
glue::glue("Dataset/{id}"),
"dataset_identifier" =
glue::glue("Datataset/identifier/{id}"),
"dataset_identifier_distributions" =
glue::glue("Datataset/identifier/{id}/distributions"),
"distributions_list" =
glue::glue("Distribution"),
"distribution_id" =
glue::glue("Distribution/{id}")
)
api_url <<- url_mapping[[api_type]]
}
......
# Root URL constants
BASE_URL <- 'https://www.i14y.admin.ch'
DCAT_URL <- 'https://dcat.app.cfap02.atlantica.admin.ch'
# Request function
REQUEST_FUNCTION_MAPPING <- hash(
"SDMX-ML" = sdmx_request,
"JSON" = json_request,
"CSV" = csv_request
)
\ No newline at end of file
BASE_URL <- "https://www.i14y.admin.ch"
DCAT_URL <- "https://dcat.app.cfap02.atlantica.admin.ch"
library(httr)
library(jsonlite)
library(rsdmx)
library(hash)
#' API query for SDMX output
#'
#' @param url url to query
#'
#' @return dataframe response
sdmx_request <- function(url) {
as.data.frame(readSDMX(url))
as.data.frame(rsdmx::readSDMX(url))
}
#' API query for JSON output
#'
#' @param url url to query
#'
#' @return response: dataframe or list of dataframes
json_request <- function(url) {
fromJSON(rawToChar(GET(url)$content))
jsonlite::fromJSON(rawToChar(httr::GET(url)$content))
}
#' API query for CSV output
#'
#' @param url url to query
#'
#' @return dataframe response
csv_request <- function(url) {
read.csv(url)
}
\ No newline at end of file
}
# Request function based on expected response
REQUEST_FUNCTION_MAPPING <- hash::hash(
"SDMX-ML" = sdmx_request,
"JSON" = json_request,
"CSV" = csv_request
)
install.packages(c("devtools", "roxygen2", "httr", "jsonlite", "glue", "hash"))
devtools::install_github("opensdmx/rsdmx")
#' Transform a hash object into a string of parameters
#'
#' @param filters hash object
#'
#' @return formatted string of parameters
#'
#' @examples
#' filters <- hash::hash("a" = list("1"), "b" = list("2", "3"))
#' stringify(filters) -> "a=1&b=2&b=3"
stringify <- function(filters) {
string=""
string <- ""
for (prop in ls(filters)) {
for (value in filters[[prop]]){
if (string=="") {
string = glue("{prop}={value}")
for (value in filters[[prop]]) {
if (string == "") {
string <- glue::glue("{prop}={value}")
} else {
string = paste(string, glue("{prop}={value}"), sep="&")
string <- paste(string, glue("{prop}={value}"), sep = "&")
}
}
}
......
......@@ -39,7 +39,8 @@ get_identifier_content(identifier='HCL_CH_ISCO_19_PROF')
## Dataset
```{r , echo=FALSE}
get_dataset_description(identifier='HCL_NOGA', language='de')
res <- get_dataset_description(identifier='HCL_NOGA', language='de')
res
```
```{r , echo=FALSE}
......@@ -54,7 +55,7 @@ get_data_structure(identifier='HCL_NOGA', language='it')
## Nomenclature
```{r , echo=FALSE}
my_filters <- hash(
my_filters <- hash::hash(
'prop1'= list("string"),
'prop2' = list("string", "string2")
)
......
This diff is collapsed.
install.packages(c("devtools", "roxygen2", "document", "styler"))
install.packages(c("httr", "jsonlite", "glue", "hash"))
devtools::install_github("opensdmx/rsdmx")
library(hash)
library(methods)
library(glue)
library(httr)
library(jsonlite)
library(rsdmx)
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/api_class.R
\docType{class}
\name{Api-class}
\alias{Api-class}
\alias{api_class}
\title{Api class to make appropriate request based on parameters}
\description{
Api class to make appropriate request based on parameters
}
\section{Fields}{
\describe{
\item{\code{api_type}}{character. The name of the api to call (see url_mapping)}
\item{\code{export_format}}{character. The export's format
Available are CSV, XLSX, SDMX-ML and SDMX-JSON}
\item{\code{root_url}}{character. Root url to call (for i14y or dcat)}
\item{\code{parameters}}{character. Additional request parameters}
\item{\code{id}}{character. The identifier or id of the request's object}
\item{\code{language}}{character. The language of the response data.
Available are 'fr', 'de', 'it', 'en'}