Giter Site home page Giter Site logo

tvdbsharper's Introduction

TvDbSharper is fully featured modern REST client for the TheTVDB API v4

Last API compatibility check: 23-02-2022

NuGet Build status

How to install

dotnet add package TvDbSharper

The client

There is one client you need to know about:

var client = new TvDbClient();

Authentication

Before you do anything else you need to authenticate yourself.

Then you can use the client like this:

await client.Login("ApiKey", "PIN");

Everything else

This client supports all of the functionality of the REST API and I can't list every single method here.

You can explore that yourself or read the REST API documentation provided by thetvdb.com here https://thetvdb.github.io/v4-api/

You will find equivalent method for every single route there.

tvdbsharper's People

Contributors

hristokolev avatar mokujinjin avatar olsh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tvdbsharper's Issues

System.ArgumentException: Only 'http' and 'https' schemes are allowed.

I can't tell if this is my fault or not. I can't imagine why the URL would have anything except http or https.

2017-07-17T20:36:14.151635931Z 20:36:14| --- Cache HTTP - Got AniDB/TvDB Cross Ref From Cache: 8181 - 550.758
2017-07-17T20:36:14.151925457Z 20:36:14| --- TvDBRateLimiter#32bdb11f-e79a-4c9e-91dd-5655ab0007cf: Time since last request is 1083589 ms, not throttling.
2017-07-17T20:36:14.153316267Z 20:36:14| --- Error in TvDBApiHelper.GetSeriesInfoOnline: System.ArgumentException: Only 'http' and 'https' schemes are allowed.
2017-07-17T20:36:14.153334036Z Parameter name: requestUri
2017-07-17T20:36:14.153342075Z   at System.Net.Http.HttpRequestMessage.InitializeValues (System.Net.Http.HttpMethod method, System.Uri requestUri) [0x00032] in <09d4a140061c48849b6322067e841931>:0 
2017-07-17T20:36:14.153348454Z   at System.Net.Http.HttpRequestMessage..ctor (System.Net.Http.HttpMethod method, System.Uri requestUri) [0x00049] in <09d4a140061c48849b6322067e841931>:0 
2017-07-17T20:36:14.153353892Z   at System.Net.Http.HttpClient.PostAsync (System.Uri requestUri, System.Net.Http.HttpContent content, System.Threading.CancellationToken cancellationToken) [0x00005] in <09d4a140061c48849b6322067e841931>:0 
2017-07-17T20:36:14.153359394Z   at System.Net.Http.HttpClient.PostAsync (System.String requestUri, System.Net.Http.HttpContent content, System.Threading.CancellationToken cancellationToken) [0x00008] in <09d4a140061c48849b6322067e841931>:0 
2017-07-17T20:36:14.15336448Z   at TvDbSharper.JsonClient.JsonClient+<PostJsonAsync>d__13`1[TResponse].MoveNext () [0x0003f] in <f3b46941f51d4f56aff938113cb69e1a>:0 
2017-07-17T20:36:14.153369599Z --- End of stack trace from previous location where exception was thrown ---
2017-07-17T20:36:14.153374209Z   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <4dc8ec68b0964e099af86e50301f5f3c>:0 
2017-07-17T20:36:14.153411996Z   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0003e] in <4dc8ec68b0964e099af86e50301f5f3c>:0 
2017-07-17T20:36:14.153418094Z   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <4dc8ec68b0964e099af86e50301f5f3c>:0 
2017-07-17T20:36:14.15342334Z   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <4dc8ec68b0964e099af86e50301f5f3c>:0 
2017-07-17T20:36:14.153428306Z   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[TResult].GetResult () [0x00000] in <4dc8ec68b0964e099af86e50301f5f3c>:0  
2017-07-17T20:36:14.153433419Z   at TvDbSharper.Clients.Authentication.AuthenticationClient+<AuthenticateAsync>d__10.MoveNext () [0x0009c] in <f3b46941f51d4f56aff938113cb69e1a>:0 
2017-07-17T20:36:14.153438455Z --- End of stack trace from previous location where exception was thrown ---
2017-07-17T20:36:14.153442889Z   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <4dc8ec68b0964e099af86e50301f5f3c>:0 
2017-07-17T20:36:14.153447816Z   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0003e] in <4dc8ec68b0964e099af86e50301f5f3c>:0 
2017-07-17T20:36:14.153452758Z   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <4dc8ec68b0964e099af86e50301f5f3c>:0 
2017-07-17T20:36:14.153485853Z   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <4dc8ec68b0964e099af86e50301f5f3c>:0 
2017-07-17T20:36:14.153493898Z   at System.Runtime.CompilerServices.TaskAwaiter.GetResult () [0x00000] in <4dc8ec68b0964e099af86e50301f5f3c>:0 
2017-07-17T20:36:14.153499094Z   at Shoko.Server.Providers.TvDB.TvDBApiHelper+<_checkAuthorizationAsync>d__5.MoveNext () [0x00093] in <a7ae1973e8af49399181d79028d15a1b>:0 
2017-07-17T20:36:14.153505898Z --- End of stack trace from previous location where exception was thrown ---
2017-07-17T20:36:14.153510454Z   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <4dc8ec68b0964e099af86e50301f5f3c>:0 
2017-07-17T20:36:14.153515275Z   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0003e] in <4dc8ec68b0964e099af86e50301f5f3c>:0 
2017-07-17T20:36:14.153520331Z   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <4dc8ec68b0964e099af86e50301f5f3c>:0 
2017-07-17T20:36:14.153525505Z   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <4dc8ec68b0964e099af86e50301f5f3c>:0 
2017-07-17T20:36:14.153530442Z   at System.Runtime.CompilerServices.TaskAwaiter.GetResult () [0x00000] in <4dc8ec68b0964e099af86e50301f5f3c>:0 
2017-07-17T20:36:14.153535281Z   at Shoko.Server.Providers.TvDB.TvDBApiHelper+<GetSeriesInfoOnlineAsync>d__7.MoveNext () [0x00085] in <a7ae1973e8af49399181d79028d15a1b>:0 

Unable to Fetch Series Data (if show is in fact empty), data.season=null

we've got TvDbSharper as helper module to retrieve information about (Anime-)Series from TVDB.

slim version of the code:

    public static class TvDBApiHelper
    {
        private static readonly ITvDbClient client;
        static TvDBApiHelper()
        {
            client=new TvDbClient();
            client.BaseUrl = "https://api-beta.thetvdb.com";
        }

        await client.Authentication.AuthenticateAsync(Constants.TvDB.apiKey);
        var response = await client.Series.GetAsync(seriesID);
   }

while testing i selected a show without any data by mistake
(https://www.thetvdb.com/series/digimon-adventure)
, causing the following error to be thrown:

Error|ExecutionContext.Run => ExecutionContext.RunInternal => <GetSeriesInfoOnlineAsync>d__7.MoveNext Error in TvDBApiHelper.GetSeriesInfoOnline: Newtonsoft.Json.JsonSerializationException: Error converting value {null} to type 'System.Int32'. Path 'data.season', line 1, position 77. ---> System.InvalidCastException: Null object cannot be converted to a value type.

maybe there's a better way to handle this? (like nullable int or something similar)

'Content-Type' header error

Hi I'm keep getting the fallowing error when I try to login.

The 'Content-Type' header must be modified using the appropriate property or method.
Parameter name: name

Any help is appreciated.

Cheers

LanguagesClient#GetAllAsync throws deserialization error when json records have null values

Hi,

I saw jellyfin/jellyfin#3201 and wanted to see if I could put up a fix for this. Specifically a fix that would ignore any languages that have missing id fields. I'm not sure if these is the "right" fix, but it seems correct to ignore a json record completely if we cannot deseralize it, instead of just failing to deserialize all the records (see below exception thrown).

I didn't see a way to ignore deserializing records without writing a custom json deserializer, so I figured something like below would be ideal (plus modifying the JsonObject properties on LanguageDtos) and making Id property optional.

If this suggest fix is alright, let me know, and I can put up a PR.

public async Task<TvDbResponse<Language[]>> GetAllAsync(CancellationToken cancellationToken)
{
    var request = new ApiRequest("GET", "/languages");
    var response = await this.ApiClient.SendRequestAsync(request, cancellationToken).ConfigureAwait(false);
    TvDbResponse<Language[]> parsedResponse = this.Parser.Parse<TvDbResponse<Language[]>>(response, ErrorMessages.Languages.GetAllAsync);
    if (parsedResponse.Data != null)
    {
        parsedResponse.Data = Array.FindAll(parsedResponse.Data, language => language.Id != null);
    }
    return parsedResponse;
}
[2020-06-03 09:27:41.045 -04:00] [ERR] [97] ProviderManager: "TvdbSeriesImageProvider" failed in GetImageInfos for type "Series"
System.AggregateException: One or more errors occurred. (Error converting value {null} to type 'System.Int32'. Path 'data[180].id', line 1, position 13279.)
 ---> Newtonsoft.Json.JsonSerializationException: Error converting value {null} to type 'System.Int32'. Path 'data[180].id', line 1, position 13279.
 ---> System.InvalidCastException: Null object cannot be converted to a value type.
   at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureType(JsonReader reader, Object value, CultureInfo culture, JsonContract contract, Type targetType)
   --- End of inner exception stack trace ---
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureType(JsonReader reader, Object value, CultureInfo culture, JsonContract contract, Type targetType)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList list, JsonReader reader, JsonArrayContract contract, JsonProperty containerProperty, String id)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
   at TvDbSharper.Clients.LanguagesClient.GetAllAsync(CancellationToken cancellationToken)
   at MediaBrowser.Providers.TV.TheTVDB.TvDbClientManager.TryGetValue[T](String key, String language, Func`1 resultFactory)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at MediaBrowser.Providers.TV.TheTVDB.TvdbSeriesImageProvider.GetImages(Image[] images, String preferredLanguage)
   at MediaBrowser.Providers.TV.TheTVDB.TvdbSeriesImageProvider.GetImages(BaseItem item, CancellationToken cancellationToken)
   at MediaBrowser.Providers.Manager.ProviderManager.GetImages(BaseItem item, CancellationToken cancellationToken, IRemoteImageProvider provider, List`1 preferredLanguages, Nullable`1 type)

