This script queries the RIOT-API for the last game of a summoner
# Usage: ruby last_game.rb <summoner_name> <na/euw/...>
require "net/http"
require "json"
require "date"
# TODO: Insert your own key here!
API_KEY = "<YOUR-RIOT-API-KEY-HERE>"
@summoner_name = ARGV[0]
@region = ARGV[1] || "euw"
class Summoner < Struct.new(:name, :region)
def summoner_id
standardized_summoner_name = name.downcase.gsub(" ", "")
@summoner_id ||= get_from_api("/api/lol/#{region}/v1.4/summoner/by-name/#{standardized_summoner_name}")
.fetch(standardized_summoner_name)
.fetch("id")
end
def recent_game
@recent_game ||= get_from_api("/api/lol/#{region}/v1.3/game/by-summoner/#{summoner_id}/recent")["games"].first
end
def print_recent_game_info
infos = {
date: Time.at(recent_game["createDate"] / 1000)
.strftime("%Y-%m-%d (%H:%M)"),
summoner: name,
outcome: recent_game["stats"]["win"] ? "won" : "lost",
game_type: recent_game["subType"],
game_mode: recent_game["gameMode"]
}
p "On %{date} %{summoner} %{outcome} his last game, " \
"which was a %{game_type} (%{game_mode})" % infos
end
private
def get_from_api(path)
uri = URI(URI.join("https://#{region}.api.pvp.net", path) + "?api_key=#{API_KEY}")
http = Net::HTTP.new(uri.hostname, uri.port)
http.use_ssl = true
response = http.request(Net::HTTP::Get.new(uri, _header = {'Content-Type' =>'application/json'}))
case response
when Net::HTTPSuccess
return JSON.parse(response.body)
when Net::HTTPNotFound
raise "Couldn't find the record, maybe you misspelled something?"
else
raise "An error occurred while processing #{path}
Response #{response.code} #{response.message}:
#{response.body}"
end
end
end
summoner = Summoner.new(@summoner_name, @region)
summoner.print_recent_game_info