private async Task DownloadData(FintoDownloadSettingsItem download, FintoSettings settings) { var version = settings.Endpoints.TryGet(Version); if (version == null) { throw new Exception("Version is not defined in FINTO configuration file."); } var versionNumber = download.Version; if (versionNumber == null) { var defaultVersionNumber = settings.Endpoints.TryGet(DefaultVersion); if (defaultVersionNumber == null) { throw new Exception("Default version number is not defined in FINTO configuration file."); } versionNumber = int.Parse(defaultVersionNumber); } version = string.Format(version, versionNumber); foreach (var link in download.Links) { string action = settings.Endpoints.TryGet(link.Action); if (string.IsNullOrEmpty(action)) { Console.Error.WriteLine($"Action {action} not found. Check settings for {download.Name}."); continue; } link.Content = await GetFinto(settings, version, action, link.Param, link.File, download.DownloadFolder, download.SaveToFile); } }
private async Task <string> GetFinto(FintoSettings settings, string version, string action, string param, string path = null, string folder = "", bool saveToFile = true) { if (string.IsNullOrEmpty(folder)) { folder = OutputFolder; } if (string.IsNullOrEmpty(path)) { path = param; } Console.Write($"Loading data for {param}... started at {DateTime.UtcNow:HH:mm:ss zz}"); string result = await GetFintoJson(version, action, param, settings); if (result == null) { return(null); } var x = JsonConvert.DeserializeObject(result); var texts = JsonConvert.SerializeObject(x, Formatting.Indented); if (saveToFile) { var file = new FileInfo(Path.Combine(folder, $"{path}.json")); if (!file.Directory.Exists) { file.Directory.Create(); } File.WriteAllText(file.FullName, texts); Console.WriteLine($@"Data loaded. Result size {result.Length}. File '{file.FullName}'"); } return(texts); }
internal async Task DownloadData(FintoSettings settings) { foreach (var download in settings.Downloads) { var definition = settings.DownloadDefinitions.TryGet(download); if (definition == null) { Console.Error.WriteLine($"Definitoin for key {download} not found."); continue; } if (!definition.MergeOnly) { await DownloadData(definition, settings); } Merge(definition); } }
internal async Task <string> GetFintoJson(string version, string action, string param, FintoSettings settings) { using (var client = new HttpClient()) { try { client.Timeout = new TimeSpan(1, 0, 0); var response = await client.GetAsync(settings.Endpoints["baseUri"] + version + string.Format(action, param)); string body = await response.Content.ReadAsStringAsync(); return(body); } catch (TimeoutException e) { Console.Error.WriteLine(e); return(null); } catch (Exception e) { Console.Error.WriteLine(e); return(null); } } }