32个版本 (稳定)
2.2.1 | 2024年7月4日 |
---|---|
2.1.0 | 2023年9月18日 |
2.0.1 | 2023年7月6日 |
1.6.1 | 2023年4月23日 |
0.3.1 | 2020年7月27日 |
#75 in Web编程
1,283 每月下载量
在 8 个库中使用 (6直接)
59KB
1.5K SLoC
yahoo!金融API
本项目提供了一组函数,通过API从yahoo!金融网站接收数据。本项目采用Apache 2.0或MIT许可协议(请参阅文件LICENSE-Apache2.0和LICENSE-MIT)。
从版本0.3开始,升级到reqwest
0.10,所有对yahoo API的请求都返回futures,使用async
功能。因此,需要从另一个async
函数中调用这些函数,使用.await
或通过像block_on
这样的函数。示例基于tokio
运行时,应用了tokio-test
库。
使用blocking
功能可以恢复之前的操作:即yahoo_finance_api = {"version" = "1.0", features = ["blocking"]}
。
获取最新可用的报价
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);
}
获取指定时间段的报价历史
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);
}
获取时间范围报价的历史
另一种获取报价范围的方法是通过请求给定时间段和查找频率的报价。以下是一个示例,检索上个月的每日报价
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);
}
根据搜索字符串(例如公司名称)搜索股票代码
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)
}
}
一些字段如longname
是可选的,如果缺失(例如空字符串)则会被默认值替换。如果您不喜欢这种行为,请使用search_ticker_opt
代替,它包含Option<String>
字段,如果响应中找到的字段缺失则返回None
。
时间段标签
时间段以字符串形式给出,由时间段数量(除“ytd”和“max”外)和一个指定单个时间段的字符串标签组合而成。以下时间段标签被支持
标签 | 描述 |
---|---|
m | 分钟 |
h | 小时 |
d | 天 |
wk | 周 |
mo | 月 |
y | 年 |
ytd | 年度至今 |
max | 最大 |
有效的参数组合
用户 @satvikpendem,以下是一个给定范围内的支持报价间隔列表
范围 | 间隔 |
---|---|
1d | 1m, 2m, 5m, 15m, 30m, 90m, 1h, 1d, 5d, 1wk, 1mo, 3mo |
1mo | 2m, 3m, 5m, 15m, 30m, 90m, 1h, 1d, 5d, 1wk, 1mo, 3mo |
3mo | 1h, 1d, 1wk, 1mo, 3mo |
6mo | 1h, 1d, 1wk, 1mo, 3mo |
1y | 1h, 1d, 1wk, 1mo, 3mo |
2y | 1h, 1d, 1wk, 1mo, 3mo |
5y | 1d, 1wk, 1mo, 3mo |
10y | 1d, 1wk, 1mo, 3mo |
ytd | 1m, 2m, 5m, 15m, 30m, 90m, 1h, 1d, 5d, 1wk, 1mo, 3mo |
max | 1m, 2m, 5m, 15m, 30m, 90m, 1h, 1d, 5d, 1wk, 1mo, 3mo |
依赖项
~7–18MB
~277K SLoC