-2

我对 Alpha Vantage API 进行了这个非常简单的 PHP 调用,以用 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 秒。在 Alpha Vantage 的 json 文件在几分之一秒内加载时加载。

有谁知道我哪里错了?

4

2 回答 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 只股票的盘中数据。

另一种提高性能的方法是使用

输出大小=紧凑

compact 仅返回时间序列中最新的 100 个数据点。

于 2018-05-28T07:42:53.813 回答
0

更新:批量股票行情

您可能还想考虑使用这种类型的查询。一次通话即可获得多个股票报价。

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


编辑:根据上述内容,您应该对查询进行更改。但这也可能是您的服务器的问题。我针对我正在处理的一个用例对此进行了测试,我需要几秒钟来获取数据,尽管我一次只为一个页面上的一个股票代码提取它。

如果事情对您的喜好来说太慢,请尝试增加您的内存限制。

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

此外,如果您有共享主机,那可能就是问题所在。但是,我对您的服务器知之甚少,无法完全回答。

于 2018-04-06T17:46:55.433 回答