Skip to content
api_class.R 3.25 KiB
Newer Older
library(hash)
library(methods)
library(glue)

api_class <- setRefClass(
  "Api", 
  
  fields = list(
    api_type = "character", 
    export_format = "character", 
    root_url = "character",
    parameters = "character",
    id = "character",
    language = "character",
    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 = "."
    ){
      callSuper(
        ..., 
        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(){
      request_function <- REQUEST_FUNCTION_MAPPING[[export_format]]
      print(request_function)
      if(parameters==""){
        url = glue("{root_url}/api/{api_url}")
      } else {
        url = glue("{root_url}/api/{api_url}?{parameters}")
      }
      print(url)
      request_function(url)
    get_url = function() {
      url_mapping <- hash(
        # i14y
        'codelist'=
          glue('CodeLists/{id}/exports/{export_format}/{version_format}'),
        'content_configuration' =
          glue('ContentConfigurations'),
        'content_configuration_identifier' =
          glue('ContentConfigurations/{id}'),
        'dcat_dataset_description' =
          glue('Datasets/{id}/{language}/description'),
        'dcat_dataset_information' =
          glue('Datasets/{id}/{language}/distributions'),
        'data_structure' =
          glue('DataStructures/{id}/{language}'),
        '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'),
        
        # 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}')
      )
      api_url <<- url_mapping[[api_type]]
    }
  )
)


api_call <- api_class(
  api_type = "codelist", 
  export_format = "SDMX-ML", 
  parameters = "level=1&annotations=true&additionalProp2=string&language=fr",
  id = "CL_NOGA_SECTION"
)
api_call$api_url
api_call$get_response()

api_call <- api_class(
  api_type = "nomenclature_one_level", 
  export_format = "CSV", 
  parameters = "level=1&annotations=true&additionalProp2=string&language=fr",
  id = "HCL_CH_ISCO_19_PROF"
api_call$get_response()