Exemple #1
0
 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");
 }
Exemple #2
0
 public ScraperController(
     ITVShowService tvShowService,
     ITVMazeService tvMazeService,
     ILogger <ScraperController> logger)
 {
     _tvShowService = tvShowService;
     _tvMazeService = tvMazeService;
     _logger        = logger;
 }
Exemple #3
0
        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);
        }