💎 Unofficial Ruby Gem for OpenDotaAPI. This API provides Dota 2 related data.
⚠️ Please keep request rate to approximately 3/s.
If you use Rubygems you can type:
gem install open_dota_api
or add this line to your application's Gemfile:
gem 'open_dota_api'
then execute:
$ bundle
To use OpenDotaApi you can:
require 'open_dota_api'
Use available methods to gather needed data:
# Leagues listing
OpenDotaApi.leagues
# Teams listing
OpenDotaApi.teams
# Match details
OpenDotaApi.matches(match_id)
# Heroes listing
OpenDotaApi.heroes
# Pro players listing
OpenDotaApi.pro_players
# Explorer output (limited)
OpenDotaApi.explorer(league_id)
# Player (account) details
OpenDotaApi.players(account_id)
Beginning 2018-04-22, the OpenDota API is limited to 50,000 free calls per month and 60 requests/minute.
We offer a Premium Tier with unlimited API calls and higher rate limits. Check out the API page to learn more.
Please follow the link to Get the KEY.
To check the request limit for Free Tier:
OpenDotaApi.limits
Output:
{
per_min: "0", # request left for per minute
per_month: "49878" # request left for per month
}
After you get you personal key you have two options:
-
Set
api_key
globally to all your request. For Rails application you can create the initializer:# config/initializers/open_dota_api.rb OpenDotaApi.api_key = [YOUR_KEY_HERE]
-
Or you can set
api_key
directly in the request:OpenDotaApi.leagues(api_key: [YOUR_KEY_HERE]) OpenDotaApi.teams(api_key: [YOUR_KEY_HERE]) OpenDotaApi.matches(match_id, api_key: [YOUR_KEY_HERE]) OpenDotaApi.heroes(api_key: [YOUR_KEY_HERE]) OpenDotaApi.pro_players(api_key: [YOUR_KEY_HERE]) OpenDotaApi.explorer(league_id, api_key: [YOUR_KEY_HERE]) OpenDotaApi.players(account_id, api_key: [YOUR_KEY_HERE])
Enjoy!
API Method: leagues
leagues = OpenDotaApi.leagues
leagues # array
league = leagues.first
league.class # OpenDotaApi::Leagues
league.league_id # Number, league ID
league.ticket # String, ticket identifier
league.banner # String, banner identifier
league.tier # String, premiere, pro, amateur
league.name # String, league name
API Method: teams
teams = OpenDotaApi.teams
teams # array
team = teams.first
team.class # OpenDotaApi::Team
team.team_id
team.rating
team.wins
team.losses
team.last_match_time
team.name
team.tag
API Method: players
account_id = 65366604 # number, is required
player = OpenDotaApi.players(account_id)
player.class # OpenDotaApi::Player
player.account_id
player.mmr_estimate
player.plus
player.contributor?
player.steam_id
player.avatar
player.avatar_medium
player.avatar_full
player.profile_url
player.persona_name
player.last_login
player.cheese
player.loc_country_code
player.name
player.tracked_until
player.rank_tier
player.competitive_rank
player.solo_competitive_rank
player.leaderboard_rank
API Method: matches
match_id = 0000000001 # number, is required
match = OpenDotaApi.matches(match_id)
match.class # OpenDotaApi::Match
match.match_id
match.start_time
match.duration
match.series_id
match.series_type
match.radiant_team_id
match.dire_team_id
match.match_seq_num
match.league_id
match.first_blood_time
match.winner
match.cluster
match.replay_salt
match.cluster
match.replay_url
match.radiant_score # Integer
match.dire_score # Integer
match.players # array of players (type OpenDotaApi::Matches::Player)
players = match.players
player = players.first
player.class # OpenDotaApi::Matches::Player
player.match_id # related to OpenDotaApi::Match
player.player_slot
player.account_id
player.assists
player.camps_stacked
player.deaths
player.denies
player.gold_per_min
player.hero_id # related to OpenDotaApi::Hero
player.kills
player.obs_placed
player.sen_placed
player.rune_pickups
player.stuns
player.xp_per_min
player.name
player.side
player.kda
player.tower_kills
player.roshan_kills
player.hero_healing
player.last_hits
player.firstblood_claimed
player.hero_damage
player.teamfight_participation
API Method: heroes
heroes = OpenDotaApi.heroes
heroes.class # array
hero = heroes.first
hero.class # OpenDotaApi::Hero
hero.id
hero.name
hero.localized_name # "Anti-mage"
hero.primary_attr
hero.attack_type
hero.roles # array of roles
hero.legs
API Method: proPlayers
pro_players = OpenDotaApi.pro_players
pro_players.class # array
pro_player = pro_players.first
pro_player.class # OpenDotaApi::ProPlayer
pro_player.account_id
pro_player.steam_id
pro_player.avatar
pro_player.avatar_medium
pro_player.avatar_full
pro_player.profile_url
pro_player.persona_name
pro_player.last_login
pro_player.full_history_time
pro_player.cheese
pro_player.fh_unavailable
pro_player.loc_country_code
pro_player.last_match_time
pro_player.name
pro_player.country_code
pro_player.fantasy_role
pro_player.team_id
pro_player.team_name
pro_player.team_tag
pro_player.locked?
pro_player.pro?
pro_player.locked_until
API Method: explorer
explorer = OpenDotaApi.explorer(league_id)
explorer.class # OpenDotaApi::Explorer
explorer.league_matches_ids # Array of matches IDs for current league
...
That's all for now.
Bug reports and pull requests are welcome on GitHub at https://github.com/vergilet/open_dota_api
Feel free to contribute:
- Fork it (https://github.com/vergilet/open_dota_api/fork)
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create new Pull Request
The gem is available as open source under the terms of the MIT License.
Copyright © 2017 Yaro.