实时行情接口:Infoway API vs. Tushare

近期发现一个提供金融实时行情数据接口的平台 ——infoway.io,该平台具备较高的实用价值。目前,该网站开放用户注册通道,用户完成注册后可获取专属 API 密钥,并享受为期 7 天的免费使用权益。

在功能层面,infoway.io支持通过 WebSocket 协议建立连接,提供的实时行情数据覆盖多类金融市场,具体包括股票、外汇、加密货币及商品期货的实时行情,同时可获取最新成交价、最新 K 线等核心交易数据。

众所周知,国内同类金融数据接口服务平台(如 tushare、akshare)已逐步转向收费模式。这一趋势背后的逻辑不难理解:数据本身已成为重要的生产要素与资产,获取高质量的资产服务,自然需要相应的成本投入。

下面就以Python为例说明如何利用infoway.io的API密钥获取股票的基本信息。

1)所需模块

import requests
import pandas as pd
import time  
import os
os.chdir(r'E:\TestData')

2)基础配置

API_KEY = "********"  # 请替换成你注册的API密钥
EXCEL_PATH = "stock_codes.xlsx"  
SHEET_NAME = "Sheet1"  
CODE_COLUMN = "stock_code" 
BATCH_SIZE = 50  # 单次API请求的股票数量
SAVE_RESULT_PATH = "stock_basic_info.xlsx"  
REQUEST_INTERVAL = 0.6 

REQUSET_INTERNAL为两次请求间隔时间(秒),由于有限制,0.6秒确保每秒≤2次(1/0.6≈1.67次/秒)。

3)读取Excel中的股票代码

def read_stock_codes(excel_path, sheet_name, code_column):    
	df = pd.read_excel(excel_path, sheet_name=sheet_name)    
	# 提取有效代码(去重、去空)    
	stock_codes = df[code_column].drop_duplicates().dropna().tolist()    
	print(f"成功读取 {len(stock_codes)} 个有效股票代码")    
	return stock_codes

4)分批调用API获取数据

def get_stock_batch_info(stock_codes_batch, api_key):
    codes_str = ",".join(stock_codes_batch)
    url = f"https://data.infoway.io/common/basic/symbols/info?symbols={codes_str}&type=STOCK_CN"
    headers = {
        "User-Agent": "Mozilla/5.0",
    	"Accept": "application/json",
        "apiKey": api_key
    }
    try:
        response = requests.get(url, headers=headers, timeout=10)
    	response.raise_for_status()
    	return response.json()
    except Exception as e:
        print(f"获取批次 {stock_codes_batch[:3]}... 失败:{str(e)}")
        time.sleep(REQUEST_INTERVAL * 2)
        return None

5)主逻辑

def main():
    all_stock_codes = read_stock_codes(EXCEL_PATH, SHEET_NAME, CODE_COLUMN)
    
    if not all_stock_codes:
        print("未读取到有效股票代码,程序退出")
        return

    # 分割批次
    batches = [
        all_stock_codes[i:i + BATCH_SIZE]
        for i in range(0, len(all_stock_codes), BATCH_SIZE)
    ]
    total_batches = len(batches)

    print(f"共分为 {total_batches} 个批次请求,每批间隔 {REQUEST_INTERVAL} 秒")

    all_results = []
    
    for batch_idx, batch_codes in enumerate(batches, 1):
        print(f"正在请求第 {batch_idx}/{total_batches} 批次,共 {len(batch_codes)} 个代码")
        batch_result = get_stock_batch_info(batch_codes, API_KEY)
        
        # 处理有效结果
        if batch_result and "data" in batch_result:
            all_results.extend(batch_result["data"])
            print(f"第 {batch_idx} 批次请求成功,累计获取 {len(all_results)} 条数据")
        
        # 除最后一批外,每批请求后暂停指定时间,控制频率
        if batch_idx < total_batches:
            time.sleep(REQUEST_INTERVAL)

    # 保存结果
    if all_results:
        result_df = pd.DataFrame(all_results)
        result_df.to_excel(SAVE_RESULT_PATH, index=False)
        print(f"\n任务完成!共获取 {len(all_results)} 个股票的信息,已保存到 {SAVE_RESULT_PATH}")
    else:
        print("\n未获取到任何有效股票信息")

6)执行主逻辑

if __name__ == "__main__":    
	main()

结果如下:

从实际获取结果来看,infoway.io接口返回的股票基础信息维度涵盖股票代码、市场分类、中文简体名称、英文名称、中文繁体名称、所属交易所、交易币种、每手股数、总股本、流通股本、港股专属的港股股本,以及每股盈利、每股盈利(TTM)、每股净资产、股息等财务指标,同时包含可提供的衍生品行情信息与所属板块分类。

然而,该接口也存在明显的缺陷:北交所股票的基础信息无法正常获取。需特别说明的是,对比接口(如 tushare)已实现北交所股票信息的有效抓取,此差异需重点关注。

进一步对比 tushare 接口与 infoway.io 接口的信息覆盖度,我们发现tushare 接口具备 infoway.io 接口缺失的关键维度,包括股票所属地区、细分行业、上市日期、退市日期及当前状态等。

反之,infoway.io 接口也包含部分 tushare 接口未覆盖的信息字段,二者存在互补性。

综上,若需获取单只股票完整、全面的基础信息,建议将 tushare 接口与 infoway.io 接口返回的信息进行数据合并处理,以实现信息维度的补全与整合。