Soporte de The Movie Database

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 respuestas (en la página 1 de 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 😃

¿No encuentras una película o serie? Inicia sesión para crearla:

Global

s centrar la barra de búsqueda
p abrir menú de perfil
esc cierra una ventana abierta
? abrir la ventana de atajos del teclado

En las páginas multimedia

b retrocede (o a padre cuando sea aplicable)
e ir a la página de edición

En las páginas de temporada de televisión

(flecha derecha) ir a la temporada siguiente
(flecha izquierda) ir a la temporada anterior

En las páginas de episodio de televisión

(flecha derecha) ir al episodio siguiente
(flecha izquierda) ir al episodio anterior

En todas las páginas de imágenes

a abrir la ventana de añadir imagen

En todas las páginas de edición

t abrir la sección de traducción
ctrl+ s enviar formulario

En las páginas de debate

n crear nuevo debate
w cambiar el estado de visualización
p cambiar público/privado
c cambiar cerrar/abrir
a abrir actividad
r responder al debate
l ir a la última respuesta
ctrl+ enter enviar tu mensaje
(flecha derecha) página siguiente
(flecha izquierda) página anterior

Configuraciones

¿Quieres puntuar o añadir este elemento a una lista?

Iniciar sesión