generic_api_usage/
generic_api_usage.rs

1use tushare_api::{TushareClient, TushareRequest, Api, TushareResult, params, fields};
2use std::env;
3
4#[tokio::main]
5async fn main() -> TushareResult<()> {
6    // 从环境变量获取 Tushare token
7    let token = env::var("TUSHARE_TOKEN")
8        .expect("请设置环境变量 TUSHARE_TOKEN");
9
10    // 创建客户端
11    let client = TushareClient::new(&token);
12
13    println!("=== 使用通用 API 方法获取股票列表 ===");
14    
15    // 使用宏构建请求(支持直接使用字符串字面量)
16    let request = TushareRequest {
17        api_name: Api::StockBasic,
18        params: params!("list_status" => "L"),
19        fields: fields!["ts_code", "symbol", "name", "area", "industry", "list_date"],
20    };
21    
22    // 调用通用 API 方法
23    let response = client.call_api(&request).await?;
24    
25    println!("API 调用成功!");
26    println!("请求 ID: {}", response.request_id);
27    println!("返回码: {}", response.code);
28    if let Some(data) = response.data {
29        println!("返回字段: {:?}", data.fields);
30        println!("数据条数: {}", data.items.len());
31        
32        // 显示前5条记录
33        println!("\n前5条股票记录:");
34        for (i, item) in data.items.iter().take(5).enumerate() {
35            println!("{}. {:?}", i + 1, item);
36        }
37    }
38    
39    println!("\n=== 使用通用 API 方法查询特定股票 ===");
40    
41    // 查询特定股票
42    let request = TushareRequest {
43        api_name: Api::StockBasic,
44        params: params!("ts_code" => "000001.SZ"),
45        fields: fields!["ts_code", "name", "industry", "market", "list_date"],
46    };
47    
48    let response = client.call_api(&request).await?;
49
50    if let Some(data) = response.data {
51        if let Some(stock_data) = data.items.first() {
52            println!("找到股票信息:");
53            for (field, value) in data.fields.iter().zip(stock_data.iter()) {
54                println!("  {}: {}", field, value);
55            }
56        } else {
57            println!("未找到该股票");
58        }
59    }
60
61    Ok(())
62}