!wip added a search by actor methodin the Movie Search Engine

pull/2754/head
TidusJar 6 years ago
parent 3e4b2a8e9f
commit ff73e78e2c

@ -19,5 +19,6 @@ namespace Ombi.Core
Task<SearchMovieViewModel> LookupImdbInformation(int theMovieDbId, string langCode = null);
Task<IEnumerable<SearchMovieViewModel>> SimilarMovies(int theMovieDbId, string langCode);
Task<IEnumerable<SearchMovieViewModel>> SearchActor(string search, string langaugeCode);
}
}

@ -54,8 +54,6 @@ namespace Ombi.Core.Engine
/// <summary>
/// Searches the specified movie.
/// </summary>
/// <param name="search">The search.</param>
/// <returns></returns>
public async Task<IEnumerable<SearchMovieViewModel>> Search(string search, int? year, string langaugeCode)
{
langaugeCode = await DefaultLanguageCode(langaugeCode);
@ -68,6 +66,33 @@ namespace Ombi.Core.Engine
return null;
}
public async Task<IEnumerable<SearchMovieViewModel>> SearchActor(string search, string langaugeCode)
{
langaugeCode = await DefaultLanguageCode(langaugeCode);
var people = await MovieApi.SearchByActor(search, langaugeCode);
var person = people?.results?.Count > 0 ? people.results.FirstOrDefault() : null;
var resultSet = new List<SearchMovieViewModel>();
if (person == null)
{
return resultSet;
}
// Get this person movie credits
var credits = await MovieApi.GetActorMovieCredits(person.id, langaugeCode);
// Grab results from both cast and crew, prefer items in cast. we can handle directors like this.
var movieResults = (from role in credits.cast select new { Id = role.id, Title = role.title, ReleaseDate = role.release_date }).ToList();
movieResults.AddRange((from job in credits.crew select new { Id = job.id, Title = job.title, ReleaseDate = job.release_date }).ToList());
movieResults = movieResults.Take(10).ToList();
foreach (var movieResult in movieResults)
{
resultSet.Add(await LookupImdbInformation(movieResult.Id, langaugeCode));
}
return resultSet;
}
/// <summary>
/// Get similar movies to the id passed in
/// </summary>

@ -19,5 +19,7 @@ namespace Ombi.Api.TheMovieDb
Task<FindResult> Find(string externalId, ExternalSource source);
Task<TvExternals> GetTvExternals(int theMovieDbId);
Task<TvInfo> GetTVInfo(string themoviedbid);
Task<TheMovieDbContainer<ActorResult>> SearchByActor(string searchTerm, string langCode);
Task<ActorCredits> GetActorMovieCredits(int actorId, string langCode);
}
}

@ -0,0 +1,51 @@
namespace Ombi.Api.TheMovieDb.Models
{
public class ActorCredits
{
public Cast[] cast { get; set; }
public Crew[] crew { get; set; }
public int id { get; set; }
}
public class Cast
{
public string character { get; set; }
public string credit_id { get; set; }
public string poster_path { get; set; }
public int id { get; set; }
public bool video { get; set; }
public int vote_count { get; set; }
public bool adult { get; set; }
public string backdrop_path { get; set; }
public int?[] genre_ids { get; set; }
public string original_language { get; set; }
public string original_title { get; set; }
public float popularity { get; set; }
public string title { get; set; }
public float vote_average { get; set; }
public string overview { get; set; }
public string release_date { get; set; }
}
public class Crew
{
public int id { get; set; }
public string department { get; set; }
public string original_language { get; set; }
public string original_title { get; set; }
public string job { get; set; }
public string overview { get; set; }
public int vote_count { get; set; }
public bool video { get; set; }
public string release_date { get; set; }
public float vote_average { get; set; }
public string title { get; set; }
public float popularity { get; set; }
public int?[] genre_ids { get; set; }
public string backdrop_path { get; set; }
public bool adult { get; set; }
public string poster_path { get; set; }
public string credit_id { get; set; }
}
}

@ -0,0 +1,33 @@
namespace Ombi.Api.TheMovieDb.Models
{
public class ActorResult
{
public float popularity { get; set; }
public int id { get; set; }
public string profile_path { get; set; }
public string name { get; set; }
public Known_For[] known_for { get; set; }
public bool adult { get; set; }
}
public class Known_For
{
public float vote_average { get; set; }
public int vote_count { get; set; }
public int id { get; set; }
public bool video { get; set; }
public string media_type { get; set; }
public string title { get; set; }
public float popularity { get; set; }
public string poster_path { get; set; }
public string original_language { get; set; }
public string original_title { get; set; }
public int[] genre_ids { get; set; }
public string backdrop_path { get; set; }
public bool adult { get; set; }
public string overview { get; set; }
public string release_date { get; set; }
}
}

@ -43,6 +43,28 @@ namespace Ombi.Api.TheMovieDb
return await Api.Request<FindResult>(request);
}
public async Task<TheMovieDbContainer<ActorResult>> SearchByActor(string searchTerm, string langCode)
{
var request = new Request($"search/person", BaseUri, HttpMethod.Get);
request.FullUri = request.FullUri.AddQueryParameter("api_key", ApiToken);
request.FullUri = request.FullUri.AddQueryParameter("query", searchTerm);
request.FullUri = request.FullUri.AddQueryParameter("language", langCode);
var result = await Api.Request<TheMovieDbContainer<ActorResult>>(request);
return result;
}
public async Task<ActorCredits> GetActorMovieCredits(int actorId, string langCode)
{
var request = new Request($"search/person", BaseUri, HttpMethod.Get);
request.FullUri = request.FullUri.AddQueryParameter("api_key", ApiToken);
request.FullUri = request.FullUri.AddQueryParameter("person_id", actorId.ToString());
request.FullUri = request.FullUri.AddQueryParameter("language", langCode);
var result = await Api.Request<ActorCredits>(request);
return result;
}
public async Task<List<TvSearchResult>> SearchTv(string searchTerm)
{
var request = new Request($"search/tv", BaseUri, HttpMethod.Get);

Loading…
Cancel
Save