# Example ```rust use dotenvy::dotenv; use std::env; use vndb_api::client::VndbApiClient; use vndb_api::request::query::{QueryBuilder, VnQuery, VnField, VnFieldChoices, SortField}; #[tokio::main] async fn main() { dotenv().ok(); let api_key = env::var("API_KEY").expect("API_KEY must be set"); let api_client = VndbApiClient::new(&String::from(api_key)); // For more examples see the ["examples" directory] // (https://github.com/demeil1/vndb-api/tree/main/examples) // in the github repo // search for visual novel by name with autocomplete options let query = QueryBuilder::::new() .filters(&r#"["search", "=", "DDLC"]"#.to_string()) .fields(VnFieldChoices::from(vec![VnField::Title])) .results(3) .build(); match api_client.vn_search(&query).await { Ok(response) => { response.results.iter() .for_each(|vn| { println!("{}", vn.title.as_ref().unwrap()); }); } Err(error) => { eprintln!("{:#?}", error); } } // prints the name and rating for the top 3 visual novels on the site let query = QueryBuilder::::new() .fields(VnFieldChoices::all()) .sort(SortField::Rating) .results(3) .page(1) .reverse() .build(); match api_client.vn_search(&query).await { Ok(response) => { response.results.iter() .for_each(|vn| { println!("{}: {}", vn.title.as_ref().unwrap(), vn.rating.unwrap()); }); } Err(error) => eprintln!("{:#?}", error), } // using complex filters let filters = r#" [ "and" , [ "or" , [ "olang", "!=", "en" ] , [ "olang", "!=", "ja" ] ] , [ "released", ">=", "2020-01-01" ] ] "#.to_string(); let query = QueryBuilder::::new() .filters(&filters) .results(10) .page(1) .build(); match api_client.vn_search(&query).await { Ok(response) => { println!("{:#?}", response); } Err(error) => { eprintln!("{:#?}", error); } } } ``` # VNDB This crate allows for data collection from the [VNDB site](https://vndb.org). VNDB (Visual Novel Database) stores a plethora of information about Visual Novels, Characters, Producers, Tags, and so on. # Documentation The entirety of this crate is based on the new [HTTPS-based API Documentation](https://api.vndb.org/kana#post-character) and aims to simplify the way you collect data from the site. Further documentation and use cases for this crate can be found in the ["examples" directory on github](https://github.com/demeil1/vndb-api/tree/main/examples) or in the respective modules of the parts of the crate you use. # Requirments This crate only requires a VNDB API key to use. To get an API key follow the instructions below, or click on this [link](https://vndb.org/u/tokens) (only if you already have an account). [API Key Documentation](https://api.vndb.org/kana#user-authentication). Obtaining an API Key: 1. Register for a VNDB account (or Login if you already have one) 2. Open the "My Profile" tab and navigate to the "Applications" section 3. Create a new token and use as instructed (see ["examples" directory](https://github.com/demeil1/vndb-api/tree/main/examples)) # Recursive Queries **Fields**: This section allows you to select the pieces of information you want to pull from the site about a particular subject (Visual Novels, Producers, etc.). Unfortunately, due to the recursive nature of the [Visual Novel](https://api.vndb.org/kana#post-vn), [Release](https://api.vndb.org/kana#post-release), and [Character](https://api.vndb.org/kana#post-character) queries, recursive field choices have been limited. And, while the structs in this crate **DO** allow for said recursive field queries, recursive selection of fields is quite impractical and causes VNDB to deny providing a response due to the large size. These limitations only apply to the Visual Novel, Release, and Character queries. You **ARE** still be able to fill all struct fields with the aforementioned queries. Recursive sections (such as related Visual Novels in a Visual Novel query) in the structure **WILL** still have their name and id such that they can be searched later on for extra information.