/Net.TMDb

Client library for accessing the TMDb API in .NET

Primary LanguageC#MIT LicenseMIT

The Movie Database Client for .NET

NuGet Status

Implements asynchronous operations and includes support for portable class libraries.

Available on NuGet Gallery

To install the Hasseware.TheMovieDB package, run the following command in the Package Manager Console

PM> Install-Package Hasseware.TheMovieDB

Usage samples

static async Task Sample(CancellationToken cancellationToken)
{
    using (var client = new ServiceClient("<ApiKey>"))
	{
		for (int i = 1, count = 1000; i <= count; i++)
		{
		    var movies = await client.Movies.GetTopRatedAsync(null, i, cancellationToken);
			count = movies.PageCount; // keep track of the actual page count
		
			foreach (Movie m in movies.Results)
			{
				var movie = await client.Movies.GetAsync(m.Id, null, true, cancellationToken);
		
				var personIds = movie.Credits.Cast.Select(s => s.Id)
					.Union(movie.Credits.Crew.Select(s => s.Id));
		
				foreach (var id in personIds)
				{
					var person = await client.People.GetAsync(id, true, cancellationToken);
		
					foreach (var img in person.Images.Results)
					{
						string filepath = Path.Combine("People", img.FilePath.TrimStart('/'));
						await DownloadImage(img.FilePath, filepath, cancellationToken);
					}
				}
			}
		}
	}
}

static async Task DownloadImage(string filename, string localpath, CancellationToken cancellationToken)
{
    if (!File.Exists(localpath))
    {
        string folder = Path.GetDirectoryName(localpath);
        Directory.CreateDirectory(folder);

        var storage = new StorageClient();
        using (var fileStream = new FileStream(localpath, FileMode.Create, 
			FileAccess.Write, FileShare.None, short.MaxValue, true))
        {
            try { await storage.DownloadAsync(filename, fileStream, cancellationToken); }
            catch (Exception ex) { System.Diagnostics.Trace.TraceError(ex.ToString()); }
        }
    }
}