Skip to main content

Crate gflights

Crate gflights 

Source
Expand description

§gflights — unofficial Google Flights client for Rust

An async library that talks to the same endpoints used by the Google Flights website. It handles request encoding, response parsing, rate limiting, and automatic retry for transient server errors.

§Data flow

ConfigBuilder::build()  →  Config
     ↓
ApiClient::request_flights(&config)  →  FlightResponseContainer
     │                                       │
     │                               Vec<RawResponse>
     │                                    │
     │                          ItineraryContainerList
     │                              │              │
     │                       best_flights    other_flights
     │                              └──────┬──────┘
     │                              Vec<ItineraryContainer>
     │                                       │
     │                               ┌───────┴──────────┐
     │                          Itinerary         ItineraryCost
     │                        (flight details,    (price, token)
     │                         duration, CO2)
     │
ApiClient::request_offer(&config)   →  OfferRawResponseContainer
     │                                       │
     │                               Vec<OfferGroup>
     │                              (price, airline, click_token)
     │
ApiClient::resolve_booking_url(token)  →  String (booking URL)

§Quick start

use gflights::requests::{api::ApiClient, config::Config};
use chrono::{Duration, Utc};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let client = ApiClient::new().await;
    let today = Utc::now().date_naive();

    let config = Config::builder()
        .departure("LHR", &client).await?
        .destination("JFK", &client).await?
        .departing_date(today + Duration::days(14))
        .build()?;

    let results = client.request_flights(&config).await?;
    for resp in &results.responses {
        if let Some(flights) = resp.maybe_get_all_flights() {
            for f in &flights {
                println!("{} — {} min — {:?}",
                    f.itinerary.flight_by,
                    f.itinerary.total_time_minutes,
                    f.itinerary_cost.trip_cost);
            }
        }
    }
    Ok(())
}

Re-exports§

pub use parsers::response::date_grid_response::CheapDate;
pub use requests::api::RateLimitedError;
pub use requests::api::RetryConfig;

Modules§

parsers
Parsers and request-builders for the Google Flights API.
protos
requests