MingweiSamuel.Camille 2.3.0

Riot Games API library. Fully rate limited, automatic retrying, thread-safe. V4 Supported.

There is a newer prerelease version of this package available.
See the version list below for details.
Install-Package MingweiSamuel.Camille -Version 2.3.0
dotnet add package MingweiSamuel.Camille --version 2.3.0
<PackageReference Include="MingweiSamuel.Camille" Version="2.3.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add MingweiSamuel.Camille --version 2.3.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

Camille

AppVeyor branch NuGet Stable NuGet Pre Release API Reference

C# Library for the Riot Games API

Camille's goals are speed, reliability, and maintainability. Camille handles rate limits and large requests with ease.
Data classes are automatically generated from the
Riot API Reference (Swagger).

Features

  • Fast, asynchronous, thread-safe
  • Automatically retries failed requests
  • Highly-configurable
  • Targets .NET Standard 1.1+ (.NET Core 1.0+, .NET Framework 4.5+)
  • Riot API V4 Support
  • Automatic up-to-date nightlies, reflecting Riot API changes within 24 hours.

Installation

Install via NuGet (MingweiSamuel.Camille).

Usage

All API interactions are done using a RiotApi instance.
RiotApi.NewInstance takes either just an API key (for default settings) or a IRiotApiConfig instance (for custom settings).

var riotApi = RiotApi.NewInstance("RGAPI-12345678-abcd-1234-abcd-123456abcdef");
// OR
var riotApi = RiotApi.NewInstance(
    new RiotApiConfig.Builder("RGAPI-12345678-abcd-1234-abcd-123456abcdef")
    {
        MaxConcurrentRequests = 200,
        Retries = 10,
        // ...
    }.Build()
);

You can find all configuration options here.

API methods are divided up into respective endpoints, corresponding to the left bar of the API reference.

Example

Print Summoner's Top Champions
// Get summoners by name synchronously. (using async is faster).
var summoners = new[]
{
    riotApi.SummonerV4.GetBySummonerName(Region.NA, "jAnna kendrick"),
    riotApi.SummonerV4.GetBySummonerName(Region.NA, "lug nuts k")
};

foreach (var summoner in summoners)
{
    Console.WriteLine($"{summoner.Name}'s Top 10 Champs:");

    var masteries =
        riotApi.ChampionMasteryV4.GetAllChampionMasteries(Region.NA, summoner.Id);

    for (var i = 0; i < 10; i++)
    {
        var mastery = masteries[i];
        // Get champion for this mastery.
        var champ = (Champion) mastery.ChampionId;
        // print i, champ id, champ mastery points, and champ level
        Console.WriteLine("{0,3}) {1,-16} {2,10:N0} ({3})", i + 1, champ.Name(),
            mastery.ChampionPoints, mastery.ChampionLevel);
    }
    Console.WriteLine();
}

Output (2019-02-06):

Janna Kendrick's Top 10 Champs:
  1) Ekko              1,280,476 (7)
  2) Master Yi            89,871 (7)
  3) Jinx                 59,238 (6)
  4) Yasuo                58,625 (7)
  5) Poppy                52,140 (7)
  6) Maokai               46,567 (6)
  7) Ezreal               44,604 (6)
  8) Lulu                 42,794 (6)
  9) Kennen               42,500 (7)
 10) Zilean               41,710 (6)

LugnutsK's Top 10 Champs:
  1) Zyra                548,939 (7)
  2) Soraka               73,675 (6)
  3) Morgana              59,828 (5)
  4) Sona                 50,001 (6)
  5) Nami                 44,775 (6)
  6) Brand                42,108 (5)
  7) Janna                41,923 (5)
  8) Taric                37,916 (6)
  9) Ekko                 35,837 (5)
 10) Poppy                31,457 (5)
Print Summoner Ranked Match History

This example takes advantage of C#'s async/await tasks to fetch 10 matches all at once.

var summonerNameQuery = "lugnutsk";

