Upbit API:实时掌握加密货币市场动态与数据
Upbit API:洞悉加密货币市场脉搏,实时获取最新数据
Upbit 作为韩国领先的加密货币交易所,其 API 为开发者和交易者提供了强大的数据获取工具, позволяющий实时监测市场动态,制定更精准的交易策略。本文将深入探讨如何利用 Upbit API 获取最新数据,助力您在加密货币市场中占据先机。
API 概览
Upbit API 遵循 RESTful 架构原则,设计了一套全面的 HTTP 端点,方便用户以程序化的方式访问和管理其 Upbit 账户和市场数据。通过发送标准的 HTTP 请求,开发者可以获取各种加密货币的市场信息、执行交易操作以及查询账户详情。Upbit 致力于提供详尽且用户友好的 API 文档,降低开发者的学习曲线,助力其快速集成和构建创新的交易应用。
- 市场数据: 提供对 Upbit 交易所内各种交易对的实时市场数据的访问,包括但不限于:最新成交价格(Last Traded Price, LTP)、24 小时成交量、当日最高价、当日最低价、以及买一价和卖一价等关键指标。这些数据对于算法交易、市场分析和构建信息聚合平台至关重要。
- 交易信息: 允许用户检索特定交易对的最新交易历史记录,包括每笔交易的确切成交价格、成交数量以及精确的成交时间戳。这些历史数据可用于回溯测试交易策略、分析市场趋势和监控交易活动。
- 订单簿: 暴露了指定交易对的买单和卖单的详细信息,包括每个订单的价格和数量。订单簿数据反映了市场的深度和流动性,对于理解供需关系、预测价格波动以及执行限价订单至关重要。开发者可以利用订单簿数据构建高级交易策略,例如市价深度分析和订单簿可视化工具。
- 账户信息: 提供经过身份验证的用户访问其 Upbit 账户详细信息的能力,包括账户余额、完整的交易历史记录(包括所有已完成和未完成的交易)以及当前活跃的挂单信息。 为了保护用户隐私和资产安全,访问账户信息需要有效的 API 密钥和安全身份验证机制。
获取最新数据:方法详解
以下详述使用 Upbit API 获取最新市场数据的常用方法,并提供具体步骤和示例代码。 请务必注意 ,使用 Upbit API 前,您需要:
- 注册 Upbit 账号: 访问 Upbit 官方网站( https://upbit.com/ )并按照指示完成注册流程。
- 获取 API 密钥: 登录您的 Upbit 账号后,进入 API 管理页面,申请 API 密钥。您将获得一个 Access Key 和一个 Secret Key。请妥善保管您的 Secret Key,避免泄露。
API 密钥是您访问 Upbit API 的凭证。在进行任何 API 调用时,都需要使用这些密钥进行身份验证。
常用 API 方法:
-
获取所有市场行情 (Get All Tickers):
此方法用于获取所有交易市场(例如:KRW-BTC, BTC-ETH)的当前价格、交易量等信息。
API Endpoint:
/v1/market/all
参数:
-
isDetails
(可选): 是否返回市场详细信息。默认为false
。
示例 (使用 Python):
import requests import jwt import uuid import hashlib access_key = "YOUR_ACCESS_KEY" secret_key = "YOUR_SECRET_KEY" payload = { "access_key": access_key, "nonce": str(uuid.uuid4()) } jwt_token = jwt.encode(payload, secret_key, algorithm="HS256") authorize_token = f"Bearer {jwt_token}" headers = {"Authorization": authorize_token} res = requests.get("https://api.upbit.com/v1/market/all?isDetails=false", headers=headers) print(res.())
-
-
获取指定市场行情 (Get Ticker):
此方法用于获取特定交易市场的实时行情数据。
API Endpoint:
/v1/ticker
参数:
-
markets
(必需): 以逗号分隔的市场代码列表 (例如: KRW-BTC,BTC-ETH)。
示例 (使用 Python):
import requests import jwt import uuid import hashlib access_key = "YOUR_ACCESS_KEY" secret_key = "YOUR_SECRET_KEY" payload = { "access_key": access_key, "nonce": str(uuid.uuid4()) } jwt_token = jwt.encode(payload, secret_key, algorithm="HS256") authorize_token = f"Bearer {jwt_token}" headers = {"Authorization": authorize_token} markets = "KRW-BTC,BTC-ETH" # 可以改成你想要查询的市场代码 res = requests.get(f"https://api.upbit.com/v1/ticker?markets={markets}", headers=headers) print(res.())
-
-
获取最近交易历史 (Get Trades):
此方法用于获取指定交易市场最近发生的交易记录。
API Endpoint:
/v1/trades/ticks
参数:
-
market
(必需): 市场代码 (例如: KRW-BTC)。 -
to
(可选): 查询的最后时间 (UTC 时间,YYYY-MM-DD HH:MM:SS)。 -
count
(可选): 返回结果的数量 (最大 200)。 -
cursor
(可选): 分页游标。
示例 (使用 Python):
import requests import jwt import uuid import hashlib access_key = "YOUR_ACCESS_KEY" secret_key = "YOUR_SECRET_KEY" payload = { "access_key": access_key, "nonce": str(uuid.uuid4()) } jwt_token = jwt.encode(payload, secret_key, algorithm="HS256") authorize_token = f"Bearer {jwt_token}" headers = {"Authorization": authorize_token} market = "KRW-BTC" # 可以改成你想要查询的市场代码 res = requests.get(f"https://api.upbit.com/v1/trades/ticks?market={market}&count=20", headers=headers) print(res.())
-
重要提示:
Upbit API 有请求频率限制。请参考 Upbit 官方 API 文档 (建议直接访问 Upbit 开发者网站)了解详细的限制规则,并合理控制您的 API 请求频率,避免触发限制。 在上面的示例代码中,请替换
YOUR_ACCESS_KEY
和
YOUR_SECRET_KEY
为您实际的 API 密钥。 Python 示例代码需要安装
requests
和
pyjwt
库。您可以使用
pip install requests pyjwt
命令进行安装。
1. 获取当前价格 (Ticker):
这是 Upbit API 中最常用的调用之一,用于获取指定交易对的实时成交价格信息。通过 Ticker API,开发者可以快速了解市场动态,为交易策略提供数据支持。
-
API 端点:
/v1/ticker
- 请求方法: GET
-
参数:
-
markets
(必需): 以逗号分隔的交易对代码列表。每个交易对代码遵循 Upbit 的命名规范,例如 "KRW-BTC" 代表韩元 (KRW) 计价的比特币 (BTC) 交易对,"KRW-ETH" 代表韩元计价的以太坊 (ETH) 交易对。一次请求可以查询多个交易对的价格信息。
-
-
响应数据:
返回一个 JSON 数组,每个元素包含一个交易对的ticker信息。重要的字段包括:
-
market
: 交易对代码 (例如: KRW-BTC) -
trade_date
: 最新成交日期 (UTC) -
trade_time
: 最新成交时间 (UTC) -
trade_date_kst
: 最新成交日期 (KST, 韩国标准时间) -
trade_time_kst
: 最新成交时间 (KST) -
trade_price
: 最新成交价格 -
prev_closing_price
: 昨日收盘价格 -
change
: 价格变动方向 ("RISE" 上涨, "FALL" 下跌, "EVEN" 不变) -
change_price
: 价格变动金额 -
signed_change_price
: 包含正负号的价格变动金额 -
change_rate
: 价格变动比例 -
signed_change_rate
: 包含正负号的价格变动比例 -
ask_bid
: 买卖状态 ("ASK" 卖出, "BID" 买入) -
trade_volume
: 最新成交量 -
signed_trade_volume
: 包含正负号的最新成交量 -
high_price
: 当日最高价 -
low_price
: 当日最低价 -
trade_timestamp
: 最新成交时间戳 (毫秒) -
acc_trade_price
: 累积成交价格 -
acc_trade_price_24h
: 24 小时累积成交价格 -
acc_trade_volume
: 累积成交量 -
acc_trade_volume_24h
: 24 小时累积成交量 -
highest_52_week_price
: 52 周最高价 -
highest_52_week_date
: 52 周最高价日期 -
lowest_52_week_price
: 52 周最低价 -
lowest_52_week_date
: 52 周最低价日期 -
timestamp
: 时间戳 (毫秒)
-
- 速率限制: Upbit API 有速率限制,请参考官方文档。过度请求可能导致 IP 被暂时屏蔽。
示例 (cURL):
curl "https://api.upbit.com/v1/ticker?markets=KRW-BTC,KRW-ETH"
示例 (Python):
import requests
import
url = "https://api.upbit.com/v1/ticker?markets=KRW-BTC,KRW-ETH"
try:
response = requests.get(url)
response.raise_for_status() # 检查是否有 HTTP 错误 (例如 404, 500)
data = response.()
for item in data:
print(f"市场: {item['market']}")
print(f"当前价格: {item['trade_price']}")
print(f"24小时累积成交量: {item['acc_trade_volume_24h']}") # 示例: 增加一个字段
print("---")
except requests.exceptions.RequestException as e:
print(f"发生错误: {e}")
except .JSONDecodeError as e:
print(f"JSON 解析错误: {e}")
解释:
-
requests.get(url)
: 使用 Python 的requests
库向 Upbit API 发送一个 HTTP GET 请求。该请求旨在从指定的url
获取数据。url
变量应包含 Upbit API 提供的有效端点,例如获取市场代码或交易信息的端点。此步骤是与 Upbit 服务器通信并请求数据的关键部分。 -
response.raise_for_status()
: 在接收到 Upbit API 的响应后,此方法会检查 HTTP 响应的状态码。如果状态码指示发生了错误(例如,400 客户端错误、404 未找到、500 服务器错误),则会引发一个HTTPError
异常。这允许程序立即捕获并处理潜在的 API 请求问题,防止程序在收到错误数据后继续执行。一个成功的请求通常返回一个 200 OK 状态码。 -
response.()
: 将 Upbit API 返回的响应数据(假定为 JSON 格式)解析为 Python 对象(通常是列表或字典)。JSON (JavaScript Object Notation) 是一种常用的数据交换格式,特别是在 Web API 中。解析后的数据可以方便地在 Python 代码中访问和操作,例如提取特定的市场代码或价格信息。如果响应不是有效的 JSON,则此方法会引发异常。 -
循环遍历
data
列表,打印每个交易对的市场代码和当前价格。从 Upbit API 获取的数据通常包含多个交易对的信息,这些信息被组织在一个列表中。循环遍历此列表允许程序访问每个交易对的数据。在循环内部,可以提取每个交易对的市场代码(例如 "KRW-BTC")和当前价格,并将其打印到控制台或其他输出目标。这使得用户能够实时监控 Upbit 交易所中不同交易对的价格变动。提取价格时需要注意 JSON 数据的 Key 值,价格可能对应 `trade_price` 或 `closing_price` 等 Key。
2. 获取最近成交历史 (Trades):
通过此接口,您可以检索指定交易对在Upbit交易所的最近成交历史记录。这些记录包含每笔交易的详细信息,例如成交价格、成交数量、成交时间(精确到毫秒级)以及买卖方向等关键数据。
-
API 端点:
/v1/trades/ticks
- 请求方法: GET
-
参数:
-
market
(必需): 指定要查询的交易对代码。 交易对代码由两个币种代码组成,例如KRW-BTC
表示韩元 (KRW) 计价的比特币 (BTC) 交易对。务必提供有效的Upbit交易对代码。 -
count
(可选): 指定要返回的成交记录数量。 默认值为100
,最大允许值为200
。 如果未提供此参数,API将返回最近的100条成交记录。 调整此参数可以控制单次API调用返回的数据量。 -
to
(可选): 用于分页的时间戳,允许您获取特定时间点之前的成交记录。 时间戳可以采用两种格式:-
YYYY-MM-DD HH:MM:SS
格式的日期时间字符串(例如:2023-10-27 10:00:00
)。 - Unix 时间戳(自1970年1月1日UTC以来的秒数)。
to
参数可以实现成交历史的分页查询,方便您按时间顺序遍历所有成交记录。 -
-
- 示例 (cURL):
以下 cURL 示例演示了如何获取 KRW-BTC 交易对的最近 20 条成交记录:
curl "https://api.upbit.com/v1/trades/ticks?market=KRW-BTC&count=20"
- 示例 (Python):
此 Python 示例展示了如何使用
requests
库调用 Upbit API 并解析返回的成交数据:
import requests
import
url = "https://api.upbit.com/v1/trades/ticks?market=KRW-BTC&count=20"
response = requests.get(url)
response.raise_for_status() # 检查请求是否成功
data = response.() # 将 JSON 响应转换为 Python 字典列表
for item in data:
print(f"成交时间: {item['timestamp']}")
print(f"成交价格: {item['trade_price']}")
print(f"成交数量: {item['trade_volume']}")
print(f"买/卖: {'卖出' if item['ask_bid'] == 'ASK' else '买入'}") # ASK 表示卖出,BID 表示买入
print("---")
解释:
-
timestamp
是一个重要的时间标识,它采用 Unix 时间戳格式。这种格式表示自 Unix 纪元(1970 年 1 月 1 日 00:00:00 UTC)以来经过的秒数。 为了提高数据的可读性和可用性,需要将此 Unix 时间戳转换为人类可理解的日期和时间格式。 转换过程可以使用各种编程语言(如 Python、JavaScript)中的内置函数或在线工具来完成,从而更容易理解交易发生的具体时间。 例如,在JavaScript中,可以使用`new Date(timestamp * 1000)` 将时间戳转换为Date对象,从而进行格式化输出。 -
分页检索成交记录时,
to
参数扮演着关键角色。 交易所或API通常限制单次请求返回的记录数量,使用分页机制可以有效地检索大量历史数据。 具体操作是,先获取最近的指定数量(例如 100 条)的成交记录,然后提取这批记录中最后一条记录的timestamp
值。 将此timestamp
值作为后续请求的to
参数,API 将返回早于此时间戳的成交记录,从而实现数据的连续分页获取。 这种方法允许开发者逐步获取完整的交易历史,避免一次性加载大量数据造成的性能问题。 例如,第一次请求未使用 `to` 参数,获取最新的 100 条数据。 假设这 100 条数据中,最旧一条的 `timestamp` 是 1678886400,那么下一次请求时,将 `to` 设置为 1678886400,就可以获取时间戳早于 1678886400 的 100 条数据。
3. 获取订单簿 (Orderbook):
通过订单簿API,您可以获取指定交易对的实时买单和卖单信息,从而深入了解市场深度和流动性。订单簿数据对于制定交易策略、评估市场情绪至关重要。
-
API 端点:
/v1/orderbook
- 请求方法: GET
-
参数:
-
markets
(必需): 以逗号分隔的交易对代码列表,用于指定需要查询的交易对。例如:KRW-BTC,KRW-ETH
。请确保交易对代码的准确性,以避免API调用失败。
-
- 响应: 响应数据为 JSON 格式,包含每个交易对的订单簿信息。每个交易对的订单簿信息包含多个买单 (bids) 和卖单 (asks),按照价格排序。每个订单包含价格和数量。
-
数据结构:
订单簿数据通常包含以下字段:
-
market
: 交易对代码。 -
orderbook_units
: 订单簿单元列表,包含买单和卖单信息。 -
bid_price
: 买单价格。 -
bid_size
: 买单数量。 -
ask_price
: 卖单价格。 -
ask_size
: 卖单数量。
-
- 频率限制: 请注意API的使用频率限制,避免由于频繁请求而被限制访问。 建议合理设置请求间隔。
示例 (cURL):
curl "https://api.upbit.com/v1/orderbook?markets=KRW-BTC,KRW-ETH"
示例 (Python):
import requests
url = "https://api.upbit.com/v1/orderbook?markets=KRW-BTC,KRW-ETH"
try:
response = requests.get(url)
response.raise_for_status() # 检查请求是否成功
data = response.()
for market_data in data:
print(f"市场: {market_data['market']}")
print("买单:")
for bid in market_data['orderbook_units']:
print(f" 价格: {bid['bid_price']}, 数量: {bid['bid_size']}")
print("卖单:")
for ask in market_data['orderbook_units']:
print(f" 价格: {ask['ask_price']}, 数量: {ask['ask_size']}")
print("---")
except requests.exceptions.RequestException as e:
print(f"请求错误: {e}")
except ValueError as e:
print(f"JSON解码错误: {e}")
注意事项:
-
请务必处理API请求可能出现的异常情况,例如网络错误、JSON解码错误等。
requests.exceptions.RequestException
可以捕获多种请求相关的错误。 -
response.raise_for_status()
会在响应状态码表示错误时 (例如 404, 500) 抛出异常,从而方便错误处理。 - 在实际应用中,您可能需要更详细地处理订单簿数据,例如计算加权平均价格、绘制深度图等。
解释:
-
orderbook_units
包含了市场深度数据,即买单(Bid)和卖单(Ask)的信息汇总。它反映了在特定时间点市场上所有未成交的买卖订单。 -
买单信息(Bid):
-
bid_price
:代表买方愿意购买加密货币的最高价格。市场上通常存在多个买单,bid_price
通常指所有买单中价格最高的那个。这个价格也是潜在的立即卖出价,是买方愿意接受的最高支付价格。 -
bid_size
:表示以bid_price
价格等待成交的买单数量,通常以加密货币单位计。这个数值反映了在该价位上的购买需求强度。
-
-
卖单信息(Ask):
-
ask_price
:表示卖方愿意出售加密货币的最低价格。市场上通常存在多个卖单,ask_price
通常指所有卖单中价格最低的那个。这个价格也是潜在的立即买入价,是卖方愿意接受的最低出售价格。 -
ask_size
:表示以ask_price
价格等待成交的卖单数量,通常以加密货币单位计。这个数值反映了在该价位上的出售意愿强度。
-
-
市场深度解读:
通过分析
orderbook_units
中的买单和卖单数据,可以了解市场当前的供需关系和价格压力。例如,如果买单数量远大于卖单数量,可能预示着价格上涨的压力;反之,如果卖单数量远大于买单数量,可能预示着价格下跌的压力。需要注意的是,市场深度数据只是影响价格走势的因素之一,其他因素,如市场情绪、新闻事件等,也会对价格产生影响。
4. 获取分时线数据 (Candlestick):
获取指定交易对的 OHLCV(Open, High, Low, Close, Volume,开盘价、最高价、最低价、收盘价、成交量)分时线数据,是进行技术分析的重要步骤。 通过分析历史 K 线数据,交易者可以识别趋势、形态以及潜在的买卖信号。 Upbit API 提供了丰富的 K 线数据粒度,以满足不同时间框架的技术分析需求。
这些数据粒度包括:
- 分钟级别: 1 分钟、5 分钟、15 分钟、30 分钟 K 线数据,适用于短线交易和日内交易策略。
- 小时级别: 1 小时、4 小时 K 线数据,适用于中短线交易,可以观察更长时间周期内的价格波动。
- 日级别: 1 日 K 线数据,是分析长期趋势的基础,适用于长线价值投资者和趋势跟踪者。
- 周/月级别: 1 周、1 月 K 线数据,用于分析超长期的价格走势,帮助投资者把握宏观趋势。
通过灵活选择不同的时间周期,用户可以根据自身的交易风格和分析需求,定制个性化的分析方案。 例如,短线交易者可能会更关注 1 分钟或 5 分钟 K 线图上的价格波动,而长线投资者则更倾向于分析日线、周线甚至月线图上的趋势变化。
API 端点:
- K线数据 API 端点: 用于获取不同时间周期的加密货币K线数据。
-
1 分钟:
/v1/candles/minutes/1
- 提供每分钟K线数据,适用于高频交易和短线分析。 -
5 分钟:
/v1/candles/minutes/5
- 提供每 5 分钟K线数据,适用于日内交易。 -
15 分钟:
/v1/candles/minutes/15
- 提供每 15 分钟K线数据,适用于短线趋势分析。 -
30 分钟:
/v1/candles/minutes/30
- 提供每 30 分钟K线数据,适用于日内波段交易。 -
1 小时:
/v1/candles/minutes/60
- 提供每小时K线数据,适用于中短线趋势分析。 -
4 小时:
/v1/candles/minutes/240
- 提供每 4 小时K线数据,适用于中线趋势分析。 -
1 日:
/v1/candles/days
- 提供每日K线数据,适用于中长线趋势分析和价值投资。 -
1 周:
/v1/candles/weeks
- 提供每周K线数据,适用于长线趋势分析和长期投资。 -
1 月:
/v1/candles/months
- 提供每月K线数据,适用于超长线趋势分析和宏观经济研究。
参数:
-
market
(必需): 交易对代码,指定需要查询 K 线数据的交易市场。 格式为交易所支持的交易对代码, 例如:KRW-BTC
(韩元-比特币)。该参数必须提供,否则API将无法确定需要返回哪个交易市场的历史数据。 -
count
(可选): 返回的 K 线数量。 默认为100
,最大值为200
。 如果不指定此参数,API将默认返回最新的100个K线数据。 请求超过最大数量将被截断。 -
to
(可选): 用于分页的时间戳,允许用户获取指定时间点之前的历史 K 线数据。 参数格式支持两种形式:YYYY-MM-DD HH:MM:SS
格式的日期时间字符串,例如:2023-10-27 10:30:00
;或者 Unix 时间戳(单位为秒)。 通过调整to
参数的值,可以遍历更早的历史数据。
示例 (cURL, 获取 1 分钟 K 线):
-
使用 cURL 从 Upbit API 获取指定市场(例如 KRW-BTC)最近 30 个 1 分钟 K 线数据。 请求 URL 包含市场代码和返回的数据条数。
bash curl "https://api.upbit.com/v1/candles/minutes/1?market=KRW-BTC&count=30"
该命令会向 Upbit API 发送一个 GET 请求,并返回一个 JSON 数组,其中包含每个 1 分钟 K 线的详细信息。
- 示例 (Python, 获取日 K 线):
使用 Python 和 requests 库获取 Upbit 交易所的日 K 线数据。代码示例展示了如何构建 API 请求、处理响应以及解析返回的 JSON 数据。
python
import requests
url = "https://api.upbit.com/v1/candles/days?market=KRW-BTC&count=30"
response = requests.get(url)
response.raise_for_status() # 检查请求是否成功
data = response.()
for item in data:
print(f"开盘时间 (韩国标准时间): {item['candle_date_time_kst']}")
print(f"开盘价: {item['opening_price']}")
print(f"最高价: {item['high_price']}")
print(f"最低价: {item['low_price']}")
print(f"收盘价: {item['trade_price']}")
print(f"成交量: {item['candle_acc_trade_volume']}")
print("---")
代码首先导入 requests 库。 然后,它定义了 Upbit API 的 URL,用于获取 KRW-BTC 市场的日 K 线数据,并请求最近 30 天的数据。
接下来,使用 requests.get() 函数发送 GET 请求到 API 端点。 response.raise_for_status() 方法用于检查响应状态码,如果请求失败(例如,返回 404 或 500 错误),则会引发 HTTPError 异常。
如果请求成功,则使用 response.() 方法将响应内容解析为 Python 字典或列表。然后,代码遍历数据列表,并提取每个 K 线的开盘时间(韩国标准时间 KST)、开盘价、最高价、最低价、收盘价和成交量等信息。
每个字段的值都使用 f-string 格式化字符串打印到控制台。
candle_date_time_kst
提供韩国标准时间。
解释:
-
candle_date_time_kst
代表K线开始形成的时间戳,以韩国标准时间 (KST) 表示。它是该K线周期内的第一个交易时间点,是分析时间序列数据的关键。精确的时间信息对于回溯测试、实时交易和模式识别至关重要。 -
opening_price
是该K线周期内的第一个交易价格,即开盘价。它反映了市场在该时间段开始时的普遍情绪。high_price
是该K线周期内达到的最高价格,体现了买方力量在该周期内的峰值。low_price
是该K线周期内达到的最低价格,反映了卖方力量在该周期内的谷底。trade_price
是该K线周期内的最后一个交易价格,通常被认为是收盘价。它代表了市场在该时间段结束时的最终价值评估。 这些价格数据共同描绘了价格在特定时间段内的波动范围,是技术分析的基础。 -
candle_acc_trade_volume
是指在整个K线周期内累积的总交易量。它反映了市场参与程度和交易活跃度。成交量通常与价格变动结合使用,以评估价格趋势的强度和可靠性。高成交量伴随价格上涨可能表明强劲的上涨趋势,而低成交量可能表明趋势较弱或即将反转。
身份验证 (Authentication)
为了保障您的账户安全,Upbit API对部分敏感操作,如获取账户信息、下单交易等,强制要求进行身份验证。 Upbit 采用业界标准的 JWT (JSON Web Token) 技术来实现API请求的身份验证和授权管理。 使用 JWT 允许服务器验证客户端身份,而无需在每个请求中都发送用户名和密码,从而提高效率和安全性。
要使用Upbit API进行身份验证,您需要首先在Upbit官方网站上创建API密钥,具体包括: 访问密钥 (Access Key) :用于标识您的应用程序或账户,相当于用户名。 安全密钥 (Secret Key) :用于生成和验证JWT签名,务必妥善保管,切勿泄露给任何第三方,相当于密码。
在创建API密钥后,您需要使用Access Key和Secret Key生成JWT。 然后,将生成的JWT包含在API请求的Authorization头部中,服务器将验证JWT的有效性,从而确认您的身份并授权访问相应的API端点。
请注意,Upbit API对API密钥的使用频率和权限范围有一定的限制。 您可以在Upbit官方网站的API文档中查阅详细的API密钥管理和使用指南。
身份验证步骤:
- 生成 JWT Token: 使用您的 Access Key 和 Secret Key 生成 JSON Web Token (JWT)。Upbit API 要求所有受保护的端点都通过 JWT 进行身份验证。生成过程涉及使用您的密钥对包含声明(claims)的payload进行签名。 Upbit 官方文档和开发者资源提供了多种编程语言(如 Python, Java, Go 等)的示例代码和库,方便您快速生成符合 Upbit 规范的 JWT Token。建议参考官方示例,以确保兼容性和安全性。特别注意密钥的保密性,避免泄露。
-
添加 Authorization Header:
在向 Upbit API 发送任何需要身份验证的请求时,必须将生成的 JWT Token 添加到 HTTP 请求的
Authorization
Header 中。Header 的格式必须严格遵守Bearer
方案,即Authorization: Bearer <JWT Token>
。 其中<JWT Token>
替换为您实际生成的 JWT 字符串。如果 Authorization Header 格式不正确或者 JWT Token 无效,API 将返回身份验证错误。
以下 Python 代码示例演示了如何生成 JWT Token,并将其用于构造 Authorization Header。 请务必替换
YOUR_ACCESS_KEY
和
YOUR_SECRET_KEY
为您实际的 Upbit API 密钥。
import jwt
import uuid
import hashlib
from urllib.parse import urlencode
access_key = "YOUR_ACCESS_KEY" # 替换为你的 Access Key
secret_key = "YOUR_SECRET_KEY" # 替换为你的 Secret Key
# 需要传递到API的查询参数(根据实际API端点进行修改)
query = {
'market': 'KRW-BTC',
'volume': 1.0,
'price': 1000.0,
'side': 'bid',
'ord_type': 'limit',
'identifier': str(uuid.uuid4())
}
query_string = urlencode(query).encode()
m = hashlib.sha512()
m.update(query_string)
query_hash = m.hexdigest()
# JWT payload,包含访问密钥、随机数和查询哈希
payload = {
'access_key': access_key,
'nonce': str(uuid.uuid4()), # 确保每次请求都生成新的 UUID
'query_hash': query_hash,
'query_hash_alg': 'SHA512',
}
jwt_token = jwt.encode(payload, secret_key, algorithm='HS256')
authorize_token = f'Bearer {jwt_token}'
print(authorize_token) # 输出 Authorization Header 的值
重要提示:
-
access_key
和secret_key
是访问 Upbit API 的凭证,务必妥善保管,切勿泄露。 -
nonce
(随机数) 必须是唯一的,每次生成 JWT Token 都应使用新的 UUID。这有助于防止重放攻击。 -
query_hash
是对请求参数进行 SHA512 哈希后的值,用于验证请求的完整性。并非所有 API 端点都需要 query 参数。请查阅 Upbit API 文档以确定特定端点是否需要以及需要哪些参数。不需要 query 参数时,query_hash
和query_hash_alg
字段可以省略。 -
示例代码使用
HS256
算法对 JWT 进行签名。这是 Upbit 推荐的算法。 - 请仔细阅读 Upbit 官方 API 文档,了解有关身份验证和请求格式的更多详细信息。
使用
authorize_token
发送请求
使用
authorize_token
构建 HTTP 请求头是与 Upbit API 进行身份验证的关键步骤。你需要创建一个包含
Authorization
字段的字典,并将
authorize_token
的值赋给它。该请求头将用于后续的 API 请求,以验证你的身份并授权你访问受保护的资源。
headers = {"Authorization": authorize_token}
例如,要调用 Upbit 的下单接口,你需要构建一个包含
Authorization
请求头的
POST
请求。下单接口的 URL 为
https://api.upbit.com/v1/orders
。务必使用正确的 URL,否则请求将无法到达目标接口。
url = "https://api.upbit.com/v1/orders" #下单接口
发送带有身份验证信息的
POST
请求。
requests.post()
方法接受 URL、请求头和请求数据作为参数。
query
变量包含了下单所需的参数,例如市场代码、订单类型、数量和价格。检查
response
对象的状态码,以确认请求是否成功。状态码
200
表示成功,其他状态码可能表示错误。
response = requests.post(url, headers=headers, data=query)
print(response.text)
response.text
属性包含了服务器返回的 JSON 响应字符串。你可以使用 Python 的
.loads()
方法将 JSON 字符串转换为 Python 字典,以便更方便地访问响应数据。 检查响应内容,确认订单是否成功创建,并获取订单的相关信息,例如订单 UUID 和交易费用。
重要提示:
- Secret Key 安全至上: 务必采取最严格的安全措施存储您的 Secret Key。 可以考虑使用硬件钱包、加密的密钥管理工具或离线存储等方式。 绝对不要以任何形式泄露给他人,包括通过电子邮件、聊天或未经加密的文本文件。 遗失或泄露 Secret Key 将导致您的账户面临严重的资金风险。
- 精读 Upbit API 文档: 在开始使用 Upbit API 之前,请务必仔细阅读官方 Upbit API 文档。 重点理解每个端点的功能、请求方法 (如 GET, POST, PUT, DELETE)、必要的请求参数、数据类型、返回值的含义以及错误代码的解释。 确保您完全了解 API 的运作方式,避免因参数错误或理解偏差导致请求失败或数据错误。 文档是您使用 API 的最权威指南。
- 遵守 API 使用规范: Upbit API 对请求频率和数据量都有明确的限制,目的是为了保障服务器的稳定性和公平性。 请务必遵守这些限制,控制您的请求频率,避免超过限制导致 IP 被封禁。 如果您的应用需要高频率的数据更新,请考虑使用 WebSocket API 或批量请求等方式来优化您的请求策略。 关注 Upbit 官方公告,了解 API 使用规范的最新变动。
通过本文的介绍,您应该对如何使用 Upbit API 获取市场数据有了更全面的认识。 利用 Upbit API,您可以构建各种自定义的应用程序,例如自动化交易机器人、高级数据分析工具、个性化行情监控系统等,从而更有效地分析加密货币市场,抓住投资机会,并提升您的交易效率。 还可以将数据与其他来源的数据进行整合分析,获得更深入的市场洞察。