public static Rom GetGameByName(string platformId, string name, out string access)
        {
            access = "";
            try
            {
                string key  = Functions.LoadAPIKEY();
                string json = string.Empty;
                var    url  = Values.BaseAPIURL + "/v1.1/Games/ByGameName?apikey=" + key + "&name=" + name + "&platform=" + platformId;

                using (WebClient client = new WebClient())
                {
                    client.Encoding = System.Text.Encoding.UTF8;
                    json            = client.DownloadString(new Uri(url));
                }

                if (string.IsNullOrEmpty(json))
                {
                    return(null);
                }

                access = json.Substring(json.IndexOf("remaining_monthly_allowance") + "remaining_monthly_allowance:".Length + 1, 5).Replace(":", "").Replace(",", "").Trim();
                var part = json.Substring(json.IndexOf("games\":") + 7);
                part = part.Substring(0, part.IndexOf("]},\"pages") + 1);
                var list = JsonConvert.DeserializeObject <List <API_Game> >(part);

                List <Rom> games = new List <Rom>();

                foreach (var game in list)
                {
                    if (game.platform.ToString() != platformId)
                    {
                        continue;
                    }
                    games.Add(new Rom()
                    {
                        Id           = game.id.ToString(),
                        DBName       = game.game_title,
                        YearReleased = RomFunctions.GetYear(game.release_date)
                    });

                    return(games[0]);
                }
            }
            catch (APIException ex)
            {
                throw new Exception(ex.Message);
            }
            catch (Exception ex)
            {
                return(null);
            }

            return(null);
        }
        public static List <Rom> GetGamesListByPlatform(string platformId, string json, string platformName)
        {
            try
            {
                if (string.IsNullOrEmpty(json))
                {
                    json = GetGamesListJSONByPlatform(platformId, platformName);
                }

                if (json == null)
                {
                    throw new APIException("Cound not get json");
                }

                var        jobject = (JArray)JsonConvert.DeserializeObject(json);
                List <Rom> games   = new List <Rom>();

                foreach (var game in jobject)
                {
                    var objGame = (JObject)game;
                    games.Add(new Rom()
                    {
                        Id           = objGame.SelectToken("id").ToString(),
                        DBName       = objGame.SelectToken("game_title").ToString(),
                        YearReleased = RomFunctions.GetYear(objGame.SelectToken("release_date").ToString())
                    });
                }

                return(games.OrderBy(x => x.Name).ToList());
            }
            catch (APIException ex)
            {
                throw new Exception(ex.Message);
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
        public static Rom GetGameDetails(string gameId, Platform platform, out string access)
        {
            access = "";
            try
            {
                var publishers = GetPublishers();
                var developers = GetDevelopers();

                string key  = Functions.LoadAPIKEY();
                string json = string.Empty;
                var    url  = Values.BaseAPIURL + "/v1/Games/ByGameID?apikey=" + key + "&id=" + gameId;

                using (WebClient client = new WebClient())
                {
                    client.Encoding = System.Text.Encoding.UTF8;
                    try
                    {
                        json = client.DownloadString(new Uri(url));

                        if (string.IsNullOrEmpty(json))
                        {
                            throw new Exception();
                        }
                    }
                    catch
                    {
                        if (platform != null)
                        {
                            var pjson = RomFunctions.GetPlatformJson(platform.Name);
                            var list  = GetGamesListByPlatform(platform.Id, pjson, platform.Name);

                            return(list.FirstOrDefault(x => x.Id == gameId));
                        }
                    }
                }

                if (string.IsNullOrEmpty(json))
                {
                    return(null);
                }

                var result = new Rom();
                access = json.Substring(json.IndexOf("remaining_monthly_allowance") + "remaining_monthly_allowance:".Length + 1, 5).Replace(":", "").Replace(",", "").Trim();
                var jobject = (JObject)JsonConvert.DeserializeObject(json);
                var jgame   = jobject.SelectToken("data.games").First();
                result.Id           = gameId;
                result.DBName       = jgame.SelectToken("game_title").ToString();
                result.YearReleased = RomFunctions.GetYear(jgame.SelectToken("release_date").ToString());
                //result.Description = jobject.SelectToken("data.games").First().SelectToken("description").ToString();

                result.Platform = new Platform();

                try
                {
                    var jplatform = jgame.SelectToken("platform");

                    if (jplatform != null)
                    {
                        result.Platform.Id = jplatform.ToString();
                        var list = Functions.GetPlatformsXML();
                        result.Platform.Name = list[result.Platform.Id];
                    }
                }
                catch
                {
                }

                try
                {
                    var jpublisher = jgame.SelectToken("publisher");

                    if (jpublisher != null)
                    {
                        result.Publisher = publishers[Convert.ToInt32(jpublisher.ToString())];
                    }
                }
                catch
                {
                }

                try
                {
                    var jdevelopers = jgame.SelectToken("developers");

                    if (jdevelopers != null)
                    {
                        result.Developer = developers[Convert.ToInt32(jdevelopers.First().ToString())];
                    }
                }
                catch
                {
                }

                return(result);
            }
            catch (APIException ex)
            {
                throw new Exception(ex.Message);
            }
            catch (Exception ex)
            {
                return(null);
            }

            return(null);
        }