You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP调用CoinExchange API获取匹配MarketID及币种信息问题

解决方案:匹配CoinExchange API中的有效MarketID并输出交易对信息

需求回顾

从https://www.coinexchange.io/api/v1/getmarketsummaries获取可用的MarketID,检查这些ID是否存在于https://www.coinexchange.io/api/v1/getmarkets接口返回结果中,若存在则输出对应的MarketAssetCode和BaseCurrencyCode。

原代码的问题点

你的代码逻辑方向是对的,但有个核心效率问题:每次遍历getmarketsummaries的结果时,都会重复调用一次getmarkets接口,这会触发大量不必要的API请求,不仅运行速度慢,还很容易触发平台的限流机制,导致请求失败。

优化后的代码

<?php
include 'pappu.php';

// 先一次性获取所有市场数据,避免重复请求API
$marketsGrab = ngegrab('https://www.coinexchange.io/api/v1/getmarkets');
$marketsJson = json_decode($marketsGrab);

// 将市场数据整理成以MarketID为键的关联数组,方便后续快速匹配
$marketsMap = [];
if ($marketsJson && isset($marketsJson->result)) {
    foreach ($marketsJson->result as $market) {
        $marketsMap[$market->MarketID] = [
            'asset' => $market->MarketAssetCode,
            'base' => $market->BaseCurrencyCode
        ];
    }
}

// 获取市场摘要数据
$summariesGrab = ngegrab('https://www.coinexchange.io/api/v1/getmarketsummaries');
$summariesJson = json_decode($summariesGrab);

// 遍历摘要中的MarketID,匹配已缓存的市场数据
if ($summariesJson && isset($summariesJson->result)) {
    foreach ($summariesJson->result as $summary) {
        $marketId = $summary->MarketID;
        if (isset($marketsMap[$marketId])) {
            echo "MarketID: {$marketId}<br>";
            echo "交易对: {$marketsMap[$marketId]['asset']}/{$marketsMap[$marketId]['base']}<br><br>";
        }
    }
}
?>

代码优化说明

  • 减少API请求:仅调用两次API(一次获取全量市场数据,一次获取市场摘要),彻底避免了原代码中循环请求的低效问题
  • 快速匹配:将getmarkets的结果转成以MarketID为键的关联数组,后续匹配时直接通过键查找,时间复杂度从O(n)降到O(1),匹配速度大幅提升
  • 增强鲁棒性:增加了API返回数据的存在性检查,避免因接口返回异常导致的脚本报错
  • 优化输出格式:调整了输出内容的排版,让结果可读性更强

内容的提问来源于stack exchange,提问作者Praburam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:46:23