use the_odds_api::{Market, OddsFormat, Region, TheOddsApiClient};
#[tokio::main]
async fn main() -> the_odds_api::Result<()> {
let api_key = std::env::var("ODDS_API_KEY").expect("ODDS_API_KEY environment variable not set");
let client = TheOddsApiClient::new(api_key);
println!("=== Sports ===");
let sports = client.get_sports().await?;
for sport in &sports.data {
println!(" {} - {} (active: {})", sport.key, sport.title, sport.active);
}
println!();
if let Some(sport) = sports.data.first() {
println!("=== Events for {} ===", sport.title);
let events = client.get_events(&sport.key).send().await?;
for event in events.data.iter().take(5) {
println!(
" {} vs {} @ {}",
event.home_team.as_deref().unwrap_or("TBD"),
event.away_team.as_deref().unwrap_or("TBD"),
event.commence_time
);
}
println!();
}
println!("=== NFL Odds ===");
let odds = client
.get_odds("americanfootball_nfl")
.regions(&[Region::Us])
.markets(&[Market::H2h, Market::Spreads])
.odds_format(OddsFormat::American)
.send()
.await?;
for event in odds.data.iter().take(3) {
println!(
" {} vs {}",
event.home_team.as_deref().unwrap_or("TBD"),
event.away_team.as_deref().unwrap_or("TBD")
);
for bookmaker in event.bookmakers.iter().take(2) {
println!(" {}", bookmaker.title);
for market in &bookmaker.markets {
print!(" {}: ", market.key);
for outcome in &market.outcomes {
print!(
"{} ({}{}) ",
outcome.name,
if outcome.price > 0.0 { "+" } else { "" },
outcome.price
);
}
println!();
}
}
}
println!();
println!("=== API Usage ===");
println!(
" Requests remaining: {:?}",
odds.usage.requests_remaining
);
println!(" Requests used: {:?}", odds.usage.requests_used);
println!(" Last request cost: {:?}", odds.usage.requests_last);
Ok(())
}