예제 #1
0
        private static void FillTitlesInImdbTitleFile(string pathTitleAkaImdbFile, ref List <Film> listOfMoviesUnexistingOrIncompleteInDb)
        {
            Console.WriteLine($"Number of unexisting or uncomplete movies : {listOfMoviesUnexistingOrIncompleteInDb.Count}");
            Console.WriteLine("Starting check in title file at : " + DateTime.Now.ToString("t"));
            if (listOfMoviesUnexistingOrIncompleteInDb.Count == 0)
            {
                return;
            }
            var    listTitleOfAMovie = new List <LigneTitleAkaImdb>();
            string previousId        = string.Empty;
            string currentId         = string.Empty;
            string line                  = string.Empty;
            string chosenTitle           = string.Empty;
            int    numberOfTitlesChecked = 0;
            int    numberOfLinesChecked  = 0;

            using (StreamReader sr = File.OpenText(pathTitleAkaImdbFile))
            {
                sr.ReadLine(); // column names
                while ((line = sr.ReadLine()) != null)
                {
                    numberOfLinesChecked++;
                    if (numberOfLinesChecked % 100000 == 0)
                    {
                        Console.WriteLine($"{numberOfLinesChecked} lines checked, at :" + DateTime.Now.ToString("t"));
                    }
                    string[] ligne = line.Split("\t");
                    if (ligne.Length != 8)
                    {
                        throw new InvalidDataException("ligne.Length != 8, value : " + line);
                    }
                    if (!listOfMoviesUnexistingOrIncompleteInDb.Any(m => m.Id == ligne[0]))
                    {
                        continue;
                    }
                    currentId = ligne[0];
                    if (!string.IsNullOrEmpty(previousId) && currentId != previousId)
                    {
                        chosenTitle = FindTheFrenchTitle(listTitleOfAMovie);
                        listOfMoviesUnexistingOrIncompleteInDb.Find(m => m.Id == previousId).Name = chosenTitle;
                        listTitleOfAMovie.Clear();
                        numberOfTitlesChecked++;
                    }
                    previousId = currentId;
                    var ligneFilm = new LigneTitleAkaImdb()
                    {
                        ImdbId   = ligne[0],
                        Ordering = ligne[1],
                        Title    = ligne[2],
                        Region   = ligne[3],
                        Language = ligne[4],
                        Type     = ligne[5]
                    };
                    listTitleOfAMovie.Add(ligneFilm);
                }
                if (listTitleOfAMovie.Count > 0)
                {
                    // One last time
                    chosenTitle = FindTheFrenchTitle(listTitleOfAMovie);
                    listOfMoviesUnexistingOrIncompleteInDb.Find(m => m.Id == previousId).Name = chosenTitle;
                }
            }
            Console.WriteLine("Checked titles : " + numberOfTitlesChecked);
            Console.WriteLine("Checked lines : " + numberOfLinesChecked);
        }
        private void FillTitlesInImdbTitleFile(string pathTitleAkaImdbFile, ref List <TopRatedMovie> listExistingMovies)
        {
            Console.WriteLine("Starting check in title file at : " + DateTime.Now.ToString("t"));
            if (listExistingMovies.Count == 0)
            {
                Console.WriteLine("listExistingMovies.Count == 0 at : " + DateTime.Now.ToString("t"));
                return;
            }
            var listTitleOfAMovie = new List <LigneTitleAkaImdb>();
            List <TopRatedMovie> listMoviesToUpdate = new List <TopRatedMovie>();
            string previousId    = string.Empty;
            string currentId     = string.Empty;
            string line          = string.Empty;
            string chosenTitle   = string.Empty;
            int    totalToUpdate = 0;

            using (StreamReader sr = File.OpenText(pathTitleAkaImdbFile))
            {
                for (var i = 1; i < START_AT_LINE; i++)
                {
                    sr.ReadLine();
                }
                Console.WriteLine($"{START_AT_LINE} skipped lines, at :" + DateTime.Now.ToString("t"));
                while ((line = sr.ReadLine()) != null)
                {
                    NumberOfLinesChecked++;
                    if (NumberOfLinesChecked % 100000 == 0)
                    {
                        Console.WriteLine($"{NumberOfLinesChecked} lines checked, at :" + DateTime.Now.ToString("t"));
                    }
                    string[] ligne = line.Split("\t");
                    if (ligne.Length != 8)
                    {
                        throw new InvalidDataException("ligne.Length != 8, value : " + line);
                    }
                    if (!listExistingMovies.Any(m => m.Id == ligne[0]))
                    {
                        continue;
                    }
                    currentId = ligne[0];
                    if (!string.IsNullOrEmpty(previousId) && currentId != previousId)
                    {
                        chosenTitle = FindTheFrenchTitle(listTitleOfAMovie);
                        var film = listExistingMovies.Find(m => m.Id == previousId);
                        film.Name = chosenTitle;
                        listMoviesToUpdate.Add(film);
                        if (CheckAndSaveInDatabaseEachXMovies(listMoviesToUpdate, ref totalToUpdate))
                        {
                            listMoviesToUpdate = new List <TopRatedMovie>();
                        }
                        listTitleOfAMovie.Clear();
                        NumberOfTitlesChecked++;
                    }
                    previousId = currentId;
                    var ligneFilm = new LigneTitleAkaImdb()
                    {
                        ImdbId   = ligne[0],
                        Ordering = ligne[1],
                        Title    = ligne[2],
                        Region   = ligne[3],
                        Language = ligne[4],
                        Type     = ligne[5]
                    };
                    listTitleOfAMovie.Add(ligneFilm);
                }
                if (listTitleOfAMovie.Count > 0)
                {
                    // One last time
                    chosenTitle = FindTheFrenchTitle(listTitleOfAMovie);
                    var film = listExistingMovies.Find(m => m.Id == previousId);
                    film.Name = chosenTitle;
                    listMoviesToUpdate.Add(film);
                    savingTasks.Add(SaveInDatabaseMoviesSync(listMoviesToUpdate, totalToUpdate));
                    Task.WaitAll(savingTasks.ToArray());
                    NumberOfTitlesChecked++;
                }
            }
            Console.WriteLine("Checked titles : " + NumberOfTitlesChecked);
            Console.WriteLine("Checked lines : " + NumberOfLinesChecked);
        }