basic_usage/
basic_usage.rs

1use tushare_api::{TushareClient, TushareRequest, Api, TushareResult, params, fields};
2use std::time::Duration;
3use std::collections::HashMap;
4use std::env;
5
6#[tokio::main]
7async fn main() -> TushareResult<()> {
8    // 从环境变量获取 token
9    let token = env::var("TUSHARE_TOKEN")
10        .expect("请设置环境变量 TUSHARE_TOKEN");
11
12    // 创建客户端(使用默认超时设置)
13    let client = TushareClient::new(&token);
14    
15    println!("=== 使用默认超时设置获取股票基本信息 ===");
16    
17    let request = TushareRequest {
18        api_name: Api::StockBasic,
19        params: params!("list_status" => "L"),
20        fields: fields!["ts_code", "name", "industry", "area"],
21    };
22    
23    match client.call_api(&request).await {
24        Ok(response) => {
25            if let Some(data) = response.data {
26                println!("成功获取到 {} 条记录", data.items.len());
27
28                // 显示前10条记录
29                println!("\n前10条股票信息:");
30                for (i, item) in data.items.iter().take(10).enumerate() {
31                    println!("{}. {:?}", i + 1, item);
32                }
33            }
34        }
35        Err(e) => {
36            eprintln!("获取股票列表失败: {}", e);
37        }
38    }
39    
40    println!("\n=== 使用自定义超时设置查询特定股票 ===");
41    
42    // 创建客户端(自定义超时设置)
43    let client_with_timeout = TushareClient::with_timeout(
44        &token,
45        Duration::from_secs(5),  // 连接超时 5 秒
46        Duration::from_secs(60)  // 请求超时 60 秒
47    );
48    
49    let mut stock_params = HashMap::new();
50    stock_params.insert("ts_code".into(), "000001.SZ".into());
51    
52    let stock_request = TushareRequest {
53        api_name: Api::StockBasic,
54        params: stock_params,
55        fields: vec![
56            "ts_code".into(),
57            "symbol".into(),
58            "name".into(),
59            "area".into(),
60            "industry".into(),
61            "list_date".into(),
62        ],
63    };
64    
65    match client_with_timeout.call_api(&stock_request).await {
66        Ok(response) => {
67            if let Some(data) = response.data {
68                if let Some(item) = data.items.first() {
69                    println!("找到股票信息:");
70                    for (field, value) in data.fields.iter().zip(item.iter()) {
71                        println!("  {}: {}", field, value);
72                    }
73                } else {
74                    println!("未找到该股票");
75                }
76            }
77        }
78        Err(e) => {
79            eprintln!("查询股票失败: {}", e);
80        }
81    }
82
83    Ok(())
84}