diff --git a/src/fetch_series_by_api_link.m b/src/fetch_series_by_api_link.m index adc6fc784aba2b14a797b3f560e69c3b3e714bba..ffb25aee9371fe7f4cd5221f2c75ba1a188aacbd 100644 --- a/src/fetch_series_by_api_link.m +++ b/src/fetch_series_by_api_link.m @@ -74,7 +74,7 @@ else end dimensions_labels_columns_names = [dimensions_labels_columns_names, dimensions_labels_columns_names_dataset]; end - ordered_columns_names = [common_columns, dimensions_codes_columns_names, dimensions_labels_columns_names]; + ordered_columns_names = [common_columns, dimensions_codes_columns_names', dimensions_labels_columns_names]; if ~isempty(p.Results.dbnomics_filters) filtered_series_list = filter_series(series_list, p.Results.dbnomics_filters,p.Results.editor_api_base_url); @@ -96,8 +96,8 @@ else flat_series = flatten_dbnomics_series(series_list{ii}); % Add dimensions labels to flat_series - complete_dataset_code = [flat_series.provider_code '_' flat_series.dataset_code]; - dataset_dimensions = datasets_dimensions.(complete_dataset_code); + complete_dataset_code = [flat_series.provider_code '_' flat_series.dataset_code]; + dataset_dimensions = datasets_dimensions.(complete_dataset_code); if isfield(dataset_dimensions, 'dimensions_labels') dataset_dimensions_labels = dataset_dimensions.dimensions_labels; else @@ -109,21 +109,26 @@ else % Add dimensions values labels to current series if isfield(dataset_dimensions, 'dimensions_values_labels') dimension_codes = intersect(dimensions_codes_columns_names, fieldnames(dataset_dimensions_labels)'); - for jj = 1:length(dimension_codes) + flat_series.labels = cell(length(dimension_codes),2); + for jj = 1:length(dimension_codes) series_code = regexprep(flat_series.series_code,'[^a-zA-Z0-9]','_'); dimension_label = dataset_dimensions_labels.(dimension_codes{jj}); - flat_series.labels{jj, 1} = dimension_label; + flat_series.labels{jj, 1} = dimension_label; dimension_value_code = regexprep(series_dims_by_dataset_code.(complete_dataset_code).(series_code).(dimension_codes{jj}),'[^a-zA-Z0-9]','_'); if isstrprop(dimension_value_code(1), 'digit') %MATLAB doesn't allow struct field names to start with a digit dimension_value_code = strcat('x', dimension_value_code); end - try - flat_series.labels{jj, 2} = dataset_dimensions.dimensions_values_labels.(dimension_codes{jj}).(dimension_value_code); - catch - for it = 1:size(dataset_dimensions.dimensions_values_labels.(dimension_codes{jj}), 1) - tmp = regexprep(dataset_dimensions.dimensions_values_labels.(dimension_codes{jj}){it}{1}, '[^a-zA-Z0-9]', '_'); - if strcmp(tmp, dimension_value_code) - flat_series.labels{jj, 2} = dataset_dimensions.dimensions_values_labels.(dimension_codes{jj}){it}{2}; + code_ = fieldnames(dataset_dimensions.dimensions_values_labels.(dimension_codes{jj})); + match_ = regexprep(code_{1}, '_0\w\d\w_', '_'); + if strcmp(match_, dimension_value_code) + try + flat_series.labels{jj, 2} = dataset_dimensions.dimensions_values_labels.(dimension_codes{jj}).(dimension_value_code); + catch + for it = 1:size(dataset_dimensions.dimensions_values_labels.(dimension_codes{jj}), 1) + tmp = regexprep(dataset_dimensions.dimensions_values_labels.(dimension_codes{jj}){it}{1}, '[^a-zA-Z0-9]', '_'); + if strcmp(tmp, dimension_value_code) + flat_series.labels{jj, 2} = dataset_dimensions.dimensions_values_labels.(dimension_codes{jj}){it}{2}; + end end end end @@ -188,4 +193,4 @@ end %$ end %$ %$ T = all(t); -%@eof:1 \ No newline at end of file +%@eof:1 diff --git a/src/utils/fetch_series_page.m b/src/utils/fetch_series_page.m index 8ecfc352b76dd9655bc8a814aa7f2508253eb579..8383453c32df88eee46926c80f8adcb8d38f12ba 100644 --- a/src/utils/fetch_series_page.m +++ b/src/utils/fetch_series_page.m @@ -30,7 +30,7 @@ function response_json = fetch_series_page(series_endpoint_url, offset) % You should have received a copy of the GNU General Public License % along with Dynare. If not, see <http://www.gnu.org/licenses/>. -if contains(series_endpoint_url, '?') +if ~isempty(strfind(series_endpoint_url, '?')) series_page_url = sprintf('%s%soffset=%i', series_endpoint_url, '&', offset); else series_page_url = sprintf('%s%soffset=%i', series_endpoint_url, '?', offset); @@ -38,7 +38,10 @@ end options = weboptions('ContentType','json'); try - response_json = webread(series_page_url, options); + response_ = webread(series_page_url, options); + tmp = strrep(response_, '\/', '_'); + response_json = loadjson(tmp); + % response_json = jdatadecode(tmp); catch ME error_message = ['Could not fetch data from URL: ' series_page_url ' because: ' ME.identifier]; error(error_message);