# Statbook
[](https://github.com/daguenette/statbook/actions)
[](https://crates.io/crates/statbook)
[](https://github.com/yourusername/nfl-stats-funtimes#license)
[](https://www.rust-lang.org)
A Rust library for accessing sports statistics and data.
Currently supports NFL player data via [MySportsFeeds.com](https://www.mysportsfeeds.com) with plans to expand to other sports and data sources.
## Setup
### 1. Get MySportsFeeds Credentials
Sign up for a free account at [MySportsFeeds.com](https://www.mysportsfeeds.com) to get your API credentials.
### 2. Add to Cargo.toml
```toml
[dependencies]
statbook = "0.1.0"
tokio = { version = "1.0", features = ["full"] }
```
### 3. Set Environment Variables
```bash
export STATBOOK_API_KEY="your-api-key"
export STATBOOK_PASSWORD="your-password"
```
## Quick Start
```rust
use statbook::{StatbookClient, api::players::get_player_by_name};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = StatbookClient::from_env()?;
if let Some(player) = get_player_by_name(&client, "tom-brady").await? {
println!("{} {} - #{}", player.first_name, player.last_name, player.jersey_number);
println!("Position: {}", player.primary_position);
println!("Team: {}", player.current_team);
println!("Games Played: {}", player.games_played);
}
Ok(())
}
```
## Configuration Options
### Environment Variables (Recommended)
```rust
use statbook::StatbookClient;
let client = StatbookClient::from_env()?;
```
### Builder Pattern
```rust
use statbook::{StatbookClient, StatbookConfig};
let config = StatbookConfig::builder()
.api_key("your-api-key")
.password("your-password")
.build()?;
let client = StatbookClient::new(config);
```
### Direct Configuration
```rust
use statbook::{StatbookClient, StatbookConfig};
let config = StatbookConfig::new(
"your-api-key".to_string(),
"your-password".to_string()
);
let client = StatbookClient::new(config);
```
## API Reference
### Players
```rust
use statbook::api::players::get_player_by_name;
// Get player summary
let player = get_player_by_name(&client, "josh-allen").await?;
```
### Types
```rust
use statbook::models::PlayerSummary;
// PlayerSummary contains:
// - first_name: String
// - last_name: String
// - primary_position: String
// - jersey_number: u32
// - current_team: String
// - injury: String
// - rookie: bool
// - games_played: u64
```
## Error Handling
```rust
use statbook::{StatbookClient, StatbookError};
match StatbookClient::from_env() {
Ok(client) => {
// Use client
}
Err(StatbookError::MissingApiKey) => {
eprintln!("Please set STATBOOK_API_KEY environment variable");
}
Err(StatbookError::MissingPassword) => {
eprintln!("Please set STATBOOK_PASSWORD environment variable");
}
Err(e) => {
eprintln!("Error: {}", e);
}
}
```
## Future Plans
- Finish NFL player and team statistics
- More comprehensive NFL data (forecasting, games, seasons)
- Additional sports (NHL, NBA, etc.)
- Additional data providers beyond MySportsFeeds
## License
Licensed under either of
- Apache License, Version 2.0
- MIT license
at your option.