// Get summoners data (blocking).
var summonerData = await riotApi.SummonerV4.GetBySummonerNameAsync(Region.NA, summonerNameQuery);
if (null == summonerData)
{
   // If a summoner is not found, the response will be null.
   Console.WriteLine($"Summoner '{summonerNameQuery}' not found.");
   return;
}

Console.WriteLine($"Match history for {summonerData.Name}:");

// Get 10 most recent matches (blocking).
// Queue ID 420 is RANKED_SOLO_5v5 (TODO)
var matchlist = await riotApi.MatchV4.GetMatchlistAsync(
   Region.NA, summonerData.AccountId, queue: new[] { 420 }, endIndex: 10);
// Get match results (done asynchronously -> not blocking -> fast).
var matchDataTasks = matchlist.Matches.Select(
       matchMetadata => riotApi.MatchV4.GetMatchAsync(Region.NA, matchMetadata.GameId)
   ).ToArray();
// Wait for all task requests to complete asynchronously.
var matchDatas = await Task.WhenAll(matchDataTasks);

for (var i = 0; i < matchDatas.Count(); i++)
{
   var matchData = matchDatas[i];
   // Get this summoner's participant ID info.
   var participantIdData = matchData.ParticipantIdentities
       .First(pi => summonerData.Id.Equals(pi.Player.SummonerId));
   // Find the corresponding participant.
   var participant = matchData.Participants
       .First(p => p.ParticipantId == participantIdData.ParticipantId);

   var win = participant.Stats.Win;
   var champ = (Champion) participant.ChampionId;
   var k = participant.Stats.Kills;
   var d = participant.Stats.Deaths;
   var a = participant.Stats.Assists;
   var kda = (k + a) / (float) d;

   // Print #, win/loss, champion.
   Console.WriteLine("{0,3}) {1,-4} ({2})", i + 1, win ? "Win" : "Loss", champ.Name());
   // Print champion, K/D/A
   Console.WriteLine("     K/D/A {0}/{1}/{2} ({3:0.00})", k, d, a, kda);
}

Output (2019-02-19):

Match history for LugnutsK:
  1) Win  (Zyra)
     K/D/A 2/3/11 (4.33)
  2) Win  (Zyra)
     K/D/A 5/1/13 (18.00)
  3) Loss (Zyra)
     K/D/A 2/5/1 (0.60)
  4) Win  (Sona)
     K/D/A 1/13/23 (1.85)
  5) Win  (Zyra)
     K/D/A 3/1/5 (8.00)
  6) Win  (Zyra)
     K/D/A 6/3/16 (7.33)
  7) Win  (Zyra)
     K/D/A 2/4/7 (2.25)
  8) Loss (Zyra)
     K/D/A 1/10/8 (0.90)
  9) Loss (Zyra)
     K/D/A 0/11/5 (0.45)
 10) Win  (Zyra)
     K/D/A 4/5/15 (3.80)

Camille

AppVeyor branch NuGet Stable NuGet Pre Release API Reference

C# Library for the Riot Games API

Camille's goals are speed, reliability, and maintainability. Camille handles rate limits and large requests with ease.
Data classes are automatically generated from the
Riot API Reference (Swagger).

Features

  • Fast, asynchronous, thread-safe
  • Automatically retries failed requests
  • Highly-configurable
  • Targets .NET Standard 1.1+ (.NET Core 1.0+, .NET Framework 4.5+)
  • Riot API V4 Support
  • Automatic up-to-date nightlies, reflecting Riot API changes within 24 hours.

Installation

Install via NuGet (MingweiSamuel.Camille).

Usage

All API interactions are done using a RiotApi instance.
RiotApi.NewInstance takes either just an API key (for default settings) or a IRiotApiConfig instance (for custom settings).

var riotApi = RiotApi.NewInstance("RGAPI-12345678-abcd-1234-abcd-123456abcdef");
// OR
var riotApi = RiotApi.NewInstance(
    new RiotApiConfig.Builder("RGAPI-12345678-abcd-1234-abcd-123456abcdef")
    {
        MaxConcurrentRequests = 200,
        Retries = 10,
        // ...
    }.Build()
);

