Fotmob Ruby Gem
An unofficial Ruby wrapper for the FotMob API. Get football/soccer data including team stats, match details, and league standings.
Features
- ๐ Team Data - Get comprehensive team information and statistics
- โฝ Match Details - Detailed match information including lineups, stats, and live scores
- ๐ Matches by Date - All matches for a given day across 150+ leagues
- ๐ League Data - League tables, fixtures, and competition details
- ๐ก๏ธ Error Handling - Custom error classes for different scenarios
- โฑ๏ธ Configurable - Timeout and timezone support
Installation
Add to your Gemfile:
gem 'fotmob'
Or install directly:
gem install fotmob
Quick Start
require 'fotmob'
client = Fotmob.new
# All matches for today
matches = client.get_matches("20260516")
matches[:leagues].each { |l| puts l[:name] }
# Match details (lineups, stats, events)
match = client.get_match_details("5315746")
puts "#{match[:general][:homeTeam][:name]} vs #{match[:general][:awayTeam][:name]}"
puts match[:header][:status][:scoreStr]
# Team info
team = client.get_team("8455") # Chelsea
puts team[:details][:name]
# League standings
league = client.get_league("47") # Premier League
puts league[:details][:name]
API Methods
get_matches(date)
All matches for a given date (150+ leagues).
matches = client.get_matches("20260516")
# Returns: { leagues: [...], date: "..." }
# Each league has a :matches array with scores, teams, status
get_match_details(match_id)
Full match data โ lineups, stats, events, shotmap.
match = client.get_match_details("5315746")
# Returns: { general:, header:, content: { stats:, lineup:, shotmap:, ... } }
get_team(team_id)
Team overview, fixtures, and squad.
team = client.get_team("8455")
# Returns: { details:, overview:, fixtures:, ... }
get_league(league_id)
League table, fixtures, and stats.
league = client.get_league("47")
# Returns: { details:, table:, fixtures:, stats:, ... }
Configuration
# Defaults: timeout 10s, timezone Europe/Paris
client = Fotmob.new(timeout: 30, timezone: "Europe/Paris")
Error Handling
The gem includes custom error classes for different scenarios:
begin
team = client.get_team("invalid_id")
rescue Fotmob::NotFoundError => e
puts "Team not found: #{e.}"
rescue Fotmob::RateLimitError => e
puts "Rate limit exceeded: #{e.}"
rescue Fotmob::TimeoutError => e
puts "Request timed out: #{e.}"
rescue Fotmob::APIError => e
puts "API error: #{e.} (Status: #{e.status_code})"
rescue Fotmob::Error => e
puts "Error: #{e.}"
end
Error Classes
Fotmob::Error- Base error classFotmob::APIError- API returned an error responseFotmob::NotFoundError- Resource not found (404)Fotmob::RateLimitError- Rate limit exceeded (429)Fotmob::TimeoutError- Request timed outFotmob::InvalidResponseError- Invalid JSON response
Development
# Clone the repository
git clone https://github.com/bjrsti/fotmob.git
cd fotmob
# Install dependencies
bundle install
# Run tests
bundle exec rspec
# Run linter
bundle exec rubocop
# Open console
bundle exec rake console
Testing
The gem uses RSpec for testing with VCR for recording API responses:
bundle exec rspec
Contributing
- Fork it
- 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 a Pull Request
Finding IDs
IDs are in the fotmob.com URL for each resource:
- Teams:
fotmob.com/teams/8455/overview/chelseaโ8455 - Matches:
fotmob.com/matches/chelsea-vs-manchester-city/abc123#5315746โ5315746 - Leagues:
fotmob.com/leagues/47/overview/premier-leagueโ47
Disclaimer
This is an unofficial API wrapper and is not affiliated with FotMob. Use at your own risk and be mindful of rate limits.
License
MIT License. See LICENSE for details.