cron — сохранение данных API в файл переполнение стека

Я получаю данные о цене и объеме от шести бирж биткойнов, чтобы сделать конвертер цен, но он очень медленный, потому что каждый раз, когда вы загружаете страницу, он должен запрашивать данные на всех этих сайтах.
Я хочу запускать что-то в фоновом режиме каждую 1 минуту, чтобы получить данные и сохранить их в файле на сервере, а затем, когда пользователь заходит на сайт, он просто извлекает его из файла с уже полученными данными API. Я пытался использовать file_put_contents безрезультатно.
Вот код, который я получил до сих пор:

<?php

function getData($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$rawData = curl_exec($curl);
curl_close($curl);
return json_decode($rawData, true);
}


//BTC Volume LocalBitcoins
$BTCVolumeLocal = getData('https://localbitcoins.com/bitcoinaverage/ticker-all-currencies/');
$LocalVolume = $BTCVolumeLocal["USD"]["volume_btc"];

//BTC Volume BTCE
$BTCVolumeBTCE = getData('https://btc-e.com/api/3/ticker/btc_usd');
$BTCEVolume = $BTCVolumeBTCE["btc_usd"]["vol_cur"];

//BTC Volume Bitstamp
$BTCVolumeStamp = getData('https://www.bitstamp.net/api/ticker/');
$StampVolume = $BTCVolumeStamp["volume"];

//BTC Volume Bitfinex
$BTCVolumeFinex = getData('https://api.bitfinex.com/v1/pubticker/btcusd');
$FinexVolume = $BTCVolumeFinex["volume"];

//BTC Volume OKCoin
$BTCVolumeOK = getData('https://www.okcoin.com/api/ticker.do?ok=1');
$OKCoinVolume = $BTCVolumeOK["ticker"]["vol"];

//BTC Volume LakeBTC
$BTCVolumeLake = getData('https://www.lakebtc.com/api_v1/ticker');
$LakeVolume = $BTCVolumeLake["USD"]["volume"];

//Totals the Volumes
$TotalVolume = $LakeVolume + $FinexVolume + $OKCoinVolume + $StampVolume + $BTCEVolume + $LocalVolume;
//Percents of Total Volume
$BTCEPercent = $BTCEVolume / $TotalVolume;
$StampPercent = $StampVolume / $TotalVolume;
$FinexPercent = $FinexVolume / $TotalVolume;
$OKPercent = $OKCoinVolume / $TotalVolume;
$LakePercent = $LakeVolume / $TotalVolume;
$LocalPercent = $LocalVolume / $TotalVolume;

//BTC Price BTCE
$BTCPriceBTCE = getData('https://btc-e.com/api/3/ticker/btc_usd');
$BTCEPrice = $BTCPriceBTCE["btc_usd"]["last"];

//BTC Price Bitstamp
$BTCPriceStamp = getData('https://www.bitstamp.net/api/ticker/');
$StampPrice = $BTCPriceStamp["last"];

//BTC Price Bitfinex
$BTCPriceFinex = getData('https://api.bitfinex.com/v1/pubticker/btcusd');
$FinexPrice = $BTCPriceFinex["last_price"];

//BTC Price OKCoin
$BTCPriceOK = getData('https://www.okcoin.com/api/ticker.do?ok=1');
$OKPrice = $BTCPriceOK["ticker"]["last"];

//BTC Price LakeBTC
$BTCPriceLake = getData('https://www.lakebtc.com/api_v1/ticker');
$LakePrice = $BTCPriceLake["USD"]["last"];

//BTC Price LocalBitcoins
$BTCPriceLocal = getData('https://localbitcoins.com/bitcoinaverage/ticker-all-currencies/');
$LocalPrice = $BTCPriceLocal["USD"]["avg_1h"];

//BTC Price * Percent
$BTCEPricePercent = $BTCEPrice * $BTCEPercent;
$StampPricePercent = $StampPrice * $StampPercent;
$FinexPricePercent = $FinexPrice * $FinexPercent;
$OKPricePercent = $OKPrice * $OKPercent;
$LakePricePercent = $LakePrice * $LakePercent;
$LocalPricePercent = $LocalPrice * $LocalPercent;

//Bitcoin Price
$bitcoinPrice = round($LakePricePercent + $OKPricePercent + $FinexPricePercent + $StampPricePercent + $BTCEPricePercent + $LocalPricePercent, 2);

?>

1

Решение

Я выполнил несколько проектов с различными API-интерфейсами Биткойн и потратил много времени на хранение данных API по той же самой причине задержки.

1.) Поместите данные в базу данных, … вы сойдете с ума, работая с плоскими файлами и многими другими источниками. Не должен быть большим или сложным, но это правильный инструмент для работы и будет гораздо более гибким в долгосрочной перспективе.

2.) Работа CRON была бы идеальным способом запуска кода с любым интервалом, который вы хотите. В прошлом я использовал посещения пользователей для запуска сценария обработки, и он работает, мой опыт подсказывает, что я больше этого не делаю.

В вашем примере, если у вас нет посетителя каждую минуту, то каждому посетителю все равно придется смириться с вызовами API, и прибыль улетучивается. Если у вас есть один или несколько посетителей каждую минуту, то этот метод выглядит немного лучше, но одному из этих посетителей все еще придется подождать.

3.) С помощью метода CRON вы получите полный журнал API, что не так уж плохо. Может быть полезной исторической информацией, покрывает вас, если когда-либо происходит простои API. Если он запущен пользователем, у вас будут дыры в этих данных и меньше опций в будущем.

Удачи.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector