Esempio n. 1
0
        public IActionResult GetPhotosForRover(long roverId, [FromQuery] string photoDate)
        {
            var rover           = _context.Rover.Find(roverId);
            var photoDateEntity = _context.PhotoDate.AsNoTracking().Where(x => x.EarthDate == photoDate).SingleOrDefault();

            if (rover != null)
            {
                if (photoDateEntity != null)
                {
                    //Look in Db first
                    var roverPhotos = _context.RoverPhoto.AsNoTracking().Where(x => x.RoverId == roverId && x.PhotoDateId == photoDateEntity.PhotoDateId).ToList();

                    if (roverPhotos.Count() > 0)
                    {
                        return(Ok(roverPhotos));
                    }
                    else
                    {
                        DateTime date = DateTime.Parse(photoDate);
                        List <Repository.EntityModels.RoverPhoto> addRoverPhotos = new List <Repository.EntityModels.RoverPhoto>();

                        RoverPhotoPage roverPhotoPage = Task.Run(() => _nasaClient.GetRoverPhotos(rover.Name, date)).Result;

                        if (roverPhotoPage.Photos.Count > 0)
                        {
                            foreach (var photo in roverPhotoPage.Photos)
                            {
                                addRoverPhotos.Add(new Repository.EntityModels.RoverPhoto
                                {
                                    RoverId         = rover.RoverId,
                                    RoverCameraInfo = JsonConvert.SerializeObject(photo.Camera),
                                    PhotoUrl        = photo.ImageUrl,
                                    PhotoDateId     = photoDateEntity.PhotoDateId
                                });
                            }

                            _context.RoverPhoto.AddRange(addRoverPhotos);
                            _context.SaveChanges();
                        }

                        return(Ok(_context.RoverPhoto.AsNoTracking().Where(x => x.RoverId == roverId && x.PhotoDateId == photoDateEntity.PhotoDateId).ToList()));
                    }
                }
                else
                {
                    return(NotFound("Date not found, please upload date from file"));
                }
            }
            else
            {
                return(NotFound("Rover not found"));
            }
        }
Esempio n. 2
0
        public async Task <RoverPhotoPage> GetRoverPhotoPage(string rover, DateTime date, int page)
        {
            RoverPhotoPage photoPage = null;

            var response = await _client.GetAsync($"https://api.nasa.gov/mars-photos/api/v1/rovers/{rover}/photos?earth_date={date.ToString("yyyy-M-d")}page={page}&api_key={_apiKey}");

            if (response.IsSuccessStatusCode)
            {
                var responseContent = await response.Content.ReadAsStringAsync();

                photoPage = JsonConvert.DeserializeObject <RoverPhotoPage>(responseContent);
            }

            return(photoPage); //TODO: handle when request is not successful in a better way
        }
Esempio n. 3
0
        static void Main(string[] args)
        {
            var builder = new ConfigurationBuilder()
                          .SetBasePath(Directory.GetCurrentDirectory())
                          .AddJsonFile("appsettings.json");

            var configuration = builder.Build();

            string inputFilePath = Path.Combine(Directory.GetCurrentDirectory(), configuration["inputFileName"]);

            Console.WriteLine($"Opening {inputFilePath}");
            if (File.Exists(inputFilePath))
            {
                FileStream file = new FileStream(inputFilePath, FileMode.Open);

                Console.WriteLine("Reading dates from input file.");

                List <DateTime> inputDates = FileHandler.ReadDatesFromFile(file);

                Console.WriteLine("Done.\n");

                NasaClient nasaClient = new NasaClient(configuration["nasaApi:apiKey"]);

                int pagesToRequest = ParseNumOfPagesToRequest(configuration["numOfPagesToRequest"]); //defaults to 1

                Console.WriteLine("Getting rover manifests.");

                Dictionary <string, RoverManifest> roverManifests = Task.Run(() => nasaClient.GetAllRoverManifests()).Result;

                Console.WriteLine("Done.\n");

                Dictionary <string, Dictionary <DateTime, List <RoverPhotoPage> > > roverPhotoPages = InitializeRoverPhotoPages(roverManifests, inputDates);

                Console.WriteLine("Begin fetching photos");
                foreach (var rover in roverManifests)
                {
                    Console.WriteLine($"\tFetch photos for {rover.Key}");
                    foreach (var date in inputDates)
                    {
                        Console.WriteLine($"\t\t\tat {date.ToShortDateString()}");
                        if (date >= rover.Value.PhotoManifest.LandingDate && date <= rover.Value.PhotoManifest.RecentPhotoDate)
                        {
                            for (int i = 1; i <= pagesToRequest; i++)
                            {
                                Console.WriteLine($"\t\t\t\tPage {i}");
                                RoverPhotoPage photoPage = Task.Run(() => nasaClient.GetRoverPhotoPage(rover.Key, date, i)).Result;
                                roverPhotoPages[rover.Key][date].Add(photoPage);
                            }
                        }
                    }
                    Console.WriteLine();
                }

                Console.WriteLine("Download photos");
                nasaClient.DownloadImagesForRovers(roverPhotoPages, Directory.GetCurrentDirectory());
                Console.WriteLine("Done.");

                Console.WriteLine("Writing Rover Photo Pages to output.json");
                FileHandler.WriteRoverPhotoPagesToJson(roverPhotoPages);
                Console.WriteLine("Done.\n");
            }

            Console.WriteLine("Enter key to exit.");
            Console.ReadLine();
        }