1use tushare_api::{TushareClient, TushareRequest, Api, TushareResult, params, fields};
2use std::time::Duration;
3
4#[tokio::main]
5async fn main() -> TushareResult<()> {
6 println!("=== 使用环境变量 TUSHARE_TOKEN 创建客户端 ===");
7
8 let client = match TushareClient::from_env() {
10 Ok(client) => {
11 println!("✅ 成功从环境变量 TUSHARE_TOKEN 创建客户端");
12 client
13 }
14 Err(e) => {
15 eprintln!("❌ 无法从环境变量创建客户端: {}", e);
16 eprintln!("请确保设置了环境变量 TUSHARE_TOKEN");
17 eprintln!("例如: export TUSHARE_TOKEN=your_token_here");
18 return Err(e);
19 }
20 };
21
22 let request = TushareRequest {
24 api_name: Api::StockBasic,
25 params: params!("list_status" => "L"),
26 fields: fields!["ts_code", "name", "industry", "area"],
27 };
28
29 match client.call_api(request).await {
31 Ok(response) => {
32 if let Some(data) = response.data {
33 println!("✅ 成功获取到 {} 条记录", data.items.len());
34
35 println!("\n前5条股票信息:");
37 for (i, item) in data.items.iter().take(5).enumerate() {
38 println!("{}. {:?}", i + 1, item);
39 }
40 }
41 }
42 Err(e) => {
43 eprintln!("❌ 获取股票列表失败: {}", e);
44 }
45 }
46
47 println!("\n=== 使用环境变量和自定义超时设置 ===");
48
49 let client_with_timeout = TushareClient::from_env_with_timeout(
51 Duration::from_secs(5), Duration::from_secs(60) )?;
54
55 println!("\n=== 演示自定义 API 调用 ===\n");
56
57 let custom_request = TushareRequest {
58 api_name: Api::Custom("daily".to_string()),
59 params: params!("ts_code" => "000001.SZ"),
60 fields: fields!["ts_code", "trade_date", "close"],
61 };
62
63 match client_with_timeout.call_api(custom_request).await {
64 Ok(response) => {
65 if let Some(data) = response.data {
66 if let Some(item) = data.items.first() {
67 println!("✅ 找到股票信息:");
68 for (field, value) in data.fields.iter().zip(item.iter()) {
69 println!(" {}: {}", field, value);
70 }
71 } else {
72 println!("未找到该股票");
73 }
74 }
75 }
76 Err(e) => {
77 eprintln!("❌ 查询股票失败: {}", e);
78 }
79 }
80
81 Ok(())
82}