如何同时发起多个CoinMarketCap API调用以降低信用点消耗
CoinMarketCap多接口并发调用方案
通过PHP内置的curl_multi系列函数可实现多接口并行请求,无需串行等待单个请求完成即可同时发起所有目标接口调用。
注意事项
- 并发请求仅减少请求耗时,不会抵扣接口本身的credit消耗:你列出的4个接口单次调用总消耗为
1+1+25+1=28 credit,请根据你的套餐额度调整调用频率 /v2/cryptocurrency/info接口必须传入id或symbol参数指定要查询的币种,否则会返回错误
完整实现代码
// 替换为你自己的CMC API Key const CMC_API_KEY = '*********-****-****-****-***********'; $headers = [ 'Accepts: application/json', 'X-CMC_PRO_API_KEY: ' . CMC_API_KEY ]; // 定义所有需要请求的接口配置 $requests = [ // 1. 热门趋势币种接口 [ 'url' => 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/trending/latest', 'params' => [] ], // 2. 涨跌榜接口 [ 'url' => 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/trending/gainers-losers', 'params' => [] ], // 3. 全币种列表5000条 [ 'url' => 'https://pro-api.coinmarketcap.com/cryptocurrency/listings/latest', 'params' => [ 'start' => '1', 'limit' => '5000', 'convert' => 'USD' ] ], // 4. 币种详情接口 示例查BTC、ETH,按需替换 [ 'url' => 'https://pro-api.coinmarketcap.com/v2/cryptocurrency/info', 'params' => [ 'symbol' => 'BTC,ETH' ] ] ]; // 初始化多句柄 $mh = curl_multi_init(); $curlHandles = []; // 批量初始化单个curl请求 foreach ($requests as $index => $req) { $qs = http_build_query($req['params']); $requestUrl = $req['url'] . ($qs ? '?' . $qs : ''); $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => $requestUrl, CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => 1, CURLOPT_SSL_VERIFYPEER => false // 本地调试可开启,生产环境建议关闭 ]); curl_multi_add_handle($mh, $ch); $curlHandles[$index] = $ch; } // 执行所有并发请求 $running = null; do { $status = curl_multi_exec($mh, $running); } while ($status === CURLM_CALL_MULTI_PERFORM || $running); // 逐个获取响应结果 $responses = []; foreach ($curlHandles as $index => $ch) { $responses[$index] = json_decode(curl_multi_getcontent($ch), true); curl_multi_remove_handle($mh, $ch); curl_close($ch); } curl_multi_close($mh); // 输出结果按需处理 print_r($responses);
上述代码会同时发起4个接口请求,所有请求完成后统一返回结果数组,数组顺序和你定义的接口顺序一致。
内容的提问来源于stack exchange,提问作者Maduro
相关产品推荐
相关产品推荐

