越蔓蔓 发表于 2025-6-1 21:31:52

Java、Python等接入方式对接股票数据源API接口

为了创建一个Python项目来对接StockTV的API接口,我们可以使用requests库来发送HTTP请求,并使用websocket-client库来处理WebSocket连接。以下是一个简单的Python项目结构,展示了如何对接这些API接口。
项目结构

stocktv_api/

├── stocktv_api/
│   ├── __init__.py
│   ├── stock.py
│   ├── forex.py
│   ├── futures.py
│   ├── crypto.py
│   └── utils.py

├── tests/
│   ├── __init__.py
│   ├── test_stock.py
│   ├── test_forex.py
│   ├── test_futures.py
│   └── test_crypto.py

├── requirements.txt
└── README.md1. 安装依赖

首先,创建一个requirements.txt文件,列出项目所需的依赖:
requests
websocket-client然后,使用以下命令安装依赖:
pip install -r requirements.txt2. 创建基础工具类

在stocktv_api/utils.py中,创建一个基础工具类来处理API请求:
import requests

class StockTVAPI:
    def __init__(self, api_key):
      self.api_key = api_key
      self.base_url = "https://api.stocktv.top"

    def _get(self, endpoint, params=None):
      if params is None:
            params = {}
      params['key'] = self.api_key
      response = requests.get(f"{self.base_url}/{endpoint}", params=params)
      response.raise_for_status()
      return response.json()

    def _ws_connect(self, endpoint):
      import websocket
      ws_url = f"wss://ws-api.stocktv.top/{endpoint}?key={self.api_key}"
      ws = websocket.create_connection(ws_url)
      return ws3. 实现股票API

在stocktv_api/stock.py中,实现股票相关的API:
from .utils import StockTVAPI

class StockAPI(StockTVAPI):
    def get_stock_list(self, country_id, page_size=10, page=1):
      endpoint = "stock/stocks"
      params = {
            "countryId": country_id,
            "pageSize": page_size,
            "page": page
      }
      return self._get(endpoint, params)

    def get_indices(self, country_id, flag=None):
      endpoint = "stock/indices"
      params = {
            "countryId": country_id,
            "flag": flag
      }
      return self._get(endpoint, params)

    def get_kline(self, pid, interval):
      endpoint = "stock/kline"
      params = {
            "pid": pid,
            "interval": interval
      }
      return self._get(endpoint, params)

    def get_ipo_calendar(self, country_id):
      endpoint = "stock/getIpo"
      params = {
            "countryId": country_id
      }
      return self._get(endpoint, params)

    def get_updown_list(self, country_id, type=1):
      endpoint = "stock/updownList"
      params = {
            "countryId": country_id,
            "type": type
      }
      return self._get(endpoint, params)

    def get_company_info(self, country_id, page_size=10, page=1):
      endpoint = "stock/companies"
      params = {
            "countryId": country_id,
            "pageSize": page_size,
            "page": page
      }
      return self._get(endpoint, params)

    def get_company_info_by_url(self, url):
      endpoint = "stock/companyUrl"
      params = {
            "url": url
      }
      return self._get(endpoint, params)

    def get_news(self, page_size=10, page=1):
      endpoint = "stock/news"
      params = {
            "pageSize": page_size,
            "page": page
      }
      return self._get(endpoint, params)

    def connect_websocket(self):
      return self._ws_connect("connect")4. 实现外汇API

在stocktv_api/forex.py中,实现外汇相关的API:
from .utils import StockTVAPI

