public Scraper(ITVMazeService tvMazeService, IShowRepository showRepository, IPersonRepository personRepository, ILoggerFactory loggerFactory) { this.tvMazeService = tvMazeService; this.showRepository = showRepository; this.personRepository = personRepository; this.loggerFactory = loggerFactory; logger = loggerFactory.CreateLogger("Scraper"); }
public ScraperController( ITVShowService tvShowService, ITVMazeService tvMazeService, ILogger <ScraperController> logger) { _tvShowService = tvShowService; _tvMazeService = tvMazeService; _logger = logger; }
static void ConfigureServices(ServiceCollection serviceCollection) { var configBuilder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json"); var configuration = configBuilder.Build(); var connectionStr = configuration.GetConnectionString("DefaultConnection"); serviceCollection.AddDbContext <TVMazeScrapperDBContext>(options => options.UseSqlServer(connectionStr)) .AddTransient <IShowRepository, ShowRepository>() .AddTransient <IPersonRepository, PersonRepository>() .AddTransient <IScraper, Scraper>() .AddTransient <ITVMazeService, TVMazeService>() .AddTransient <ITVMazeService, TVMazeService>() .AddSingleton(new LoggerFactory() .AddConsole(configuration.GetSection("Logging")) .AddDebug()) .AddLogging(); serviceCollection.AddHttpClient <TVMazeHttpClient>(client => { client.BaseAddress = new Uri("https://api.tvmaze.com/"); client.DefaultRequestHeaders.Add("Accept", "application/json"); client.DefaultRequestHeaders.Add("User-Agent", "TVMazeScraper"); }) .SetHandlerLifetime(TimeSpan.FromMinutes(5)) .AddPolicyHandler(TVMazeHttpClient.GetRetryPolicy()); var services = serviceCollection.BuildServiceProvider(); tvMazeService = services.GetService <ITVMazeService>(); tvMazeHttpClient = services.GetService <TVMazeHttpClient>(); scrapper = services.GetService <IScraper>(); dbContext = services.GetService <TVMazeScrapperDBContext>(); showRepository = services.GetService <IShowRepository>(); }
private async Task <int> ScrapeFrom(uint tvMazeID, ITVShowService tvShowService, ITVMazeService tvMazeService) { int updatedTVShows = 0; uint pageSize = 20; int storedShowsCount = 0; do { var scrappedShows = await tvMazeService.Scrape(tvMazeID, pageSize); if (scrappedShows != null && scrappedShows.Count > 0) { storedShowsCount = await tvShowService.StoreTVShows(scrappedShows); } _logger.Log(LogLevel.Information, $"{scrappedShows?.Count} of {storedShowsCount} scrapped TV Maze Shows were stored of {pageSize}"); tvMazeID += pageSize; }while (storedShowsCount > 0); return(updatedTVShows); }