#market-data #quote #api-bindings #stock #finance #yahoo #http-request

yahoo_finance_api

为获取市场数据报价历史而提供yahoo!金融API的Rust适配器

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编程

Download history 243/week @ 2024-05-03 255/week @ 2024-05-10 250/week @ 2024-05-17 294/week @ 2024-05-24 290/week @ 2024-05-31 185/week @ 2024-06-07 366/week @ 2024-06-14 340/week @ 2024-06-21 326/week @ 2024-06-28 309/week @ 2024-07-05 266/week @ 2024-07-12 295/week @ 2024-07-19 443/week @ 2024-07-26 307/week @ 2024-08-02 293/week @ 2024-08-09 216/week @ 2024-08-16

1,283 每月下载量
8 个库中使用 (6直接)

MIT/Apache

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