class ForexAPI(StockTVAPI):
    def get_currency_list(self):
      endpoint = "market/currencyList"
      return self._get(endpoint)

    def get_real_time_rates(self, country_type=None):
      endpoint = "market/currency"
      params = {
            "countryType": country_type
      }
      return self._get(endpoint, params)

    def get_today_market(self, symbol):
      endpoint = "market/todayMarket"
      params = {
            "symbol": symbol
      }
      return self._get(endpoint, params)

    def get_spark_data(self, symbol, interval="5m"):
      endpoint = "market/spark"
      params = {
            "symbol": symbol,
            "interval": interval
      }
      return self._get(endpoint, params)

    def get_chart_data(self, symbol, interval="5m", start_time=None, end_time=None):
      endpoint = "market/chart"
      params = {
            "symbol": symbol,
            "interval": interval,
            "startTime": start_time,
            "endTime": end_time
      }
      return self._get(endpoint, params)5. 实现期货API

在stocktv_api/futures.py中,实现期货相关的API:
from .utils import StockTVAPI

class FuturesAPI(StockTVAPI):
    def get_futures_list(self):
      endpoint = "futures/list"
      return self._get(endpoint)

    def get_futures_market(self, symbol):
      endpoint = "futures/querySymbol"
      params = {
            "symbol": symbol
      }
      return self._get(endpoint, params)

    def get_futures_kline(self, symbol, interval):
      endpoint = "futures/kline"
      params = {
            "symbol": symbol,
            "interval": interval
      }
      return self._get(endpoint, params)6. 实现加密货币API

在stocktv_api/crypto.py中,实现加密货币相关的API:
from .utils import StockTVAPI

class CryptoAPI(StockTVAPI):
    def get_coin_info(self):
      endpoint = "crypto/getCoinInfo"
      return self._get(endpoint)

    def get_coin_list(self, start=1, limit=1000):
      endpoint = "crypto/getCoinList"
      params = {
            "start": start,
            "limit": limit
      }
      return self._get(endpoint, params)

    def get_ticker_price(self, symbols):
      endpoint = "crypto/tickerPrice"
      params = {
            "symbols": symbols
      }
      return self._get(endpoint, params)

    def get_last_price(self, symbols):
      endpoint = "crypto/lastPrice"
      params = {
            "symbols": symbols
      }
      return self._get(endpoint, params)

    def get_klines(self, symbol, interval):
      endpoint = "crypto/getKlines"
      params = {
            "symbol": symbol,
            "interval": interval
      }
      return self._get(endpoint, params)

    def get_trades(self, symbol):
      endpoint = "crypto/getTrades"
      params = {
            "symbol": symbol
      }
      return self._get(endpoint, params)7. 测试代码

在tests/目录下,编写测试代码来验证各个API的功能。例如,test_stock.py可以包含以下内容:
import unittest
from stocktv_api.stock import StockAPI

class TestStockAPI(unittest.TestCase):
    def setUp(self):
      self.api_key = "your_api_key_here"
      self.stock_api = StockAPI(self.api_key)

    def test_get_stock_list(self):
      response = self.stock_api.get_stock_list(country_id=14)
      self.assertIn("data", response)

    def test_get_indices(self):
      response = self.stock_api.get_indices(country_id=14)
      self.assertIn("data", response)

    def test_get_kline(self):
      response = self.stock_api.get_kline(pid=7310, interval="PT1M")
      self.assertIn("data", response)

if __name__ == "__main__":
    unittest.main()8. 运行测试

使用以下命令运行测试:
python -m unittest discover tests9. 编写README.md

最后,编写一个README.md文件,描述项目的用途、安装步骤和使用方法。
# StockTV API Python Client

This is a Python client for the StockTV API, providing access to global stock, forex, futures, and cryptocurrency data.

## Installation

```bash
pip install -r requirements.txtUsage

from stocktv_api.stock import StockAPI

api_key = "your_api_key_here"
stock_api = StockAPI(api_key)

# Get stock list
stock_list = stock_api.get_stock_list(country_id=14)
print(stock_list)Testing

python -m unittest discover tests总结

这个项目结构提供了一个基本的框架来对接StockTV的API接口。你可以根据需要扩展和修改代码,添加更多的功能和测试。
对接代码:https://github.com/CryptoRzz/stocktv-api-py

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Java、Python等接入方式对接股票数据源API接口