SearchSeriesByNameAsync with a Series Name with Ampersand

What is the correct way to search for a series that has an "&" / ampersand in the title?

Example:
When I do:
var response = clientTVDB.Search.SearchSeriesByNameAsync("Austin & Ally").Result

I get an inner exception of: "Requires only one of name, imdbId, zap2itId params"

Thanks!

get the episodes of a show for a Specific Season

Hi,

Instead of get all the episoed for a show and then test the season number, could you give me an example of the code with TvDbSharper to have the "?airedSeason=" of the API (/series/{id}/episodes/query).

Thanks

Nullpointer on Search

This was from one of our users. I'm not really sure what could've happened. I know the search string was "Houkago no Pleiades". Regardless, it should give a more meaningful error to catch on.

[2018-03-30 13:39:12:001] Error|ExecutionContext.Run => ExecutionContext.RunInternal => <GetSeriesInfoOnlineAsync>d__6.MoveNext Error in TvDBApiHelper.GetSeriesInfoOnline: System.NullReferenceException: Object reference not set to an instance of an object. at TvDbSharper.Infrastructure.ApiClient.<GetResponseAsync>d__12.MoveNext() in C:\Users\mpiva\Downloads\TvDbSharper-master\TvDbSharper-master\src\TvDbSharper\Infrastructure\ApiClient.cs:line 138 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult() at TvDbSharper.Infrastructure.ApiClient.<SendRequestAsync>d__9.MoveNext() in C:\Users\mpiva\Downloads\TvDbSharper-master\TvDbSharper-master\src\TvDbSharper\Infrastructure\ApiClient.cs:line 76 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult() at TvDbSharper.Clients.SeriesClient.<GetAsync>d__13.MoveNext() in C:\Users\mpiva\Downloads\TvDbSharper-master\TvDbSharper-master\src\TvDbSharper\Clients\SeriesClient.cs:line 48 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)

ImageType can be bull

I think that ImageType in TvDBClient.Generated.cs should be nullable on lines 1203 and 1272, the base and extended EpisodeDTO
Screenshot 2021-12-09 192358
.

Error if "movie.data.runtime" is NULL

Looks like the case "movie.data.runtime = NULL" isn't handled:

Newtonsoft.Json.JsonSerializationException: Error converting value {null} to type 'System.Int32'. Path 'data.runtime', line 1, position 308.

To reproduce use TVDb Id 198054.

How to know if Authenticate request was successful - client.Authentication.Token always returns null

Hi,

Just checking how to know the await client.Authentication.AuthenticateAsync() call is successful or not.

I presumed a call to client.Authentication.Token would return the token if successfull or null/error if not. I am always getting getting null.

However, when I tried to just test searching a Series after the AuthenticateAsync, I do get valid data back, so presuming the Authentication must have been successful.

So, this is the test code that I do get data back:

`
await client.Authentication.AuthenticateAsync();

var token = client.Authentication.Token; <----- returns null

var response = await client.Series.GetAsync(78804);
Debug.WriteLine(response.Data.SeriesName); // <-- returns Doctor Who (2005)
Debug.WriteLine(response.Data.Network); // <-- returns BBC One
Debug.WriteLine(response.Data.ImdbId); // <-- returns tt0436992
`

Just trying to put some error trapping smarts into my program.
Rob

[Request] SLUG support in the SearchSeriesResult/Dto

Hi.

Is it possible to update the Dto for a Show/Series?

I can use the Slug for better support of Banners/Poster URL´s outside the TvDbSharper scope.

As an example, some German Show´s are not "Slugged" right...

"Lindenstraße" is Slugged to "linden-street".

So then follows, a Url to "Images" needs to be determend beforehand and with the Slug it will be esier to handle.