You can find all configuration options here.

API methods are divided up into respective endpoints, corresponding to the left bar of the API reference.

Example

Print Summoner's Top Champions
// Get summoners by name synchronously. (using async is faster).
var summoners = new[]
{
    riotApi.SummonerV4.GetBySummonerName(Region.NA, "jAnna kendrick"),
    riotApi.SummonerV4.GetBySummonerName(Region.NA, "lug nuts k")
};

foreach (var summoner in summoners)
{
    Console.WriteLine($"{summoner.Name}'s Top 10 Champs:");

    var masteries =
        riotApi.ChampionMasteryV4.GetAllChampionMasteries(Region.NA, summoner.Id);

    for (var i = 0; i < 10; i++)
    {
        var mastery = masteries[i];
        // Get champion for this mastery.
        var champ = (Champion) mastery.ChampionId;
        // print i, champ id, champ mastery points, and champ level
        Console.WriteLine("{0,3}) {1,-16} {2,10:N0} ({3})", i + 1, champ.Name(),
            mastery.ChampionPoints, mastery.ChampionLevel);
    }
    Console.WriteLine();
}

Output (2019-02-06):

Janna Kendrick's Top 10 Champs:
  1) Ekko              1,280,476 (7)
  2) Master Yi            89,871 (7)
  3) Jinx                 59,238 (6)
  4) Yasuo                58,625 (7)
  5) Poppy                52,140 (7)
  6) Maokai               46,567 (6)
  7) Ezreal               44,604 (6)
  8) Lulu                 42,794 (6)
  9) Kennen               42,500 (7)
 10) Zilean               41,710 (6)

LugnutsK's Top 10 Champs:
  1) Zyra                548,939 (7)
  2) Soraka               73,675 (6)
  3) Morgana              59,828 (5)
  4) Sona                 50,001 (6)
  5) Nami                 44,775 (6)
  6) Brand                42,108 (5)
  7) Janna                41,923 (5)
  8) Taric                37,916 (6)
  9) Ekko                 35,837 (5)
 10) Poppy                31,457 (5)
Print Summoner Ranked Match History

This example takes advantage of C#'s async/await tasks to fetch 10 matches all at once.

var summonerNameQuery = "lugnutsk";

// Get summoners data (blocking).
var summonerData = await riotApi.SummonerV4.GetBySummonerNameAsync(Region.NA, summonerNameQuery);
if (null == summonerData)
{
   // If a summoner is not found, the response will be null.
   Console.WriteLine($"Summoner '{summonerNameQuery}' not found.");
   return;
}

Console.WriteLine($"Match history for {summonerData.Name}:");

// Get 10 most recent matches (blocking).
// Queue ID 420 is RANKED_SOLO_5v5 (TODO)
var matchlist = await riotApi.MatchV4.GetMatchlistAsync(
   Region.NA, summonerData.AccountId, queue: new[] { 420 }, endIndex: 10);
// Get match results (done asynchronously -> not blocking -> fast).
var matchDataTasks = matchlist.Matches.Select(
       matchMetadata => riotApi.MatchV4.GetMatchAsync(Region.NA, matchMetadata.GameId)
   ).ToArray();
// Wait for all task requests to complete asynchronously.
var matchDatas = await Task.WhenAll(matchDataTasks);

for (var i = 0; i < matchDatas.Count(); i++)
{
   var matchData = matchDatas[i];
   // Get this summoner's participant ID info.
   var participantIdData = matchData.ParticipantIdentities
       .First(pi => summonerData.Id.Equals(pi.Player.SummonerId));
   // Find the corresponding participant.
   var participant = matchData.Participants
       .First(p => p.ParticipantId == participantIdData.ParticipantId);

   var win = participant.Stats.Win;
   var champ = (Champion) participant.ChampionId;
   var k = participant.Stats.Kills;
   var d = participant.Stats.Deaths;
   var a = participant.Stats.Assists;
   var kda = (k + a) / (float) d;

   // Print #, win/loss, champion.
   Console.WriteLine("{0,3}) {1,-4} ({2})", i + 1, win ? "Win" : "Loss", champ.Name());
   // Print champion, K/D/A
   Console.WriteLine("     K/D/A {0}/{1}/{2} ({3:0.00})", k, d, a, kda);
}

