コード例 #1
0
        public async Task <bool> SaveFullInfo(TmdbWrapper.Movies.Movie selectedMovieInfo)
        {
            if (selectedMovieInfo == null)
            {
                return(false);
            }
            //The movie might already exist in the universe so this would replace it
            //This is a search Result for a specific movie
            selectedMovie = u.GetMovie(selectedMovieSummary.Id);
            if (selectedMovie != null)
            {
                if (MessageBox.Show("Replace " + selectedMovie.Title + " with web data?", "Confirm Replace", MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    return(false);
                }
            }

            //Clear or create
            selectedMovie = new Movie(selectedMovieInfo.Title, selectedMovieInfo.ReleaseDate.Value.Year);
            selectedMovie.BackdropPath  = selectedMovieInfo.BackdropPath;
            selectedMovie.TmdbId        = selectedMovieInfo.Id;
            selectedMovie.ImdbId        = selectedMovieInfo.ImdbId;
            selectedMovie.OriginalTitle = selectedMovieInfo.OriginalTitle;
            selectedMovie.Overview      = selectedMovieInfo.Overview;
            selectedMovie.PosterPath    = selectedMovieInfo.PosterPath;
            selectedMovie.ReleaseDate   = selectedMovieInfo.ReleaseDate;
            selectedMovie.Revenue       = selectedMovieInfo.Revenue;
            selectedMovie.Runtime       = selectedMovieInfo.Runtime;
            selectedMovie.HomePage      = selectedMovieInfo.Homepage;
            //TODO - add remaining properties

            //Add Collection Id to movie ONLY if one exists
            if (selectedMovieInfo.BelongsToCollection != null)
            {
                //Add Collection ID to Movie
                //selectedMovie.CollectionId = selectedMovieInfo.BelongsToCollection.Id;
                MovieCollection mc = u.GetMovieCollection(selectedMovieInfo.Id);
                if (mc == null)
                {
                    //Lookup selectedMovieInfo.BelongsToCollection.Id to see if it exists..
                    //Add Collection to Universe
                    MovieCollection m = u.AddMovieCollection(selectedMovieInfo.BelongsToCollection.Name, selectedMovieInfo.BelongsToCollection.Id, selectedMovieInfo.BelongsToCollection.PosterPath, selectedMovieInfo.BelongsToCollection.BackdropPath);

                    //ONly need to do this once per movie in the collection!!
                    //update the parts of the collection below for Universe
                    TmdbWrapper.Collections.Collection coll = await selectedMovieInfo.BelongsToCollection.CollectionAsync();

                    if (coll != null)
                    {
                        m.Overview = coll.Overview; //Update the Movie Collection Overview.
                        foreach (TmdbWrapper.Collections.Part p in coll.Parts)
                        {
                            u.AddMovieToCollection(m.Id, p.Id); // Add the movie ids of the parts to the Movie Collection Part

                            //m.Parts.Add(p.Id); // Add the movie ids of the parts to the Movie Collection Part
                        }
                    }
                    else
                    {
                        Console.WriteLine("Should never be here! Movie Belongs to a collection but Collection is null!");
                    }
                }
            }


            //Add Production Companies - Already have

            foreach (var item in selectedMovieInfo.ProductionCompanies)
            {
                //Try to get the Production Company and see if it has been updated if Null or not updated then Do web lookup

                ProductionCompany pc = u.GetProductionCompany(item.Id);
                if (u.GetProductionCompany(item.Id) == null || pc.Updated == false)
                {
                    TmdbWrapper.Companies.Company c = await item.CompanyAsync(); // await FindProductionCompany(item.Id);

                    pc              = new ProductionCompany(item.Name, item.Id, item.LogoPath, item.OriginCountry);
                    pc.Description  = c.Description;
                    pc.Headquarters = c.Headquarters;
                    pc.Homepage     = c.Homepage;
                    pc.Updated      = true; // Flag so it will not cause a lookup again.
                                            //Add Parent Production Companies
                    if (c.ParentCompany != null)
                    {
                        pc.ParentCompanyId = c.ParentCompany.Id; // This could change based on movie release data.. (before purchase of A by B)
                    }
                    u.AddProductionCompany(pc);
                }
                MovieProductionCompanyMap mpcm = new MovieProductionCompanyMap();
                mpcm.MovieId             = selectedMovieInfo.Id;
                mpcm.ProductionCompanyId = item.Id;
                u.MovieProductionCompanyMap.Add(mpcm);
            }

            //Get the Movie Credits Now.
            TmdbWrapper.Movies.Credits credits = await selectedMovieInfo.CreditsAsync();

            //credits.Cast
            int  personCount = 0;
            bool skip        = false;
            int  castLimit   = 100;

            foreach (TmdbWrapper.Movies.CastPerson cp in credits.Cast)
            {
                //try
                //{
                String cpCharacter = cp.Character;
                if (cpCharacter.Length == 0)     // Seriously??!!??
                {
                    switch (cp.Gender)
                    {
                    case 0:
                        cpCharacter = "Themself";
                        break;

                    case 1:
                        cpCharacter = "Herself";
                        break;

                    case 2:
                        cpCharacter = "Himself";
                        break;
                    }
                }
                ////Add Character To Movie (Could be Alias able character so mapping would be necessary)
                Character c = u.AddCharacter(cpCharacter,
                                             selectedMovie.TmdbId,
                                             cp.Id,
                                             cp.CreditId,
                                             cp.CastId,
                                             cp.Order
                                             );
                //}
                //catch (Exception err)
                //{

                //}
                //Get full person Info
                //THis is a problem because TMDB will return delay if getting too many at once.
                //Also SERIOUSLY consider only getting the first 10% of the cast - but probably have them already from other movies..
                //Need on demand.
                Person p = new Person(cp.Name);
                p.Id          = cp.Id;
                p.ProfilePath = cp.ProfilePath;
                skip          = false;
                //See if we already have the person in the list
                if (u.People.Select(o => o.Id == cp.Id).Contains(true))
                {
                    //Get the person and see if they have been updated with full information
                    Person testPC = u.People.First(o => o.Id == cp.Id);
                    if (testPC.Updated)
                    {
                        skip = true;
                    }
                }
                if (!skip && personCount < 2)
                {
                    Thread.Sleep(100); // Slow it down..
                    TmdbWrapper.Persons.Person tmdbPerson = await cp.PersonAsync();

                    p.HomePage     = tmdbPerson.Homepage;
                    p.Biography    = tmdbPerson.Biography;
                    p.Birthday     = tmdbPerson.Birthday;
                    p.Deathday     = tmdbPerson.Deathday;
                    p.PlaceOfBirth = tmdbPerson.PlaceOfBirth;
                    p.Updated      = true;
                    personCount++;
                }
                bool personAdded = u.AddPerson(p); // Will fail to add existing person and add basic and updated people.
                if (--castLimit == 0)
                {
                    break;
                }
            }

            ////credits.Crew - Adds significant numbers of People and data Entry
            #region Crew import
            int crewLimit = 10;
            foreach (TmdbWrapper.Movies.CrewPerson crewPerson in credits.Crew)
            {
                u.AddCrewMember(crewPerson, selectedMovie);
                if (--crewLimit == 0)
                {
                    break;
                }
            }
            #endregion

            //Want this for movie search results..
            TmdbWrapper.Movies.Trailers t = await selectedMovieInfo.TrailersAsync(); // Want to have.. does nothing now..

            if (t != null && t.Youtube.Count > 0)
            {
                String firstSource = t.Youtube[0].Source;
                //https://www.youtube.com/watch?v=CmRih_VtVAs // Example of how to use the source.
                selectedMovie.TrailerLink = "https://www.youtube.com/watch?v=" + firstSource;
            }


            u.AddMovie(selectedMovie);
            //Verify This is OK...
            PersistenceBase.Save(PrivateData.GetRelativePath(@"\Cache\uinverse3.json"), u);
            return(true);
        }
コード例 #2
0
 private void btnSaveUniverse_Click(object sender, EventArgs e)
 {
     PersistenceBase.Save(PrivateData.GetRelativePath(@"\Cache\uinverse3.json"), u);
 }
コード例 #3
0
        private void button1_Click(object sender, EventArgs e)
        {
            flpThumbNails.Controls.Clear();
            //Example Image Search using Google API
            //Get my private API key
            string apiKey = PrivateData.GetGoogleApiKey();
            //Image Search engine.. Can change to other search engines
            string searchEngineId = PrivateData.GetGoogleSearchId();
            //Base Query
            Movie         m = u.GetMovie(cbMovie.SelectedItem.ToString());
            int           movieReleaseYear = m.ReleaseYear;
            String        movieTitle       = m.Title;
            String        characterName    = lbCharacters.SelectedItem.ToString().Replace("/", ""); // Remove slash if it exists.
            String        actor            = "";
            HashSet <int> peopleIDs        = new HashSet <int>();                                   // m.GetActorsWhoPlayedCharacter(characterName);

            if (peopleIDs.Count() > 0)
            {
                int person1 = peopleIDs.First();
                actor = u.People.First(o => o.Id == person1).Name;
            }
            else
            {
                //Problem with lookup
            }

            string query = actor + " as " + characterName + " in " + movieTitle; // Need Movie and Actor example: Jared Leto as The Joker in Suicide Squad // 2016
            CharacterImageSearchResults cisr = new CharacterImageSearchResults();
            var customSearchService          = new CustomsearchService(new BaseClientService.Initializer {
                ApiKey = apiKey
            });
            var features    = customSearchService.Features;
            var listRequest = customSearchService.Cse.List(query);

            listRequest.Cx           = searchEngineId;
            listRequest.SearchType   = CseResource.ListRequest.SearchTypeEnum.Image;
            listRequest.ImgType      = CseResource.ListRequest.ImgTypeEnum.Face;
            listRequest.ExcludeTerms = "toys, collectables, figure";
            listRequest.Filter       = CseResource.ListRequest.FilterEnum.Value1; // Turn on duplicate content filter.
            Console.WriteLine("Image Search for: " + query);
            IList <Result> paging = new List <Result>();
            var            count  = 0;

            while (paging != null)
            {
                //  Console.WriteLine($"Page {count}");
                listRequest.Start = count * 10 + 1;
                if (listRequest.Start >= 50)
                {
                    break; // DOn't want all results..  just first 5 pages (50 or so.
                }
                paging = listRequest.Execute().Items;
                if (paging != null)
                {
                    foreach (var item in paging)
                    {
                        //Can and should filter by known Titles that would not be relevant (first through search engine and second here.)
                        //+ "Image :" + item.Image.ContextLink+
                        string tFilter = item.Title.ToLower();
                        if (tFilter.Contains("toys") || tFilter.Contains("tv") || tFilter.Contains("collectibles") || tFilter.Contains("figure") || tFilter.Contains("halloween"))
                        {
                            continue; //skip this one
                        }
                        Console.WriteLine("Title : " + item.Title + Environment.NewLine
                                          + "ContextLink: " + item.Image.ContextLink + Environment.NewLine
                                          + "MIME: " + item.Mime + Environment.NewLine
                                          + "Image Link: " + item.Link + Environment.NewLine
                                          + "Image Width: " + item.Image.Width + Environment.NewLine
                                          + "Image Height: " + item.Image.Height + Environment.NewLine
                                          + "Thumbnail Link: " + item.Image.ThumbnailLink + Environment.NewLine
                                          + "Thumbnail Width: " + item.Image.ThumbnailWidth + Environment.NewLine
                                          + "Thumbnail Height: " + item.Image.ThumbnailHeight + Environment.NewLine
                                          + Environment.NewLine);
                        CharacterImageSearchResult cis = new CharacterImageSearchResult();
                        cis.Title           = item.Title;
                        cis.ContextLink     = item.Image.ContextLink;
                        cis.Mime            = item.Mime;
                        cis.ImageLink       = item.Link;
                        cis.ImageWidth      = (int)item.Image.Width;
                        cis.ImageHeight     = (int)item.Image.Height;
                        cis.ThumbnailLink   = item.Image.ThumbnailLink;
                        cis.ThumbnailWidth  = (int)item.Image.ThumbnailWidth;
                        cis.ThumbnailHeight = (int)item.Image.ThumbnailHeight;
                        cisr.CharacterImageSearchResultsList.Add(cis);

                        createImage(item.Image.ThumbnailLink, item.Link, (int)item.Image.ThumbnailWidth, (int)item.Image.ThumbnailHeight);
                    }
                }
                count++;
            }
            //Console.WriteLine("Done.");
            //Console.ReadLine();
            //No Slashes
            //No Colon
            //Can't have quotes (Escaped or otherwise)
            PersistenceBase.Save(PrivateData.GetAppPath() + @"\Private\" + query.Replace("/", "_").Replace(":", "") + ".json", cisr);
        }