private HeadHunterQueryParameters GetQueryParameters(HeadHunterSubscriptionParameters subscriptionParameters, DateTime?dateFrom = null, DateTime?dateTo = null) { return(new() { SpecializationId = subscriptionParameters.SpecializationId, SearchText = subscriptionParameters.SearchText, Schedules = subscriptionParameters.Schedules, Areas = subscriptionParameters.Areas, PageNumber = 0, ItemsPerPage = 100, DateFrom = dateFrom == null? null: $"{dateFrom:yyyy-MM-dd}", DateTo = dateTo == null?null:$"{dateTo:yyyy-MM-dd}" }); }
public async IAsyncEnumerable <HeadHunterSnippet> GetSnippets( HeadHunterSubscriptionParameters subscriptionParameters) { //var queryParameters = GetQueryParameters(subscriptionParameters, DateTime.Now.AddDays(-7), DateTime.Now); var queryParameters = GetQueryParameters(subscriptionParameters); var pagesCount = 1; var currentPage = 0; do { var snippets = await _headHunterApi.GetVacanciesSnippets(queryParameters); if (currentPage == 0) { _logger.LogInformation("Total number vacancies {totalVacanciesCount}, pages {totalPagesCount}", snippets.Found, snippets.Pages); pagesCount = snippets.Pages; } _logger.LogInformation("Processing page {CurrentPageNumber}", currentPage + 1); foreach (var data in snippets.Items) { if (data == null) { continue; } var snippet = JObject.Parse(data.ToString() ?? string.Empty); var vacancy = new HeadHunterSnippet { Id = (string)snippet["id"], Name = (string)snippet["name"], CreatedDate = (DateTimeOffset)snippet["created_at"], UpdateDate = (DateTimeOffset)snippet["published_at"], Responsibility = (string)snippet["snippet"]?["responsibility"] }; yield return(vacancy); await Task.Delay(_timeOut); } currentPage++; queryParameters.PageNumber++; } while (currentPage < pagesCount); }