Output (2019-02-19):

Match history for LugnutsK:
  1) Win  (Zyra)
     K/D/A 2/3/11 (4.33)
  2) Win  (Zyra)
     K/D/A 5/1/13 (18.00)
  3) Loss (Zyra)
     K/D/A 2/5/1 (0.60)
  4) Win  (Sona)
     K/D/A 1/13/23 (1.85)
  5) Win  (Zyra)
     K/D/A 3/1/5 (8.00)
  6) Win  (Zyra)
     K/D/A 6/3/16 (7.33)
  7) Win  (Zyra)
     K/D/A 2/4/7 (2.25)
  8) Loss (Zyra)
     K/D/A 1/10/8 (0.90)
  9) Loss (Zyra)
     K/D/A 0/11/5 (0.45)
 10) Win  (Zyra)
     K/D/A 4/5/15 (3.80)

Release Notes

Updates for v4 leagues

This package is not used by any popular GitHub repositories.

Version History

Version Downloads Last updated
2.3.1-nightly-2019-10-16-f4... 16 10/17/2019
2.3.1-nightly-2019-10-11-0b... 29 10/12/2019
2.3.0 45 10/11/2019
2.2.3-nightly-2019-10-08-e3... 30 10/10/2019
2.2.3-nightly-2019-09-27-64... 33 9/27/2019
2.2.3-nightly-2019-08-29-43... 43 8/30/2019
2.2.2 73 8/29/2019
2.2.2-nightly-2019-08-14-2d... 52 8/14/2019
2.2.2-nightly-2019-08-05-2e... 57 8/5/2019
2.2.2-nightly-2019-07-09-07... 67 7/9/2019
2.2.1 93 7/2/2019
2.2.1-nightly-2019-07-02-c9... 56 7/2/2019
2.2.1-nightly-2019-05-23-29... 81 5/23/2019
2.2.0 242 2/7/2019
2.2.0-nightly-2019-04-08-4d... 92 4/8/2019
2.2.0-nightly-2019-03-08-2d... 97 3/8/2019
2.2.0-nightly-2019-03-05-f6... 95 3/5/2019
2.2.0-nightly-2019-02-19-13... 102 2/19/2019
2.1.0 131 1/27/2019
2.0.0 154 12/16/2018
2.0.0-nightly-2019-01-17-9f... 145 1/17/2019
2.0.0-alpha-nightly-2018-12... 90 12/16/2018
2.0.0-alpha-nightly-2018-12... 100 12/16/2018
1.3.0 296 7/14/2018
1.3.0-nightly-2018-07-14-7c... 286 7/14/2018
1.2.0 236 6/2/2018
1.2.0-nightly-2018-07-14-b1... 225 7/14/2018
1.2.0-nightly-2018-06-06-2c... 232 6/6/2018
1.2.0-nightly-2018-06-06-28... 244 6/6/2018
1.2.0-nightly-2018-06-02-98... 212 6/3/2018
1.1.0 276 2/27/2018
1.1.0-nightly-2018-06-02-17... 199 6/2/2018
1.1.0-nightly-2018-02-23-7e... 247 2/23/2018
1.0.1 277 2/8/2018
1.0.1-nightly-2018-02-16-b9... 269 2/16/2018
1.0.1-nightly-2018-02-15-13... 244 2/15/2018
1.0.1-nightly-2018-02-14-46... 255 2/14/2018
1.0.1-nightly-2018-02-08-97... 255 2/8/2018
1.0.0 265 1/16/2018
1.0.0-nightly-b24c77881a 236 1/16/2018
1.0.0-nightly-986e3393a4 248 1/18/2018
1.0.0-nightly-2018-02-08-f0... 255 2/8/2018