Skip to content

autoapicom/auto-api-rust

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

auto-api-client-rust

Crates.io docs.rs License

Async Rust client for the auto-api.com car listings API. Built on reqwest + serde.

Covers 8 marketplaces: encar, mobile.de, autoscout24, che168, dongchedi, guazi, dubicars, dubizzle. Offer data comes back as serde_json::Value since each source has its own schema.

Installation

Add to your Cargo.toml:

[dependencies]
auto-api-client = "1.0"

Usage

use auto_api_client::{Client, OffersParams};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = Client::new("your-api-key");
    // ...
    Ok(())
}

Get filters

let filters = client.get_filters("encar").await?;

Search offers

let offers = client.get_offers("mobilede", &OffersParams {
    page: 1,
    brand: Some("BMW".into()),
    year_from: Some(2020),
    ..Default::default()
}).await?;

// Pagination
println!("{}", offers.meta.page);
println!("{}", offers.meta.next_page);

Get single offer

let offer = client.get_offer("encar", "40427050").await?;

Track changes

let change_id = client.get_change_id("encar", "2025-01-15").await?;
let changes = client.get_changes("encar", change_id).await?;

// Next batch
let next_batch = client.get_changes("encar", changes.meta.next_change_id).await?;

Get offer by URL

let info = client.get_offer_by_url(
    "https://encar.com/dc/dc_cardetailview.do?carid=40427050"
).await?;

Decode offer data

Since each marketplace returns different fields, offer data is serde_json::Value. You can deserialize into OfferData or your own struct:

use auto_api_client::OfferData;

for item in &offers.result {
    let d: OfferData = serde_json::from_value(item.data.clone())?;
    println!("{} {} {} — ${}", d.mark, d.model, d.year, d.price);
}

Error handling

use auto_api_client::{Client, OffersParams, Error};

match client.get_offers("encar", &OffersParams { page: 1, ..Default::default() }).await {
    Ok(offers) => println!("Got {} offers", offers.result.len()),
    Err(Error::Auth { status_code, message }) => {
        // 401/403 — invalid API key
        eprintln!("Auth error {}: {}", status_code, message);
    }
    Err(Error::Api { status_code, message, body }) => {
        // Any other API error
        eprintln!("API error {}: {}", status_code, message);
    }
    Err(Error::Network(e)) => {
        // reqwest/network error
        eprintln!("Network error: {}", e);
    }
}

Supported sources

Source Platform Region
encar encar.com South Korea
mobilede mobile.de Germany
autoscout24 autoscout24.com Europe
che168 che168.com China
dongchedi dongchedi.com China
guazi guazi.com China
dubicars dubicars.com UAE
dubizzle dubizzle.com UAE

Other languages

Language Package
PHP autoapi/client
TypeScript @autoapicom/client
Python autoapicom-client
Go auto-api-go
C# AutoApi.Client
Java auto-api-client
Ruby auto-api-client

Documentation

auto-api.com

About

Async Rust client for auto-api.com — car listings across encar, mobile.de, autoscout24, che168 and more

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages