Клиент Alpha Vantage слишком медленный

У меня есть очень простой 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 загружается за доли секунды.

Кто-нибудь знает, где я иду не так?

-2

Решение

Это то, что я сделал, когда 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 точек данных во временном ряду.

1

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

ОБНОВИТЬ: Пакетные котировки акций

Возможно, вы захотите использовать этот тип запроса. Несколько котировок акций все в один звонок.

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


РЕДАКТИРОВАТЬВ соответствии с вышеизложенным, вы должны внести изменения в свой запрос. Но это также может быть проблемой с вашим сервер. Я проверил это для варианта использования, над которым я работаю, и у меня уходит несколько секунд, чтобы получить данные, хотя я тяну их только за один символ акции на странице за раз.

Попробуйте увеличить лимит памяти, если дела идут слишком медленно на ваш вкус.

<?php
ini_set('memory_limit','500M'); // or your desired limit
?>

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

0