Expand description
§yahoo! finance API
This project provides a set of functions to receive data from the the yahoo! finance website via their API. This project is licensed under Apache 2.0 or MIT license (see files LICENSE-Apache2.0 and LICENSE-MIT).
Since version 0.3 and the upgrade to reqwest
0.10, all requests to the yahoo API return futures, using async
features.
Therefore, the functions need to be called from within another async
function with .await
or via functions like block_on
.
The examples are based on the tokio
runtime applying the tokio-test
crate.
Use the blocking
feature to get the previous behavior back: i.e. yahoo_finance_api = {"version": "1.0", features = ["blocking"]}
.
§Get the latest available quote:
use yahoo_finance_api as yahoo;
use std::time::{Duration, UNIX_EPOCH};
use time::OffsetDateTime;
use tokio_test;
fn main() {
let provider = yahoo::YahooConnector::new().unwrap();
// get the latest quotes in 1 minute intervals
let response = tokio_test::block_on(provider.get_latest_quotes("AAPL", "1d")).unwrap();
// extract just the latest valid quote summery
// including timestamp,open,close,high,low,volume
let quote = response.last_quote().unwrap();
let time: OffsetDateTime =
OffsetDateTime::from(UNIX_EPOCH + Duration::from_secs(quote.timestamp));
println!("At {} quote price of Apple was {}", time, quote.close);
}
§Get history of quotes for given time period:
use yahoo_finance_api as yahoo;
use std::time::{Duration, UNIX_EPOCH};
use time::{macros::datetime, OffsetDateTime};
use tokio_test;
fn main() {
let provider = yahoo::YahooConnector::new().unwrap();
let start = datetime!(2020-1-1 0:00:00.00 UTC);
let end = datetime!(2020-1-31 23:59:59.99 UTC);
// returns historic quotes with daily interval
let resp = tokio_test::block_on(provider.get_quote_history("AAPL", start, end)).unwrap();
let quotes = resp.quotes().unwrap();
println!("Apple's quotes in January: {:?}", quotes);
}
§Get the history of quotes for time range
Another method to retrieve a range of quotes is by requesting the quotes for a given period and lookup frequency. Here is an example retrieving the daily quotes for the last month:
use yahoo_finance_api as yahoo;
use std::time::{Duration, UNIX_EPOCH};
use tokio_test;
fn main() {
let provider = yahoo::YahooConnector::new().unwrap();
let response = tokio_test::block_on(provider.get_quote_range("AAPL", "1d", "1mo")).unwrap();
let quotes = response.quotes().unwrap();
println!("Apple's quotes of the last month: {:?}", quotes);
}
§Search for a ticker given a search string (e.g. company name):
use yahoo_finance_api as yahoo;
use tokio_test;
fn main() {
let provider = yahoo::YahooConnector::new().unwrap();
let resp = tokio_test::block_on(provider.search_ticker("Apple")).unwrap();
let mut apple_found = false;
println!("All tickers found while searching for 'Apple':");
for item in resp.quotes
{
println!("{}", item.symbol)
}
}
Some fields like longname
are only optional and will be replaced by default
values if missing (e.g. empty string). If you do not like this behavior,
use search_ticker_opt
instead which contains Option<String>
fields,
returning None
if the field found missing in the response.
Re-exports§
pub use time;
Modules§
Structs§
- AdjClose
- Asset
Profile - Capital
Gain - This structure simply models a capital gain which has been recorded.
- Current
Trading Period - Default
KeyStatistics - Dividend
- This structure simply models a dividend which has been recorded.
- Extended
Quote Summary - Financial
Data - Period
Info - Quote
- Struct for single quote
- Quote
Block - Quote
List - Quote
Type - Split
- This structure simply models a split that has occured.
- Summary
Detail - Trading
Periods - YChart
- YMeta
Data - YNews
Item - YOption
Chain - YOption
Chain Data - YOption
Chain Result - YOption
Contract - YOption
Details - YQuote
- YQuote
Block - YQuote
Item - YQuote
Item Opt - YQuote
Summary - YResponse
- YSearch
Result - YSearch
Result Opt - YSummary
Data - Yahoo
Connector - Container for connection parameters to yahoo! finance server
- Yahoo
Connector Builder