У меня есть очень простой PHP-вызов Alpha Vantage API, чтобы заполнить таблицу (или список) ценами на акции NASDAQ:
<?php
function get_price($commodity = "")
{
$url = 'https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol=' . $commodity . '&outputsize=full&apikey=myKey';
$obj = json_decode(file_get_contents($url), true);
$date = $obj['Meta Data']['3. Last Refreshed'];
$result = $obj['Time Series (Daily)']['2018-03-23']['4. close'];
$rd_result = round($result, 2);
echo $result;
}
?>
<?php get_price("XOM");
get_price("AAPL");
get_price("MSFT");
get_price("CVX");
get_price("CAT");
get_price("BA");
?>
И это работает, но так чертовски медленно. Это может занять более 30 секунд. загружать, пока файл json из Alpha Vantage загружается за доли секунды.
Кто-нибудь знает, где я иду не так?
Это то, что я сделал, когда API потребовалось время, чтобы ответить, мое решение написано на C #, но логика была бы той же.
string[] AlphaVantageApiKey = { "RK*********", "B2***********", 4FD*********QN", "7S3Z*********FRX", "U************I3" };
int ApiKeyValue = 0;
foreach (var stock in listOfStocks)
{
DataTable dtResult = DataRetrival.GetIntradayStockFeedForSelectedStockAs(stock.Symbol.Trim().ToUpper(), ApiKeyValue);
ApiKeyValue = (ApiKeyValue == 4) ? 0 : ApiKeyValue + 1;
}
Я использую от 5 до 6 различных ключей API, когда запрашиваю данные. Я зациклился на мысли каждого из них для каждого звонка. Там за счет уменьшения нагрузки на один перпендикулярный токен.
Я заметил, что это значительно улучшило мои показатели. Мне требуется менее 1 минуты, чтобы получить внутридневные данные по 50 акциям.
Другой способ улучшить производительность — это использовать
Outputsize = компактный
Compact возвращает только последние 100 точек данных во временном ряду.
ОБНОВИТЬ: Пакетные котировки акций
Возможно, вы захотите использовать этот тип запроса. Несколько котировок акций все в один звонок.
Кроме того, использование полного выходного размера позволяет получить данные за последние 20 лет, если это применимо. Уберите это из вашего запроса, и пусть API использует сжатый вывод по умолчанию.
РЕДАКТИРОВАТЬВ соответствии с вышеизложенным, вы должны внести изменения в свой запрос. Но это также может быть проблемой с вашим сервер. Я проверил это для варианта использования, над которым я работаю, и у меня уходит несколько секунд, чтобы получить данные, хотя я тяну их только за один символ акции на странице за раз.
Попробуйте увеличить лимит памяти, если дела идут слишком медленно на ваш вкус.
<?php
ini_set('memory_limit','500M'); // or your desired limit
?>
Кроме того, если у вас есть общий хостинг, то может быть быть проблемой. Тем не менее, я не знаю достаточно о вашем сервере, чтобы ответить на этот вопрос полностью.