|
13 | 13 | #' what is the best way to interact with SDMX APIs. |
14 | 14 | #' |
15 | 15 | #' @inheritParams get_eurostat |
16 | | -#' @inheritParams get_eurostat_async |
17 | 16 | #' @param agency Either "Eurostat" (default), "Eurostat_comext" |
18 | 17 | #' (for Comext and Prodcom datasets), "COMP", "EMPL" or "GROW" |
19 | 18 | #' @param use.data.table Use data.table to process files? Default is FALSE. |
20 | 19 | #' If data.table is used, data will be downloaded as a TSV file and |
21 | 20 | #' processed using [tidy_eurostat()] |
| 21 | +#' @param wait Integer. Seconds between status checks. Default is 1 second. |
| 22 | +#' @param max_wait Integer. Max time to wait in seconds. Default is 60 seconds. |
| 23 | +#' @param compressed Logical. Download data in compressed format? Default is TRUE. |
22 | 24 | #' |
23 | 25 | #' @importFrom curl curl_download |
24 | 26 | #' @importFrom utils download.file |
@@ -131,7 +133,7 @@ get_eurostat_sdmx <- function( |
131 | 133 | } |
132 | 134 |
|
133 | 135 | get_sdmx_codelist <- function(codelist_id, agency = "Eurostat", type = "list", lang = NULL) { |
134 | | - lang <- eurostat:::check_lang(lang) |
| 136 | + lang <- check_lang(lang) |
135 | 137 |
|
136 | 138 | api_base_uri <- build_api_base_uri(agency) |
137 | 139 |
|
@@ -170,7 +172,7 @@ get_sdmx_codelist <- function(codelist_id, agency = "Eurostat", type = "list", l |
170 | 172 |
|
171 | 173 | get_sdmx_conceptscheme <- function(id, agency = "Eurostat", type = "list", lang = NULL) { |
172 | 174 |
|
173 | | - lang <- eurostat:::check_lang(lang) |
| 175 | + lang <- check_lang(lang) |
174 | 176 |
|
175 | 177 | api_base_uri <- build_api_base_uri(agency) |
176 | 178 |
|
@@ -223,6 +225,7 @@ get_sdmx_conceptscheme <- function(id, agency = "Eurostat", type = "list", lang |
223 | 225 | return(metadata_returnable) |
224 | 226 | } |
225 | 227 |
|
| 228 | +#' @importFrom xml2 xml_ns xml_find_first xml_text xml_attr xml_find_all |
226 | 229 | get_sdmx_dsd <- function(id, agency = "Eurostat", type = "list", lang = NULL) { |
227 | 230 | api_base_uri <- build_api_base_uri(agency) |
228 | 231 |
|
@@ -649,84 +652,3 @@ label_eurostat_sdmx <- function(x, agency, id, lang = "en", verbose = TRUE) { |
649 | 652 | } |
650 | 653 | x |
651 | 654 | } |
652 | | - |
653 | | -#' @title Create OM compliant datasets |
654 | | -#' @importFrom dataset dublincore dataset_df |
655 | | -#' @examples |
656 | | -#' enriched_dataset <- om_dataset("nama_10_gdp", lang = "de") |
657 | | -#' |
658 | | -om_dataset <- function(id, agency = "eurostat", lang = "en") { |
659 | | - lang <- check_lang(lang) |
660 | | - |
661 | | - df <- get_eurostat_sdmx(id = id, lang = lang, agency = agency, legacy.data.output = FALSE, verbose = FALSE) |
662 | | - |
663 | | - dataflow <- eurostat:::get_sdmx_dataflow(id = id, agency = agency, type = "list", lang = lang) |
664 | | - |
665 | | - colnames <- names(df) |
666 | | - |
667 | | - if ("geo" %in% colnames) { |
668 | | - geo_dict <- get_sdmx_codelist("geo", lang = lang) |
669 | | - geo_names <- unique(geo_dict$name[geo_dict$id %in% df$geo]) |
670 | | - if (length(geo_names) > 40) { |
671 | | - coverage = "Europe" |
672 | | - } else { |
673 | | - coverage = paste(unique(geo_names), collapse = ", ") |
674 | | - } |
675 | | - } else { |
676 | | - coverage = "Europe" |
677 | | - } |
678 | | - |
679 | | - concept_scheme <- eurostat:::get_sdmx_conceptscheme(id = id, agency = agency, lang = lang) |
680 | | - |
681 | | - dsd <- get_sdmx_dsd(id = id, agency = agency, lang = lang) |
682 | | - |
683 | | - bibentry <- dataset::dublincore( |
684 | | - title = dataflow$name, |
685 | | - creator = person(given = dataflow$source_institutions, role = "cre"), |
686 | | - publisher = dataflow$source_institutions, # I think the publisher is Eurostat... or maybe European Commission? |
687 | | - datasource = dataflow$doi_url, |
688 | | - rights = "Creative Commons Attribution 4.0 International", # could be shortened to CC-BY 4.0 |
689 | | - coverage = coverage, |
690 | | - language = lang) |
691 | | - |
692 | | - df_with_metadata <- add_metadata(df, concept_scheme = concept_scheme, dsd = dsd) |
693 | | - |
694 | | - dataset_enriched <- dataset::dataset_df(df_with_metadata, |
695 | | - dataset_bibentry = bibentry) |
696 | | - |
697 | | - return(dataset_enriched) |
698 | | -} |
699 | | - |
700 | | - |
701 | | -add_metadata <- function(df, concept_scheme, |
702 | | - dsd) { |
703 | | - |
704 | | - # Check required columns in concept_scheme |
705 | | - if (!all(c("id", "name") %in% names(concept_scheme))) { |
706 | | - stop("concept_scheme must contain 'id' and 'name' columns.") |
707 | | - } |
708 | | - |
709 | | - # Make sure we can iterate over the names |
710 | | - df_out <- df |
711 | | - |
712 | | - for (var in names(df)) { |
713 | | - if (var %in% concept_scheme$id) { |
714 | | - |
715 | | - label <- concept_scheme$name[concept_scheme$id == var] |
716 | | - |
717 | | - # Construct metadata URIs |
718 | | - concept_uri <- concept_scheme$urn[concept_scheme$id == var] |
719 | | - namespace <- dsd$urn[dsd$id == var] |
720 | | - |
721 | | - # Apply defined() dynamically |
722 | | - df_out[[var]] <- dataset::defined( |
723 | | - df[[var]], |
724 | | - label = label, |
725 | | - concept = concept_uri, |
726 | | - namespace = namespace |
727 | | - ) |
728 | | - } |
729 | | - } |
730 | | - |
731 | | - return(df_out) |
732 | | -} |
0 commit comments