Unpopular Positive Opinion Challenge

From xkcd.com:

xkcd comic

Challenge accepted, Randall!

I use Trakt to keep track and rate all of the movies I watch. Fortunately, Trakt provides an API so that I can programmatically retrieve all of my ratings. The OMDb API includes Rotten Tomatoes ratings, so I was able write a small C# console application to compare my ratings of 8 or greater to Rotten Tomatoes. Here's a quick sample of what that code looks like:

using Newtonsoft.Json;
using OMDbApiNet;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;

namespace UnpopularPositiveOpinionChallenge
{
    
    class Program
    {
        const string _clientId = "";
        const string _clientSecret = "";
        const string _omdbKey = "";

        static void Main(string[] args)
        {
            Console.WriteLine("Getting ratings...");
            
            OmdbClient omdbClient = new OmdbClient(_omdbKey, true);
            List<TraktRatingsItem> unpopularOpinions = new List<TraktRatingsItem>();

            var ratings = GetTraktMovieRatings("chrisofspades", "8,9,10");

            Console.WriteLine("Finding unpopular opinions...");

            foreach (var rating in ratings)
            {
                var item = omdbClient.GetItemById(rating.Movie.Ids.Imdb);
                string tomatoRating = item.Ratings.Where(r => r.Source == "Rotten Tomatoes").Select(r => r.Value).FirstOrDefault();
                decimal? tomatoPercent = tomatoRating.ToDecimalFromPercentage();
                if (tomatoPercent.HasValue == false)
                {
                    continue;
                }

                rating.TomatoRating = tomatoPercent;
                if (tomatoPercent <= 0.5m)
                {
                    unpopularOpinions.Add(rating);
                }
            }

            foreach (var rating in unpopularOpinions)
            {
                Console.WriteLine($"{rating.Movie.Title} - {rating.Rating} - {rating.TomatoRating}");
            }

        }

        static List<TraktRatingsItem> GetTraktMovieRatings(string username, string ratings)
        {
            Uri baseAddress = new Uri("https://api.trakt.tv/");
            using (HttpClient httpClient = new HttpClient { BaseAddress = baseAddress })
            {
                httpClient.DefaultRequestHeaders.TryAddWithoutValidation("trakt-api-version", "2");

                httpClient.DefaultRequestHeaders.TryAddWithoutValidation("trakt-api-key", _clientId);

                using (var response = httpClient.GetAsync($"users/{username}/ratings/movies/{ratings}").Result)
                {
                    string responseData = response.Content.ReadAsStringAsync().Result;
                    return JsonConvert.DeserializeObject<List<TraktRatingsItem>>(responseData);
                }
            }
        }

        static OmdbItem GetOmdbItem()
        {
            return null;
        }


    }
}

And without further ado, here are my unpopular opinions:

Equilibrium (2002)

My rating: 8/10
Rotten Tomatoes: 40%

I'm surprised that this only scored 40% on the TomatoMeter. It has an audience score of 80%, so maybe the critics got it wrong. I love the action sequences in this movie, and the gun kata fighting style? Superb.

The Matrix Revolutions (2003)

My rating: 8/10
Rotten Tomatoes: 35%

I realize I may take some heat for this one. The Matrix is one of the greatest movies ever, and it's sequels are much maligned. But I'm a bigger fan of the sequels than most, and I thoroughly enjoyed Revolutions in spite of the cheesy CGI battle between Neo and Agent Smith.

Rent (2005)

My rating: 8/10
Rotten Tomatoes: 47%

I got to see Rent on Broadway and loved it, and this adaptation is pretty accurate. Plus it has most of the original cast, who I never saw on stage.

Hector and the Search for Happiness (2014)

My rating: 8/10
Rotten Tomatoes: 37%

I like Simon Pegg; I like stories where the protagonist takes a journey to find meaning in life; I like random, fun adventures; therefore, I like this movie!