/// <summary> /// necessary for using LeagueOfLegendsApi /// </summary> /// <param name="services"> /// </param> /// <param name="riotApiKey"> /// RiotGames DeveloperKey or ProductionKey /// </param> /// <param name="cacheOption"> /// [overrides all default values] custom api caching options (default: ApiCaching is NOT /// USED ) /// </param> /// <param name="rateLimitOption2"> /// [overrides all default values] custom rate limit handling options (default: rate-limiting /// is USED) default X-App-Rate-Limit: 100:120,20:1, default X-Method-Rate-Limit: /// 20000:10,1200000:600, default Mathlists X-Method-Rate-Limit: 500:10 /// </param> /// <exception cref="Exception"> /// A delegate callback throws an exception. /// </exception> public static void AddLeagueOfLegendsApi(this IServiceCollection services, string riotApiKey, Func <CacheOption, CacheOption> cacheOption, Func <RateLimitBuilder, RateLimitBuilder> rateLimitOption2) { //can convertable to json var riotGamesApiBuilder = RiotGamesApiBuilder(riotApiKey); var riotGamesApiOption = riotGamesApiBuilder.Build(); var cOptions = new CacheOption(); riotGamesApiOption.CacheOptions = cacheOption != null?cacheOption(cOptions) : cOptions; //RateLimitData limits = RateLimitData();//default settings RateLimitBuilder rlb = null; if (rateLimitOption2 != null) { //limits = rateLimitOption2(limits); //user settings rlb = rateLimitOption2(new RateLimitBuilder()); //user settings } else { rlb = RateLimitBuilder(); //default settings } riotGamesApiOption.RateLimitOptions.All = rlb.Build(); riotGamesApiOption.RateLimitOptions.SetLeagueApiLimit(rlb.Special_Leagues_Limits); riotGamesApiOption.RateLimitOptions.SetSummonerIdAndByNameApiLimit(rlb.SummonerIdAndByName_Limits); riotGamesApiOption.RateLimitOptions.SetSummonerAccountNameApiLimit(rlb.SummonerAccountName_Limits); riotGamesApiOption.RateLimitOptions.DisableLimiting = false; //force rate-limiting to use services.AddSingleton <IApiOption>(riotGamesApiOption); services.AddMemoryCache(); services.AddSingleton <IApiCache>(new ApiCache()); services.AddSingleton <LolApi>(new LolApi()); services.AddSingleton <LolApiRateLimit>(new LolApiRateLimit()); }
private static RateLimitBuilder RateLimitBuilder() { RateLimitBuilder limits = new RateLimitBuilder(); limits.AddRateLimitFor(LolUrlType.Static, LolApiName.StaticData, new List <ApiLimit>() { new ApiLimit(new TimeSpan(1, 0, 0), 10, RateLimitType.MethodRate) }, LolApiMethodName.Champions, LolApiMethodName.Items, LolApiMethodName.LanguageStrings, LolApiMethodName.LanguageStrings, LolApiMethodName.Maps, LolApiMethodName.Masteries, LolApiMethodName.ProfileIcons, LolApiMethodName.Realms, LolApiMethodName.Runes, LolApiMethodName.SummonerSpells, LolApiMethodName.Versions); limits.AddRateLimitFor(LolUrlType.NonStatic, LolApiName.Match, new List <ApiLimit>() { new ApiLimit(new TimeSpan(0, 0, 10), 500, RateLimitType.MethodRate) }, LolApiMethodName.Matches, LolApiMethodName.Timelines); limits.AddRateLimitFor(LolUrlType.NonStatic, LolApiName.Match, new List <ApiLimit>() { new ApiLimit(new TimeSpan(0, 0, 10), 1000, RateLimitType.MethodRate) }, LolApiMethodName.MatchLists); limits.AddRateLimitFor(LolUrlType.Status, LolApiName.Status, new List <ApiLimit>() { new ApiLimit(new TimeSpan(0, 0, 10), 20000, RateLimitType.MethodRate), new ApiLimit(new TimeSpan(0, 2, 0), 100, RateLimitType.AppRate), new ApiLimit(new TimeSpan(0, 0, 1), 20, RateLimitType.AppRate) }, LolApiMethodName.ShardData); limits.AddRateLimitFor(LolUrlType.Tournament, new List <LolApiName>() { LolApiName.Tournament, LolApiName.TournamentStub }, new List <ApiLimit>() { new ApiLimit(new TimeSpan(0, 0, 10), 20000, RateLimitType.MethodRate), new ApiLimit(new TimeSpan(0, 2, 0), 100, RateLimitType.AppRate), new ApiLimit(new TimeSpan(0, 0, 1), 20, RateLimitType.AppRate) }, LolApiMethodName.Codes, LolApiMethodName.LobbyEvents, LolApiMethodName.Providers, LolApiMethodName.Tournaments); limits.AddRateLimitFor(LolUrlType.NonStatic, new List <LolApiName>() { LolApiName.ChampionMastery, LolApiName.Spectator, LolApiName.Summoner, LolApiName.Platform, }, new List <ApiLimit>() { new ApiLimit(new TimeSpan(0, 0, 10), 20000, RateLimitType.MethodRate), new ApiLimit(new TimeSpan(0, 2, 0), 100, RateLimitType.AppRate), new ApiLimit(new TimeSpan(0, 0, 1), 20, RateLimitType.AppRate) }, LolApiMethodName.ChampionMasteries, LolApiMethodName.Scores, LolApiMethodName.ActiveGames, LolApiMethodName.FeaturedGames, LolApiMethodName.Summoners ); //lol/platform/v3/champions //lol/platform/v3/masteries/by-summoner/{summonerId} //lol/platform/v3/runes/by-summoner/{summonerId} limits.AddRateLimitFor(LolUrlType.NonStatic, new List <LolApiName>() { LolApiName.Platform }, new List <ApiLimit>() { new ApiLimit(new TimeSpan(0, 1, 0), 400, RateLimitType.MethodRate), new ApiLimit(new TimeSpan(0, 2, 0), 100, RateLimitType.AppRate), new ApiLimit(new TimeSpan(0, 0, 1), 20, RateLimitType.AppRate) }, LolApiMethodName.Champions, LolApiMethodName.Masteries, LolApiMethodName.Runes); limits.LeaguesApiLimitsInMinute(); //temporary solution limits.SummonerIdAndByNameLimitsInMinute(); //temporary solution limits.SummonerAccountNameLimitsInMinute(); //temporary solution return(limits); }