Sprijin Bază de date filme (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 răspunsuri (pe pagina 1 din 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 😃

Nu găsiți un film sau un serial? Autentificați-vă pentru a-l crea.

Globale

s focalizează bara de căutare
p deschide meniul profilului
esc închide o fereastră deschisă
? deschide fereastra cu scurtături de la tastatură

Pe paginile media

b mergi înapoi (sau la părinte atunci când este cazul)
e mergi la pagina de editare

Pe paginile sezoanelor filmelor seriale

(săgeată dreapta) mergi la sezonul următor
(săgeată stânga) mergi la sezonul precedent

Pe paginile episoadelor filmelor seriale

(săgeată dreapta) mergi la episodul următor
(săgeată stânga) mergi la episodul precedent

Pe toate paginile de imagini

a deschide fereastra pentru adăugarea de imagini

Pe toate paginile de editare

t deschide selectorul de traduceri
ctrl+ s trimite formularul

Pe paginile de discuții

n crează o discuție nouă
w comută starea de vizionare
p comută publică/privată
c comută închisă/deschisă
a deschide activitatea
r răspunde la discuție
l mergi la ultimul răspuns
ctrl+ enter trimite mesajul
(săgeată dreapta) pagina următoare
(săgeată stânga) pagina precedentă

Setări

Doriți să evaluați sau să adăugați acest articol într-o listă?

Autentificare