Alpha Vantage客户端太慢了

问题描述 投票:-2回答:2

我有一个非常简单的PHP调用Alpha Vantage API来填充纳斯达克股票价格的表(或列表):

<?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秒。加载,而Alpha Vantage的json文件在几分之一秒内加载。

有谁知道我哪里出错了?

php rest finance alphavantage
2个回答
1
投票

这就是我在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个数据点。


0
投票

更新:Batch Stock Quotes

您可能还想考虑使用此类查询。一次通话中有多个股票报价。

此外,如果适用,使用完整输出大小可以获取过去20年的数据。从您的查询中取出并让API使用其压缩输出默认值。


编辑:根据以上内容,您应该更改您的查询。但它也可能是您的服务器的问题。我测试了这个用于我正在处理的用例,我花了几秒钟来获取数据,虽然我一次只在页面上拉一个股票代码。

如果事情太慢而不喜欢,请尝试增加内存限制。

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

此外,如果您有共享主机,这可能是问题。但是,我不太了解你的服务器完全回答这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.