Thanks in advance.

Search result missing Image field

On some series searches, the json returned has an "image" field, in addition to the banner, fanart and poster fields. The field isn't part of the deserialized json class. When searching for "Selfie", the first data item looks like this:

{
"aliases": [],
"banner": null,
"firstAired": "2014-8-19",
"id": 279529,
"image": "/banners/posters/279529-2.jpg",
"network": "ABC (US)",
"overview": "Eliza Dooley has 263,000 followers who hang on to her every post, tweet and selfie. But one lonely day she has a revelation: being friended is not the same as having actual friends. She asks marketing guru Henry to 'rebrand' her self-obsessed reputation and teach her how to connect.",
"poster": null,
"seriesName": "Selfie",
"slug": "selfie",
"status": "Ended"
}

JsonSerializationException when calling TvDbClient.SeriesExtended() and data.averageRuntime is null

For some TV series, a JsonSerializationException occurs when calling TvDbClient.SeriesExtended() because the averageRuntime is null.

For example, this request:
https://api4.thetvdb.com/v4/series/402602/extended

...returns a response including the following:

{
        "isOrderRandomized": false,
        "lastUpdated": "2022-11-11 07:43:55",
        "averageRuntime": null,
}

It seems to me that TvDbSharper.SeriesExtendedRecordDto.AverageRuntime needs to be of type int? rather than int.

I thought about submitting a pull request (which I have never done before). However, it appears that this class is generated code...so, applying a manual fix seems not to be the right thing to do. I am guessing that the class needs be regenerated, in some way.

I am guessing that this code is generated from the the TVDB API's JSON schema, like here:
https://thetvdb.github.io/v4-api/#/Series/getSeriesExtended

I don't know much about JSON schema...the schema indicates that averageRuntime is an int. I don't know how we are supposed to know that this may be nullable.

Anyway, I hope it is useful that I have raised this issue because the issue results in the following exception for my code:

Newtonsoft.Json.JsonSerializationException
  HResult=0x80131500
  Message=Error converting value {null} to type 'System.Int32'. Path 'data.averageRuntime', line 1, position 617.
  Source=Newtonsoft.Json
  StackTrace:
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureType(JsonReader reader, Object value, CultureInfo culture, JsonContract contract, Type targetType)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
   at TvDbSharper.TvDbClient.Parse[T](Int32 statusCode, String responseJson)
   at TvDbSharper.TvDbClient.<Get>d__12`1.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at Picks03a.Database.Repository.TheTvDbReferenceRepository.<GetTvSeriesAsync>d__7.MoveNext() in C:\gitrepos\picks03c-webapi\src\Picks03a.Database\Repository\TheTvDbReferenceRepository.cs:line 85

Null error in PeopleExtended

I get this error for Gender when it's not entered it returns null instead of an integer.
Error converting value {null} to type 'System.Int32'. Path 'data.gender', line 1, position 264.

Need some help.

Hi m8,

I finally got all working after I reset the computer.

I like to ask you if you could give me a hint on how to get the images as I have try a lot but I'm just not able to get images. I struggle mostly with the query part as I could not find any information on the parameters.

Any hint is appreciated.

Passing a title with a semicolon to Search by Name results in Method Not Allowed

The example I found was Chaos;Head.
With char.ToLower(), I could also see it handling some languages (German) poorly, as they have a non-binary case for some letters.

I would recommend using UrlEncode on the search parameter. I would recommend keeping case instead of using ToLower (just in case), unless TvDB has a rule or poor coding for it.

GenerateDto and ManualTest no longer 100% compatible with current V4 API

First, your TVDBApi V4 library is by far the cleanest and easiest to use; other OpenAPI to C# generators make a real mess out of the generated code.

As of 20 July 2023 using Visual Studio 2023 (free version) and dotnet6, GenerateDto and ManualTest are no longer compatible with the current swagger 4.7.5 documentation. In particular

(a) in CodeBuilder.cs MethodNameMap I added the following items (not sure if these are correct or not, but got it to run)
{ "getAllEpisodes", "Episodes" },
{ "getAllPeople", "People" },
{ "getListBySlug", "List" },
{ "getMovieBaseBySlug", "Movie" },
{ "getSearchResultsByRemoteId", "SearchRemote" },
{ "getSeriesBaseBySlug", "Series" },
{ "getSeriesNextAired", "SeriesNextAired" },
{ "getUserInfo", "UserInfo" },
{ "getUserInfoById", "UserInfo" },

(b) in CodeBuilder.cs comment out the following items in Dictionary (no longer needed because they're correctly handled by the yml I think)
EpisodeExtendedRecordDto
MovieExtendedRecordDto
PeopleExtendedRecordDto
SeriesExtendedRecordDto

(c) the UserInfo schema is not being generated correctly for the "/user" and "/user/{id}" API calls. The problem can be seen at line 70 of Program.cs in GenerateDto if you set a breakpoint when path == "/user" then returnType is left set to "unknown".

(d) the generated TvDbClientGenerated.cs had to be modified as follows:
changed "boolean" to "bool" in a few places (they are obvious, it won't build)

(e) comment out the following tests which won't run in ManualTests Program.cs
Test("ListExtended(6007)", await client.ListExtended(6007));
Test("Search(Query = stargate)", await client.Search(new SearchOptionalParams { Query = "stargate" }));
Test("SeasonTranslation(530667, 'eng')", await client.SeasonTranslation(530667, "eng"));
... obviously there were no tests for /user and any other new API's which would not have run correctly.

None of this is holding up my work for what I need, I just thought that you may find my 6 hours of debugging helpful if/when you next open up the project.

Again, thanks for a tremendously helpful and well written project!

API v3

TVDB just pushed out v3 of their api and a lot of people are having issues with it. I don't know whether TVDBsharper actually needs to change anything in order to continue functionality, but I currently can't log in with my API key. It's possible this may be a glitch on TVDB's side, but it would probably be best to make sure TVDBSharper was fully compatible with v3 anyway.

"translations" is missing using "/movies/{id}/extended"

... or maybe it's missing, because in the API documentation it's not listed under "200 - result" schema, but if you execute the swagger it's in the result (see https://pastebin.com/WP5tjUcA).

So I'm not shure if this is an issue in the documentation or in the result. But that would save an additional API call, since you wouldn't have to call up the translations (/movies/{id}/translations/{language}).

SearchSeriesResult doesn't have a Language tag?

This may be on the fault of the API. I'll admit I haven't looked. The xml api had Language tags for search results. SearchSeriesResult doesn't have it. Is it assumed "en"? The are situations where you get not English results due to foreign releases. Disney is plagued with that, Studio Ghibli anime (Spirited Away, Castle in the Sky, etc) as well.

Error converting value {null} to type 'System.Int32'

Hi

looks like "parentStudio" can be "null" and a converting to an integer fails:

"studios": [ { "id": 1, "name": "20th Century Fox", "parentStudio": null }

I've got this error with the movie Avatar (TVDb ID 165). Here is the full query result if helpful:

{ "status": "success", "data": { "id": 165, "name": "Avatar", "slug": "avatar", "image": "https://artworks.thetvdb.com/banners/movies/165/posters/2171506.jpg", "nameTranslations": [ "jpn", "zho", "rus", "deu", "kor", "heb", "eng", "fra", "por", "pt", "spa" ], "overviewTranslations": [ "jpn", "zho", "rus", "deu", "kor", "heb", "eng", "fra", "por", "pt", "spa", "spa" ], "aliases": [], "score": 2790, "runtime": 162, "status": { "id": 5, "name": "Released", "recordType": "movie", "keepUpdated": true }, "lastUpdated": "2021-08-24 07:16:35", "trailers": [ { "id": 35721, "name": "Official Trailer", "url": "https://www.youtube.com/watch?v=5PSNL1qE6VY", "language": "eng" }, { "id": 35722, "name": "Bande-annonce", "url": "https://www.youtube.com/watch?v=60tCdBxn3E0", "language": "fra" } ], "genres": [ { "id": 19, "name": "Action", "slug": "action" }, { "id": 18, "name": "Adventure", "slug": "adventure" }, { "id": 10, "name": "Fantasy", "slug": "fantasy" }, { "id": 2, "name": "Science Fiction", "slug": "science-fiction" } ], "releases": [ { "country": "global", "date": "2009-12-16", "detail": null }, { "country": "usa", "date": "2009-12-16", "detail": null }, { "country": "fra", "date": "2009-12-16", "detail": null }, { "country": "gbr", "date": "2009-12-10", "detail": null }, { "country": "ita", "date": "2010-01-15", "detail": null }, { "country": "aus", "date": "2009-12-17", "detail": null }, { "country": "bra", "date": "2009-12-18", "detail": null }, { "country": "deu", "date": "2009-12-17", "detail": null }, { "country": "esp", "date": "2009-12-18", "detail": null } ], "artworks": [ { "id": 2539585, "image": "/banners/movies/165/backgrounds/165.jpg", "thumbnail": "/banners/movies/165/backgrounds/165_t.jpg", "language": null, "type": 15, "score": 1 }, { "id": 22171506, "image": "/banners/movies/165/posters/2171506.jpg", "thumbnail": "/banners/movies/165/posters/2171506_t.jpg", "language": null, "type": 14, "score": 1 }, { "id": 25869817, "image": "/banners/movies/165/posters/25869817.jpg", "thumbnail": "/banners/movies/165/posters/25869817_t.jpg", "language": null, "type": 14, "score": 1 }, { "id": 62281462, "image": "/banners/person/327422/5f2d6eceec036.jpg", "thumbnail": "/banners/person/327422/5f2d6eceec036_t.jpg", "language": null, "type": 13, "score": 0 }, { "id": 62281465, "image": "/banners/person/253588/5f2d713d8cbdf.jpg", "thumbnail": "/banners/person/253588/5f2d713d8cbdf_t.jpg", "language": null, "type": 13, "score": 0 }, { "id": 62281467, "image": "/banners/person/366817/5f2d71db11464.jpg", "thumbnail": "/banners/person/366817/5f2d71db11464_t.jpg", "language": null, "type": 13, "score": 0 }, { "id": 62281468, "image": "/banners/person/311286/5f2d7242a9243.jpg", "thumbnail": "/banners/person/311286/5f2d7242a9243_t.jpg", "language": null, "type": 13, "score": 0 }, { "id": 62281469, "image": "/banners/person/333996/5f2d72e986e4c.jpg", "thumbnail": "/banners/person/333996/5f2d72e986e4c_t.jpg", "language": null, "type": 13, "score": 0 }, { "id": 62281470, "image": "/banners/person/325080/5f2d7394dc6f3.jpg", "thumbnail": "/banners/person/325080/5f2d7394dc6f3_t.jpg", "language": null, "type": 13, "score": 0 }, { "id": 62281471, "image": "/banners/person/346554/5f2d743f74753.jpg", "thumbnail": "/banners/person/346554/5f2d743f74753_t.jpg", "language": null, "type": 13, "score": 0 }, { "id": 62281472, "image": "/banners/person/274207/5f2d74899b542.jpg", "thumbnail": "/banners/person/274207/5f2d74899b542_t.jpg", "language": null, "type": 13, "score": 0 }, { "id": 62281473, "image": "/banners/person/386282/5f2d74a3d2bcc.jpg", "thumbnail": "/banners/person/386282/5f2d74a3d2bcc_t.jpg", "language": null, "type": 13, "score": 0 }, { "id": 62777579, "image": "/banners/v4/movie/165/clearlogo/61249c84eb408.png", "thumbnail": "/banners/v4/movie/165/clearlogo/61249c84eb408_t.png", "language": "fra", "type": 25, "score": 0 }, { "id": 62777581, "image": "/banners/v4/movie/165/clearlogo/61249c87cb251.png", "thumbnail": "/banners/v4/movie/165/clearlogo/61249c87cb251_t.png", "language": "eng", "type": 25, "score": 0 }, { "id": 62777583, "image": "/banners/v4/movie/165/clearlogo/61249c8a7f6cc.png", "thumbnail": "/banners/v4/movie/165/clearlogo/61249c8a7f6cc_t.png", "language": "eng", "type": 25, "score": 0 }, { "id": 62777584, "image": "/banners/v4/movie/165/clearlogo/61249c8d802ac.png", "thumbnail": "/banners/v4/movie/165/clearlogo/61249c8d802ac_t.png", "language": "eng", "type": 25, "score": 0 }, { "id": 62777585, "image": "/banners/v4/movie/165/clearlogo/61249c906f4d3.png", "thumbnail": "/banners/v4/movie/165/clearlogo/61249c906f4d3_t.png", "language": "deu", "type": 25, "score": 0 }, { "id": 62777586, "image": "/banners/v4/movie/165/clearlogo/61249c928a097.png", "thumbnail": "/banners/v4/movie/165/clearlogo/61249c928a097_t.png", "language": null, "type": 25, "score": 0 }, { "id": 62777587, "image": "/banners/v4/movie/165/clearlogo/61249c95ba061.png", "thumbnail": "/banners/v4/movie/165/clearlogo/61249c95ba061_t.png", "language": "deu", "type": 25, "score": 0 }, { "id": 62777588, "image": "/banners/v4/movie/165/clearlogo/61249c989b66d.png", "thumbnail": "/banners/v4/movie/165/clearlogo/61249c989b66d_t.png", "language": "rus", "type": 25, "score": 0 }, { "id": 62777589, "image": "/banners/v4/movie/165/clearlogo/61249c9b85b5f.png", "thumbnail": "/banners/v4/movie/165/clearlogo/61249c9b85b5f_t.png", "language": "eng", "type": 25, "score": 0 }, { "id": 62777590, "image": "/banners/v4/movie/165/clearlogo/61249c9dbb822.png", "thumbnail": "/banners/v4/movie/165/clearlogo/61249c9dbb822_t.png", "language": "eng", "type": 25, "score": 0 }, { "id": 62777591, "image": "/banners/v4/movie/165/clearlogo/61249ca03a194.png", "thumbnail": "/banners/v4/movie/165/clearlogo/61249ca03a194_t.png", "language": null, "type": 25, "score": 0 }, { "id": 62777592, "image": "/banners/v4/movie/165/clearart/61249caa0924f.png", "thumbnail": "/banners/v4/movie/165/clearart/61249caa0924f_t.png", "language": "eng", "type": 24, "score": 0 }, { "id": 62777593, "image": "/banners/v4/movie/165/clearart/61249cacec9d8.png", "thumbnail": "/banners/v4/movie/165/clearart/61249cacec9d8_t.png", "language": "eng", "type": 24, "score": 0 }, { "id": 62777594, "image": "/banners/v4/movie/165/clearart/61249cafe15d9.png", "thumbnail": "/banners/v4/movie/165/clearart/61249cafe15d9_t.png", "language": "eng", "type": 24, "score": 0 }, { "id": 62777595, "image": "/banners/v4/movie/165/clearart/61249cb3145a7.png", "thumbnail": "/banners/v4/movie/165/clearart/61249cb3145a7_t.png", "language": "eng", "type": 24, "score": 0 }, { "id": 62777596, "image": "/banners/v4/movie/165/clearart/61249cb641a84.png", "thumbnail": "/banners/v4/movie/165/clearart/61249cb641a84_t.png", "language": "deu", "type": 24, "score": 0 }, { "id": 62777597, "image": "/banners/v4/movie/165/clearart/61249cb91e5be.png", "thumbnail": "/banners/v4/movie/165/clearart/61249cb91e5be_t.png", "language": "eng", "type": 24, "score": 0 }, { "id": 62777598, "image": "/banners/v4/movie/165/clearart/61249cbd41cd8.png", "thumbnail": "/banners/v4/movie/165/clearart/61249cbd41cd8_t.png", "language": "eng", "type": 24, "score": 0 }, { "id": 62777599, "image": "/banners/v4/movie/165/clearart/61249cc05bfb8.png", "thumbnail": "/banners/v4/movie/165/clearart/61249cc05bfb8_t.png", "language": "eng", "type": 24, "score": 0 }, { "id": 62777600, "image": "/banners/v4/movie/165/clearart/61249cc3a67cd.png", "thumbnail": "/banners/v4/movie/165/clearart/61249cc3a67cd_t.png", "language": "deu", "type": 24, "score": 0 }, { "id": 62777601, "image": "/banners/v4/movie/165/clearart/61249cc7351f6.png", "thumbnail": "/banners/v4/movie/165/clearart/61249cc7351f6_t.png", "language": "rus", "type": 24, "score": 0 }, { "id": 62777602, "image": "/banners/v4/movie/165/clearart/61249cca5adcf.png", "thumbnail": "/banners/v4/movie/165/clearart/61249cca5adcf_t.png", "language": "deu", "type": 24, "score": 0 }, { "id": 62777603, "image": "/banners/v4/movie/165/clearart/61249ccdd1fbc.png", "thumbnail": "/banners/v4/movie/165/clearart/61249ccdd1fbc_t.png", "language": "rus", "type": 24, "score": 0 }, { "id": 62777604, "image": "/banners/v4/movie/165/clearart/61249cd0c276c.png", "thumbnail": "/banners/v4/movie/165/clearart/61249cd0c276c_t.png", "language": null, "type": 24, "score": 0 }, { "id": 62777605, "image": "/banners/v4/movie/165/clearart/61249cd390594.png", "thumbnail": "/banners/v4/movie/165/clearart/61249cd390594_t.png", "language": "deu", "type": 24, "score": 0 } ], "remoteIds": [ { "id": "avatar.oficial/", "type": 5, "sourceName": "Facebook" }, { "id": "tt0499549", "type": 2, "sourceName": "IMDB" }, { "id": "Avatar/", "type": 7, "sourceName": "Reddit" }, { "id": "http://www.avatarspirit.net/", "type": 8, "sourceName": "Fan Site" }, { "id": "19995", "type": 10, "sourceName": "TheMovieDB.com" } ], "characters": [ { "id": 12141896, "name": "Jake Sully", "peopleId": 366817, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": "/banners/person/366817/5f2d71db11464.jpg", "sort": 1, "isFeatured": true, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Sam Worthington", "tagOptions": null, "personImgURL": "/banners/person/366817/primary.jpg" }, { "id": 12141897, "name": "Princess Neytiri", "peopleId": 327422, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": "/banners/person/327422/5f2d6eceec036.jpg", "sort": 2, "isFeatured": true, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Zoe Saldana", "tagOptions": null, "personImgURL": "/banners/person/327422/primary.jpg" }, { "id": 12141898, "name": "Dr. Grace Augustine", "peopleId": 253588, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": "/banners/person/253588/5f2d713d8cbdf.jpg", "sort": 4, "isFeatured": true, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Sigourney Weaver", "tagOptions": null, "personImgURL": "/banners/person/253588/5eb5887bde948.jpg" }, { "id": 12141899, "name": "Col. Quaritch", "peopleId": 333996, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": "/banners/person/333996/5f2d72e986e4c.jpg", "sort": 3, "isFeatured": true, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Stephen Lang", "tagOptions": null, "personImgURL": "/banners/person/333996/primary.jpg" }, { "id": 12141900, "name": "Trudy Chacon", "peopleId": 311286, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": "/banners/person/311286/5f2d7242a9243.jpg", "sort": 7, "isFeatured": true, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Michelle Rodriguez", "tagOptions": null, "personImgURL": "/banners/person/311286/primary.jpg" }, { "id": 12141901, "name": "Selfridge", "peopleId": 325080, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": "/banners/person/325080/5f2d7394dc6f3.jpg", "sort": 8, "isFeatured": true, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Giovanni Ribisi", "tagOptions": null, "personImgURL": "/banners/person/325080/primary.jpg" }, { "id": 12141902, "name": "Norm Spellman", "peopleId": 346554, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": "/banners/person/346554/5f2d743f74753.jpg", "sort": 9, "isFeatured": true, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Joel David Moore", "tagOptions": null, "personImgURL": null }, { "id": 12141903, "name": "Eytukan", "peopleId": 386282, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": "/banners/person/386282/5f2d74a3d2bcc.jpg", "sort": 6, "isFeatured": true, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Wes Studi", "tagOptions": null, "personImgURL": "/banners/person/386282/primary.jpg" }, { "id": 12141904, "name": "Moat", "peopleId": 274207, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": "/banners/person/274207/5f2d74899b542.jpg", "sort": 5, "isFeatured": true, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "CCH Pounder", "tagOptions": null, "personImgURL": "/banners/v4/actor/274207/photo/609a9e61bec0b.jpg" }, { "id": 12141905, "name": "Tsu'Tey", "peopleId": 280976, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": null, "sort": 13, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Laz Alonso", "tagOptions": null, "personImgURL": "/banners/person/280976/6028f68143706.jpg" }, { "id": 12141906, "name": "Dr. Max Patel", "peopleId": 425669, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": null, "sort": 24, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Dileep Rao", "tagOptions": null, "personImgURL": null }, { "id": 12141907, "name": "Lyle Wainfleet", "peopleId": 346652, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": null, "sort": 20, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Matt Gerald", "tagOptions": null, "personImgURL": null }, { "id": 12141908, "name": "Private Fike", "peopleId": 267072, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": null, "sort": 17, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Sean Anthony Moran", "tagOptions": null, "personImgURL": null }, { "id": 12141909, "name": "Cryo Vault Med Tech", "peopleId": 383304, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": null, "sort": 10, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Jason Whyte", "tagOptions": null, "personImgURL": null }, { "id": 12141910, "name": "Venture Star Crew Chief", "peopleId": 276071, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": null, "sort": 11, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Scott Lawrence", "tagOptions": null, "personImgURL": null }, { "id": 12141911, "name": "Shuttle Co-Pilot", "peopleId": 330173, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": null, "sort": 16, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Sean Patrick Murphy", "tagOptions": null, "personImgURL": null }, { "id": 12141912, "name": "Dragon Gunship Pilot", "peopleId": 345410, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": null, "sort": 30, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Kelson Henderson", "tagOptions": null, "personImgURL": null }, { "id": 12141913, "name": "Dragon Gunship Gunner", "peopleId": 665479, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": null, "sort": 27, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "David Van Horn", "tagOptions": null, "personImgURL": null }, { "id": 12141914, "name": "Dragon Gunship Navigator", "peopleId": 412351, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": null, "sort": 23, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Jacob Tomuri", "tagOptions": null, "personImgURL": null }, { "id": 12141915, "name": "Suit #1", "peopleId": 356045, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": null, "sort": 29, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Michael Blain-Rozgay", "tagOptions": null, "personImgURL": null }, { "id": 12141916, "name": "Suit #2", "peopleId": 329690, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": null, "sort": 28, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Jon Curry", "tagOptions": null, "personImgURL": null }, { "id": 12141917, "name": "Ambient Room Tech / Troupe", "peopleId": 292792, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": null, "sort": 22, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Julene Renee", "tagOptions": null, "personImgURL": null }, { "id": 12141918, "name": "Horse Clan Leader", "peopleId": 296049, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": null, "sort": 12, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Peter Mensah", "tagOptions": null, "personImgURL": null }, { "id": 12141919, "name": "Troupe", "peopleId": 457117, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": null, "sort": 21, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Lisa Roumain", "tagOptions": null, "personImgURL": null }, { "id": 12141920, "name": "Troupe", "peopleId": 279218, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": null, "sort": 25, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Debra Wilson", "tagOptions": null, "personImgURL": null }, { "id": 12141921, "name": "Troupe", "peopleId": 449224, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": null, "sort": 18, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Sara Wilson", "tagOptions": null, "personImgURL": null }, { "id": 12141922, "name": "Op Center Staff", "peopleId": 345649, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": null, "sort": 14, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Matthew Chamberlain", "tagOptions": null, "personImgURL": null }, { "id": 12141923, "name": "Op Center Staff", "peopleId": 522827, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": null, "sort": 19, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Paul Yates", "tagOptions": null, "personImgURL": null }, { "id": 12141924, "name": "Op Center Staff", "peopleId": 347769, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": null, "sort": 15, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "James Gaylyn", "tagOptions": null, "personImgURL": null }, { "id": 12141925, "name": "Samson Pilot", "peopleId": 446938, "seriesId": null, "movieId": 165, "episodeId": null, "type": 3, "image": null, "sort": 26, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Actor", "personName": "Dean Knowsley", "tagOptions": null, "personImgURL": null }, { "id": 12141929, "name": null, "peopleId": 359517, "seriesId": null, "movieId": 165, "episodeId": null, "type": 1, "image": null, "sort": 4, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Director", "personName": "James Cameron", "tagOptions": null, "personImgURL": "/banners/person/359517/5eff03b688adc.jpg" }, { "id": 12141930, "name": null, "peopleId": 359517, "seriesId": null, "movieId": 165, "episodeId": null, "type": 2, "image": null, "sort": 4, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Writer", "personName": "James Cameron", "tagOptions": null, "personImgURL": "/banners/person/359517/5eff03b688adc.jpg" }, { "id": 12141931, "name": null, "peopleId": 359517, "seriesId": null, "movieId": 165, "episodeId": null, "type": 7, "image": null, "sort": 4, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Producer", "personName": "James Cameron", "tagOptions": null, "personImgURL": "/banners/person/359517/5eff03b688adc.jpg" }, { "id": 12141932, "name": null, "peopleId": 303659, "seriesId": null, "movieId": 165, "episodeId": null, "type": 7, "image": null, "sort": 9, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Producer", "personName": "Laeta Kalogridis", "tagOptions": null, "personImgURL": null }, { "id": 12141933, "name": null, "peopleId": 388486, "seriesId": null, "movieId": 165, "episodeId": null, "type": 7, "image": null, "sort": 4, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Producer", "personName": "Colin Wilson", "tagOptions": null, "personImgURL": null }, { "id": 12141934, "name": null, "peopleId": 319003, "seriesId": null, "movieId": 165, "episodeId": null, "type": 7, "image": null, "sort": 4, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Producer", "personName": "Chris Walker", "tagOptions": null, "personImgURL": null }, { "id": 12141935, "name": null, "peopleId": 388486, "seriesId": null, "movieId": 165, "episodeId": null, "type": 7, "image": null, "sort": 4, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Producer", "personName": "Colin Wilson", "tagOptions": null, "personImgURL": null }, { "id": 12141937, "name": null, "peopleId": 255948, "seriesId": null, "movieId": 165, "episodeId": null, "type": 7, "image": null, "sort": 4, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Producer", "personName": "Dan Horton", "tagOptions": null, "personImgURL": null }, { "id": 12141938, "name": null, "peopleId": 599526, "seriesId": null, "movieId": 165, "episodeId": null, "type": 7, "image": null, "sort": 9, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Producer", "personName": "Holly Dorff", "tagOptions": null, "personImgURL": null }, { "id": 12141939, "name": null, "peopleId": 541025, "seriesId": null, "movieId": 165, "episodeId": null, "type": 7, "image": null, "sort": 4, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Producer", "personName": "Yvette Reid", "tagOptions": null, "personImgURL": null }, { "id": 12141940, "name": null, "peopleId": 397256, "seriesId": null, "movieId": 165, "episodeId": null, "type": 7, "image": null, "sort": 4, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Producer", "personName": "Jamie Landau", "tagOptions": null, "personImgURL": null }, { "id": 12141941, "name": null, "peopleId": 419058, "seriesId": null, "movieId": 165, "episodeId": null, "type": 7, "image": null, "sort": 4, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Producer", "personName": "Tim Patterson", "tagOptions": null, "personImgURL": null }, { "id": 12141942, "name": null, "peopleId": 403843, "seriesId": null, "movieId": 165, "episodeId": null, "type": 7, "image": null, "sort": 4, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Producer", "personName": "Andrew Cochrane", "tagOptions": null, "personImgURL": null }, { "id": 12141943, "name": null, "peopleId": 323851, "seriesId": null, "movieId": 165, "episodeId": null, "type": 7, "image": null, "sort": 4, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Producer", "personName": "Jamie Robinson", "tagOptions": null, "personImgURL": null }, { "id": 12141944, "name": null, "peopleId": 308765, "seriesId": null, "movieId": 165, "episodeId": null, "type": 7, "image": null, "sort": 4, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Producer", "personName": "Michelle Turner", "tagOptions": null, "personImgURL": null }, { "id": 12141946, "name": null, "peopleId": 375970, "seriesId": null, "movieId": 165, "episodeId": null, "type": 7, "image": null, "sort": 4, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Producer", "personName": "Tom Greene", "tagOptions": null, "personImgURL": null }, { "id": 12141947, "name": null, "peopleId": 604862, "seriesId": null, "movieId": 165, "episodeId": null, "type": 7, "image": null, "sort": 4, "isFeatured": false, "url": "", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "peopleType": "Producer", "personName": "Hannah Clarke", "tagOptions": null, "personImgURL": null } ], "budget": "237000000.00", "boxOffice": "2790000000.00", "originalCountry": "usa", "originalLanguage": "eng", "audioLanguages": null, "subtitleLanguages": null, "studios": [ { "id": 1, "name": "20th Century Fox", "parentStudio": null } ], "awards": [ { "id": 16186, "year": "2010", "details": null, "isWinner": false, "category": "Best Picture", "name": "Academy Awards", "series": null, "movie": null, "episode": null, "character": null }, { "id": 16187, "year": "2010", "details": null, "isWinner": false, "category": "Best Fight", "name": "MTV Movie & TV Awards", "series": null, "movie": null, "episode": null, "character": null }, { "id": 16188, "year": "2010", "details": null, "isWinner": true, "category": "Best Director – Motion Picture", "name": "Golden Globe Awards", "series": null, "movie": null, "episode": null, "character": null }, { "id": 16189, "year": "2010", "details": null, "isWinner": false, "category": "Best Original Screenplay", "name": "Writers Guild of America Awards", "series": null, "movie": null, "episode": null, "character": null }, { "id": 16190, "year": "2010", "details": null, "isWinner": false, "category": "Best Director", "name": "Critics' Choice Awards", "series": null, "movie": null, "episode": null, "character": null }, { "id": 16191, "year": "2010", "details": null, "isWinner": false, "category": "Best Picture", "name": "Critics' Choice Awards", "series": null, "movie": null, "episode": null, "character": null }, { "id": 16192, "year": "2010", "details": null, "isWinner": true, "category": "Best Action Movie", "name": "Critics' Choice Awards", "series": null, "movie": null, "episode": null, "character": null }, { "id": 16193, "year": "2010", "details": null, "isWinner": true, "category": "Best Editing", "name": "Critics' Choice Awards", "series": null, "movie": null, "episode": null, "character": null }, { "id": 16194, "year": "2010", "details": null, "isWinner": true, "category": "Best Cinematography", "name": "Critics' Choice Awards", "series": null, "movie": null, "episode": null, "character": null }, { "id": 16195, "year": "2010", "details": null, "isWinner": false, "category": "Best Director", "name": "BAFTA Awards", "series": null, "movie": null, "episode": null, "character": null }, { "id": 16196, "year": "2010", "details": null, "isWinner": false, "category": "Best Film", "name": "BAFTA Awards", "series": null, "movie": null, "episode": null, "character": null }, { "id": 16197, "year": "2010", "details": null, "isWinner": false, "category": "Best Kiss", "name": "MTV Movie & TV Awards", "series": null, "movie": null, "episode": null, "character": null }, { "id": 16200, "year": "2010", "details": null, "isWinner": false, "category": "Directing", "name": "Academy Awards", "series": null, "movie": null, "episode": null, "character": null }, { "id": 16201, "year": "2010", "details": null, "isWinner": true, "category": "Cinematography", "name": "Academy Awards", "series": null, "movie": null, "episode": null, "character": null }, { "id": 16202, "year": "2010", "details": null, "isWinner": false, "category": "Film Editing", "name": "Academy Awards", "series": null, "movie": null, "episode": null, "character": null }, { "id": 16203, "year": "2010", "details": null, "isWinner": false, "category": "Music (Original Score)", "name": "Academy Awards", "series": null, "movie": null, "episode": null, "character": null }, { "id": 16204, "year": "2010", "details": null, "isWinner": false, "category": "Sound Editing", "name": "Academy Awards", "series": null, "movie": null, "episode": null, "character": null }, { "id": 16205, "year": "2010", "details": null, "isWinner": false, "category": "Sound Mixing", "name": "Academy Awards", "series": null, "movie": null, "episode": null, "character": null }, { "id": 16206, "year": "2010", "details": null, "isWinner": true, "category": "Visual Effects", "name": "Academy Awards", "series": null, "movie": null, "episode": null, "character": null }, { "id": 16207, "year": "2010", "details": null, "isWinner": true, "category": "Best Motion Picture – Drama", "name": "Golden Globe Awards", "series": null, "movie": null, "episode": null, "character": null }, { "id": 16208, "year": "2010", "details": null, "isWinner": false, "category": "Best Original Score – Motion Picture", "name": "Golden Globe Awards", "series": null, "movie": null, "episode": null, "character": null }, { "id": 16209, "year": "2010", "details": null, "isWinner": false, "category": "Best Original Song – Motion Picture", "name": "Golden Globe Awards", "series": null, "movie": null, "episode": null, "character": null }, { "id": 16210, "year": "2010", "details": null, "isWinner": false, "category": "Best Movie ", "name": "MTV Movie & TV Awards", "series": null, "movie": null, "episode": null, "character": null }, { "id": 16211, "year": "2010", "details": null, "isWinner": false, "category": "Outstanding Producer — Theatrical Motion Pictures", "name": "Producers Guild of America Awards", "series": null, "movie": null, "episode": null, "character": null } ], "tagOptions": [ { "id": 162, "tag": 10, "tagName": "Relationship Types", "name": "Boyfriend/Girlfriend", "helpText": null }, { "id": 175, "tag": 10, "tagName": "Relationship Types", "name": "Friends", "helpText": null }, { "id": 39, "tag": 2, "tagName": "Sub-Genre", "name": "Critically Acclaimed", "helpText": null } ], "lists": [ { "id": 8138, "name": "Avatar", "overview": ".Just Avatar.", "url": "8138", "isOfficial": false, "nameTranslations": [ "eng" ], "overviewTranslations": [ "eng" ], "aliases": [], "score": 0, "image": "", "imageIsFallback": false } ], "translations": { "nameTranslations": [ { "name": "アバター", "language": "jpn" }, { "name": "阿凡达", "language": "zho" }, { "name": "Аватар", "language": "rus" }, { "name": "Avatar - Aufbruch nach Pandora", "language": "deu" }, { "name": "아바타", "language": "kor" }, { "name": "אווטאר", "language": "heb" }, { "name": "Avatar", "tagline": "A paraplegic soldier finds himself caught between the threatened human race and the aliens who are native to the planet of Pandora when he takes on a new body that helps him to blend in with the inhab", "language": "eng", "isPrimary": true }, { "name": "Avatar", "language": "fra" }, { "name": "Avatar", "language": "por" }, { "name": "Avatar", "language": "pt" }, { "name": "Avatar", "language": "spa" } ], "overviewTranslations": [ { "overview": "In 2154, humans have depleted Earth's natural resources and a paraplegic soldier finds himself in a new body and caught between his mission and the Na'vi who are the indigenous people of the alien planet of Pandora. Faced with betraying humanity, or the people he has befriended, Jake Sully must make an impossible choice.", "tagline": "A paraplegic soldier finds himself caught between the threatened human race and the aliens who are native to the planet of Pandora when he takes on a new body that helps him to blend in with the inhab", "language": "eng", "isPrimary": true }, { "overview": "Malgré sa paralysie, Jake Sully, un ancien marine immobilisé dans un fauteuil roulant, est resté un combattant au plus profond de son être. Il est recruté pour se rendre à des années-lumière de la Terre, sur Pandora, où de puissants groupes industriels exploitent un minerai rarissime destiné à résoudre la crise énergétique sur Terre. Parce que l'atmosphère de Pandora est toxique pour les humains, ceux-ci ont créé le Programme Avatar, qui permet à des \" pilotes \" humains de lier leur esprit à un avatar, un corps biologique commandé à distance, capable de survivre dans cette atmosphère létale. Ces avatars sont des hybrides créés génétiquement en croisant l'ADN humain avec celui des Na'vi, les autochtones de Pandora.\r\nSous sa forme d'avatar, Jake peut de nouveau marcher. On lui confie une mission d'infiltration auprès des Na'vi, devenus un obstacle trop conséquent à l'exploitation du précieux minerai. Mais tout va changer lorsque Neytiri, une très belle Na'vi, sauve la vie de Jake...", "language": "fra" }, { "overview": "Apesar de confinado a uma cadeira de rodas, Jake Sully (Sam Worthington), um ex-marine, continua a ser um combatente. Assim, é recrutado para uma missão a Pandora, um corpo celeste que orbita um enorme planeta gasoso, para explorar um mineral alternativo chamado Unobtainium, usado na Terra como recurso energético. Porém, devido ao facto de a atmosfera de Pandora ser altamente tóxica para os humanos, é usado um programa de avatares híbridos, que possibilita a transferência da mente de qualquer humano para um corpo nativo.\r\nComo as relações entre as duas raças tem estado em crise, Jake, já no seu corpo avatar, é também incumbido de tentar infiltrar-se naquela sociedade e encontrar uma forma de a dominar. Mas após ter sido salvo por Neytiri (Zoe Saldana), uma bela nativa, e perceber que afinal as ordens da Terra não vão ao encontro daquilo em que sempre acreditou, Jake questiona as razões. Ao ver-se dividido entre os pacíficos Na'vi e as forças que estão empenhadas em destruí-los, Jake toma a posição em que acredita.", "language": "por" }, { "overview": "No exuberante mundo alienígena de Pandora vivem os Na'vi, seres que parecem ser primitivos, mas são altamente evoluídos. Como o ambiente do planeta é tóxico, foram criados os avatares, corpos biológicos controlados pela mente humana que se movimentam livremente em Pandora. Jake Sully, um ex-fuzileiro naval paralítico, volta a andar através de um avatar e se apaixona por uma Na'vi. Esta paixão leva Jake a lutar pela sobrevivência de Pandora.", "language": "pt" }, { "overview": "En 2154, los humanos han agotado los recursos naturales de la Tierra y un soldado parapléjico se encuentra en un nuevo cuerpo y atrapado entre su misión y los Na'vi, que son los pueblos indígenas del planeta alienígena de Pandora. Ante la traición de la humanidad, o las personas con las que se ha hecho amigo, Jake Sully debe tomar una decisión imposible.", "language": "spa" } ], "aliases": null }, "contentRatings": [ { "id": 545, "name": "PG-13", "country": "usa", "description": "Suitable for viewers aged 13 and over, unless accompanied by an adult", "contentType": "movie", "order": 0, "fullname": "PG-13" } ], "companies": { "studio": [ { "id": 2048, "name": "20th Century Fox", "slug": "20th-century-fox", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "country": null, "primaryCompanyType": 2, "activeDate": null, "inactiveDate": null, "companyType": { "companyTypeId": 2, "companyTypeName": "Studio" }, "parentCompany": { "id": null, "name": null, "relation": { "id": null, "typeName": null } }, "tagOptions": null } ], "network": [], "production": [ { "id": 2048, "name": "20th Century Fox", "slug": "20th-century-fox", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "country": null, "primaryCompanyType": 2, "activeDate": null, "inactiveDate": null, "companyType": { "companyTypeId": 3, "companyTypeName": "Production Company" }, "parentCompany": { "id": null, "name": null, "relation": { "id": null, "typeName": null } }, "tagOptions": null }, { "id": 14284, "name": "Dune Entertainment", "slug": "dune-entertainment", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "country": null, "primaryCompanyType": 3, "activeDate": null, "inactiveDate": null, "companyType": { "companyTypeId": 3, "companyTypeName": "Production Company" }, "parentCompany": { "id": null, "name": null, "relation": { "id": null, "typeName": null } }, "tagOptions": null }, { "id": 22104, "name": "Ingenious Film Partners", "slug": "ingenious-film-partners", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "country": null, "primaryCompanyType": 3, "activeDate": null, "inactiveDate": null, "companyType": { "companyTypeId": 3, "companyTypeName": "Production Company" }, "parentCompany": { "id": null, "name": null, "relation": { "id": null, "typeName": null } }, "tagOptions": null }, { "id": 26010, "name": "Lightstorm Entertainment", "slug": "lightstorm-entertainment", "nameTranslations": null, "overviewTranslations": null, "aliases": null, "country": null, "primaryCompanyType": 3, "activeDate": null, "inactiveDate": null, "companyType": { "companyTypeId": 3, "companyTypeName": "Production Company" }, "parentCompany": { "id": null, "name": null, "relation": { "id": null, "typeName": null } }, "tagOptions": null } ], "distributor": [], "special_effects": [] }, "production_countries": [ { "id": 175340, "country": "usa", "name": "United States of America" }, { "id": 175341, "country": "gbr", "name": "Great Britain" } ], "inspirations": [], "spoken_languages": null, "first_release": { "country": null, "date": null, "detail": null } } }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.