php对接股票、期货数据源API接口

以下是使用 PHP 对接 StockTV API 的项目实现。我们将使用 cURL 进行 HTTP 请求,并使用 Ratchet 处理 WebSocket 连接。


项目结构

stocktv-api-php/
│
├── src/
│   ├── StockAPI.php
│   ├── ForexAPI.php
│   ├── FuturesAPI.php
│   ├── CryptoAPI.php
│   └── ApiClient.php
│
├── tests/
│   ├── StockAPITest.php
│   ├── ForexAPITest.php
│   ├── FuturesAPITest.php
│   └── CryptoAPITest.php
│
├── composer.json
├── README.md
└── index.php

1. 安装依赖

在项目根目录下创建 composer.json 文件,并添加以下内容:

json 复制代码
{
    "name": "yourname/stocktv-api-php",
    "description": "PHP client for StockTV API",
    "require": {
        "php": ">=7.4",
        "ext-curl": "*",
        "ext-json": "*",
        "ratchet/pawl": "^0.4.1"
    },
    "autoload": {
        "psr-4": {
            "StockTV\\": "src/"
        }
    },
    "require-dev": {
        "phpunit/phpunit": "^9.5"
    }
}

运行以下命令安装依赖:

bash 复制代码
composer install

2. 创建基础工具类

src/ApiClient.php 中,创建一个基础工具类来处理 API 请求:

php 复制代码
<?php

namespace StockTV;

class ApiClient
{
    private $apiKey;
    private $baseUrl = "https://api.stocktv.top";

    public function __construct(string $apiKey)
    {
        $this->apiKey = $apiKey;
    }

    protected function get(string $endpoint, array $params = []): array
    {
        $url = $this->baseUrl . "/" . $endpoint . "?key=" . $this->apiKey;
        if (!empty($params)) {
            $url .= "&" . http_build_query($params);
        }

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $response = curl_exec($ch);
        curl_close($ch);

        return json_decode($response, true);
    }
}

3. 实现股票 API

src/StockAPI.php 中,实现股票相关的 API:

php 复制代码
<?php

namespace StockTV;

class StockAPI extends ApiClient
{
    public function getStockList(int $countryId, int $pageSize = 10, int $page = 1): array
    {
        return $this->get("stock/stocks", [
            "countryId" => $countryId,
            "pageSize"  => $pageSize,
            "page"      => $page
        ]);
    }

    public function getIndices(int $countryId, ?string $flag = null): array
    {
        $params = ["countryId" => $countryId];
        if ($flag) {
            $params["flag"] = $flag;
        }
        return $this->get("stock/indices", $params);
    }

    public function getKline(int $pid, string $interval): array
    {
        return $this->get("stock/kline", [
            "pid"      => $pid,
            "interval" => $interval
        ]);
    }
}

4. 实现外汇 API

src/ForexAPI.php 中,实现外汇相关的 API:

php 复制代码
<?php

namespace StockTV;

class ForexAPI extends ApiClient
{
    public function getCurrencyList(): array
    {
        return $this->get("market/currencyList");
    }

    public function getRealTimeRates(?string $countryType = null): array
    {
        $params = [];
        if ($countryType) {
            $params["countryType"] = $countryType;
        }
        return $this->get("market/currency", $params);
    }
}

5. 实现期货 API

src/FuturesAPI.php 中,实现期货相关的 API:

php 复制代码
<?php

namespace StockTV;

class FuturesAPI extends ApiClient
{
    public function getFuturesList(): array
    {
        return $this->get("futures/list");
    }

    public function getFuturesMarket(string $symbol): array
    {
        return $this->get("futures/querySymbol", [
            "symbol" => $symbol
        ]);
    }
}

6. 实现加密货币 API

src/CryptoAPI.php 中,实现加密货币相关的 API:

php 复制代码
<?php

namespace StockTV;

class CryptoAPI extends ApiClient
{
    public function getCoinInfo(): array
    {
        return $this->get("crypto/getCoinInfo");
    }

    public function getTickerPrice(string $symbols): array
    {
        return $this->get("crypto/tickerPrice", [
            "symbols" => $symbols
        ]);
    }
}

7. WebSocket 支持

使用 Ratchet 库实现 WebSocket 连接:

php 复制代码
<?php

require 'vendor/autoload.php';

use Ratchet\Client\WebSocket;
use Ratchet\Client\Connector;
use React\EventLoop\Factory;

$loop = Factory::create();
$connector = new Connector($loop);

$apiKey = "your_api_key_here";
$wsUrl = "wss://ws-api.stocktv.top/connect?key=" . $apiKey;

$connector($wsUrl)->then(function (WebSocket $conn) {
    $conn->on('message', function ($msg) use ($conn) {
        echo "Received: {$msg}\n";
    });

    $conn->on('close', function ($code = null, $reason = null) {
        echo "Connection closed ({$code} - {$reason})\n";
    });
}, function (\Exception $e) use ($loop) {
    echo "Could not connect: {$e->getMessage()}\n";
    $loop->stop();
});

$loop->run();

8. 测试代码

tests/StockAPITest.php 中,编写测试代码:

php 复制代码
<?php

use PHPUnit\Framework\TestCase;
use StockTV\StockAPI;

class StockAPITest extends TestCase
{
    private $stockAPI;

    protected function setUp(): void
    {
        $this->stockAPI = new StockAPI("your_api_key_here");
    }

    public function testGetStockList(): void
    {
        $response = $this->stockAPI->getStockList(14, 10, 1);
        $this->assertArrayHasKey("data", $response);
    }
}

运行测试:

bash 复制代码
./vendor/bin/phpunit tests

9. 使用示例

index.php 中,编写示例代码:

php 复制代码
<?php

require 'vendor/autoload.php';

use StockTV\StockAPI;

$apiKey = "your_api_key_here";
$stockAPI = new StockAPI($apiKey);

try {
    $stockList = $stockAPI->getStockList(14, 10, 1);
    print_r($stockList);
} catch (Exception $e) {
    echo "Error: " . $e->getMessage();
}

10. README.md

在项目根目录下创建 README.md 文件:

markdown 复制代码
# StockTV API PHP Client

A PHP client for accessing StockTV's global financial data APIs.

## Installation

```bash
composer install

Usage

php 复制代码
use StockTV\StockAPI;

$apiKey = "your_api_key_here";
$stockAPI = new StockAPI($apiKey);

$stockList = $stockAPI->getStockList(14, 10, 1);
print_r($stockList);

总结

这个 PHP 项目提供了对 StockTV API 的完整支持,包括股票、外汇、期货和加密货币数据。通过模块化设计和清晰的代码结构,开发者可以轻松扩展和集成到自己的项目中。

对接代码:https://github.com/CryptoRzz/stocktv-api-py