npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

synergy-lol-api

v1.0.1-1.2

Published

LoL API NodeJS wrapper designed for distributed computation.

Downloads

18

Readme

#syner.gg LoL API Wrapper

Coverage Status

This is a LoL API wrapper written in NodeJS that is designed to be used in distributed calculations. We are using it at syner.gg to make sure that we don't exceed our rate limit whilst using one API key over our cluster computing algorithms and game data crawlers.

That just means it uses a Redis key-value cache to store the request count, nothing fancy.

I wouldn't use this in production yet - at the moment it's very idiosyncratic to the syner.gg backend and as such there are many many features missing. Many of the endpoints are unaccounted for, but feel free to add them yourself and make a pull request to have them added on this repo.

Features

  • Bluebird Promises
  • Distributed caching with Redis so you don't hit your API rate limit using multiple machines
  • Logging

Installation

npm install synergy-lol-api

Usage

In your nodeJS script call

var LoLAPI = require('synergy-lol-api').init({
	cache: cache, //TODO: insert redis cache here
	api_key: api_key, //TODO: insert api key here
    limit_ten_seconds: 10,
    limit_one_hour: 500
})

Then use as follows:

LoLAPI.request.getSummonerIdFromSummonerName({
    realm: 'euw',
    summonerName: 'NiP Bjergsen'
}).then(function(result) {
    console.log(result['nipbjergsen'].id);
});

Logging

Logging is supported out of the box, simply pass in your transport like so:

var winston = require('winston');
require('winston-loggly');
winston.add(winston.transports.Loggly, options);
var LoLAPI = require('synergy-lol-api').init({
  cache: cache, //TODO: insert redis cache here
  logger: winston,
  api_key: api_key, //TODO: insert api key here
  limit_ten_seconds: 10,
  limit_one_hour: 500
});

##Contributing We're very happy for people to contribute to this project, nay, we encourage it! If you would like to contribute make a pull request and we'll do our best to review it.

Things to bear in mind:

  1. We don't accept any pull requests without tests. If you write a new feature, it must be testable.
  2. Use Promises not callbacks (where possible).
  3. This project was initially solely for syner.gg purposes and we only use a handful of endpoints (in our calculations, at least), so you may find it lacking. However, adding an endpoint handler is very very simple. They are stored under /lib/handlers. Just add a new file, naming it according to the method name and copy the url convention used in the other handlers, if you're having any problems then just raise an issue on GitHub.

Design Decisions

  • The endpoint handlers are split up into two sections - route stems and handlers. The route stems provide the, um, 'stem' for the endpoint like '/summoner' and then the handlers are 'actions' which you can perform on each endpoint. The result is requests that are human readable like 'LoLAPI.request.getSummonerIdFromSummonerName()' or 'LoLAPI.getLoLVersions()'. I guess we could have had a system where the requests were formatted like the RiotAPI - 'LoLAPI.request.summoner.byName' or something like that, but I don't much like having to go back to the RiotAPI every five minutes just to find out how exactly each one of those endpoints is ordered. Also, each one of those endpoints ends up being quite distinct in its parameters such that thinking the endpoints consistent is quite a folly. e.g. /summoner/{summonerIds} and /summoner/by-name/{summonerNames} take different format inputs and therefore require different input parsing.

Changelog

[1.0.11] - 2016-03-25

Fixed

  • Ranked Queues were not being processed correctly in the Match List handler.
  • Fail count exception handler fixed.

Added

  • route builder system.
  • filter select variables by using 'returnVars' as an argument to the request object.
  • shutdown method.

Changed

  • getMatchList now accepts 'rankedQueue' as well as the plural, 'rankedQueues'.

[1.0.10] - 2016-03-25

Added

  • support for input as 'realm' or 'region', they are now interchangeable.
  • witholds queue execution if cache server is disconnected.
  • added output of how many requests are left in the hour (useful for developing crawlers).
  • much better results handling for 404 errors and address not found errors.

[1.0.9] - 2016-03-23

Added

  • Coveralls.io support

[1.0.8] - 2016-03-19

Added

  • Changelog!
  • creation of 'local' Redis instance if none is passed in.
  • helper functions folder - loaded in the same way as the request handlers.
  • improved testing suite.

Planned features

  • Caching request results - This will allow us to save the results of API queries in a distributed cache and call upon them when needed.
  • Redis database switching.
  • Advanced error handling.

Known issues

Too many to list here

API Documentation

Realm or Region

We honestly have no clue what is better 'realm' or 'region', so we've added in support for both, they are interchangeable throughout the module.

Filter Return Variables

You can filter down your return variables like so:

LoLAPI.request.getSummonerIdFromSummonerName({
  realm: 'euw',
  summonerName: 'NiP Bjergsen',
  returnVars: 'nipbjergsen' // Can be string or array of requested return variables
}).then(function(result) {
  console.log(result);
  /*
  Outputs (at time of writing):
    { id: 19442683,
    name: 'NiP Bjergsen',
    profileIconId: 558,
    summonerLevel: 30,
    revisionDate: 1383327484000 }
  */
});

This may help with reducing your memory footprint.

Supported Actions

These are the supported League of Legends API actions:

  • LoLAPI.request.getLoLVersions()
  • LoLAPI.request.getMatchList()
  • LoLAPI.request.getMatch()
  • LoLAPI.request.getSummonerIdFromSummonerName()
  • LoLAPI.request.getTeam()