ITPub博客

首页 > IT职业 > IT生活 > 解决了美股行情api免费接入与实时更新问题

解决了美股行情api免费接入与实时更新问题

原创 IT生活 作者:数据日志簿 时间:2026-02-28 17:53:30 0 删除 编辑

最近在做一个小项目,需要把美股行情实时展示出来。一开始我以为找个接口拉点数据就能解决,结果真正动手做才发现,有些细节会让“免费+实时”变得没那么随意。

我的目标很明确:

  • 能获取主流美股的实时行情

  • 页面和脚本里都能秒级刷新

  • 数据稳定又尽量不超出接口限制

这看似简单,但做起来才发现,每一次小改动都会影响整个体验。

1、选择接口

面对市面上免费的接口,第一步是明确目标。很多接口要么延迟高,要么覆盖不全。我那时就想着先保证稳定,再考虑速度。

通常有两种方式:HTTP 查询和 Websocket 推送。HTTP 查询适合后台定时获取或初始化数据,但秒级刷新不现实;Websocket 推送能主动把最新行情送过来,适合页面实时更新和监控。

2、HTTP 查询实践

在 Python 里,用 HTTP 获取行情的过程很直接。比如我这样写:

import requests

url = "https://api.alltick.io/market/quote"
params = {
    "symbols" : "AAPL,TSLA" ,
    "exchange" : "US"
}
headers = { "Authorization" : "Bearer YOUR_API_KEY" }

response = requests.get(url, params=params, headers=headers)
print(response.json())

这段代码主要用来初始化数据。刚打开页面,先把当前价格拉下来,保证用户第一眼看到的是最新行情。简单,但效果很直观。

3、Websocket 实时推送

真正有趣的是 Websocket。HTTP 是你去问一次,数据才回来;Websocket 是数据主动送过来,秒级更新。逻辑很直接:订阅你关注的股票代码,就能第一时间收到推送。

import websocket
import json

def on_message (ws, message):
    data = json.loads(message)
    print( "实时行情:" , data)

def on_open (ws):
    ws.send(json.dumps({
        "action" : "subscribe" ,
        "symbols" : [ "AAPL" , "TSLA" , "AMZN" ],
        "exchange" : "US"
    }))

ws = websocket.WebSocketApp(
    "wss://stream.alltick.io/market" ,
    >
    >
)
ws.run_forever()

每次收到消息,我都感觉像在盯着股市脉搏跳动。这种实时感比单纯拉接口看 JSON 要直观多了。

4、前端可视化

把推送数据接到页面,用 ECharts 画个折线图,就能直接看到价格变化:

<div id= "priceChart" style= "height:400px;" ></div>
<script>
var chart = echarts.init(document.getElementById( 'priceChart' ));
var option = { xAxis:{ type: 'category' , data:[] }, yAxis:{ type: 'value' }, series:[{ type: 'line' , data:[] }] };
chart.setOption(option);

var ws = new WebSocket( "wss://stream.alltick.io/market" );
ws.{
    var update = JSON.parse(evt.data);
    option.xAxis.data.push(update.time);
    option.series[0].data.push(update.price);
    chart.setOption(option);
}
</script>

看到折线随着价格跳动,整个项目都变活了,体验比单纯查看数据舒服很多。

5、控制请求频率

免费接口都会有限制。刚开始我直接轮询,很快就被限速了。后来总结几条经验:

  • 批量请求,多支股票一起拉

  • 短时间重复请求直接用缓存

  • Websocket 替代轮询

这样既能保证实时性,又不会触碰接口限制。

6、Python 实战记录

最后,我做了一个小脚本,把实时行情记录下来,同时观察波动:

import websocket, json, datetime

symbols = [ "AAPL" , "TSLA" ]

def on_message (ws, message):
    data = json.loads(message)
    now = datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S" )
    with open( "prices.log" , "a" ) as f:
        f.write( f"{now} {data}\n" )

def on_open (ws):
    ws.send(json.dumps({
        "action" : "subscribe" ,
        "symbols" : symbols,
        "exchange" : "US"
    }))

ws = websocket.WebSocketApp(
    "wss://stream.alltick.io/market" ,
    >
    >
)
ws.run_forever()

每次看到日志里写入最新价格,都会觉得数据不是冰冷的数字,而像在呼吸。开发的过程也因此更有乐趣。

用这种方式,把美股行情接入项目变得顺畅了。数据实时、稳定,页面和脚本都能秒级刷新,也不会被频率限制干扰。整个体验很自然,开发过程中每一步都能感受到数据流动的节奏。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70048654/viewspace-3111320/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2025-12-10

  • 博文量
    47
  • 访问量
    46209