The Movie Database Support Forum

I have the following code that works:

private string GetMovieCert(int ID)
        {
            try
            {
                var client = new RestClient("https://api.themoviedb.org/3/movie/" + ID.ToString() + "/release_dates?api_key=###");
                var request = new RestRequest(Method.GET);
                request.AddParameter("undefined", "{}", ParameterType.RequestBody);
                IRestResponse response = client.Execute(request);

                List<char> items = response.Content.ToList<char>();               

                // Char version
                int hit = 0;
                string allres = "";
                foreach (var item in items)
                {
                    string f = item.ToString();
                    allres = allres + item.ToString();
                    if (f == "}")
                    {
                        if (allres.Contains("iso_3166_1\":\"US")) hit |= 3;
                        // if (allres.Contains("iso_3166_1")) hit |= 1;
                        // if (allres.Contains("US")) hit |= 2;
                        if (allres.Contains("\"certification\":\"\"")) hit |= 4;
                        if (hit == 3) break;
                        allres = "";
                        hit &= 3;
                    }
                    if (f == "]") hit = 0;
                }

                int pFrom = allres.IndexOf("certification") + "certification".Length;
                int pTo = allres.LastIndexOf("iso_639_1");

                String result = allres.Substring(pFrom, pTo - pFrom);
                return result.Split(':')[1].Replace(",", "").Replace("\"", ""); 
            }
            catch { return ""; }
        }

Is there a cleaner, more direct way to accomplish this? Using Linq or a JSON parser?

Thanks!

2 Antworten (Seite 1 von 1)

Jump to last post

Ok, I figured out a way to retrieve a movie's certification using a JSON query. I'm posting the code so that it may help someone.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DM.MovieApi;
using DM.MovieApi.ApiResponse;
using DM.MovieApi.ApiRequest;
using DM.MovieApi.MovieDb.Movies;
using DM.MovieApi.MovieDb.Genres;
using DM.MovieApi.MovieDb.Certifications;
using RestSharp;
using RestSharp.Deserializers;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace JsonQuery
{
    class Program
    {
        static void Main(string[] args)
        {
            string strCert = "";

            MovieDbFactory.RegisterSettings("###", "http://api.themoviedb.org/3/");

            var client = new RestClient("https://api.themoviedb.org/3/movie/<MOVIE_ID>/release_dates?api_key=<API_KEY>");
            var request = new RestRequest(Method.GET);
            request.AddParameter("undefined", "{}", ParameterType.RequestBody);
            IRestResponse response = client.Execute(request);

            string json = response.Content;

            JObject rss = JObject.Parse(json);

            IEnumerable<JToken> certs = rss.SelectTokens("$.results[?(@.iso_3166_1 == 'US')].release_dates[?(@.certification)].certification");

            foreach (JToken item in certs) {strCert = item.ToString();}

            Console.WriteLine(strCert);
        }
    }
}

Hi @RichGodlewski Cool, thanks for the update. You'll find it always easier to use a real JSON parser as it will handle all of the proper serialization for you. Being able to work with native objects is always nicer 😃

Es fehlt ein Film oder eine Serie? Logge dich ein zum Ergänzen.

Allgemein

s Fokus auf Suchfeld
p Profil öffnen
esc Fenster schließen
? Tastenkürzel anzeigen

Videos

b Zurück
e Bearbeiten

Staffeln

Nächste Staffel
Vorherige Staffel

Episoden

Nächste Episode
Vorherige Episode

Bilder

a Poster oder Hintergrundbild hinzufügen

Editieren

t Sprachauswahl öffnen
ctrl+ s Speichern

Diskussionen

n Neue Diskussion erstellen
w Beobachten an / aus
p Diskussion öffentlich / privat
c Diskussion öffnen / schließen
a Diskussionsverlauf anzeigen
r Auf Diskussion antworten
l Letzte Antwort anzeigen
ctrl+ enter Senden
Nächste Seite
Vorherige Seite

Einstellungen

Diesen Eintrag bewerten oder zu einer Liste hinzufügen?

Anmelden