我有一个非常简单的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文件加载时间仅为几分之一。
有谁知道我哪里出错了?
答案 0 :(得分: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个数据点。
答案 1 :(得分:0)
您可能也想考虑使用这种类型的查询。多个股票报价全部在一个电话中。
此外,如果适用,使用完整输出大小可以获取过去20年的数据。从您的查询中取出并让API使用其压缩输出默认值。
编辑:根据上述内容,您应该对查询进行更改。但它也可能是您的服务器的问题。我测试了这个用于我正在处理的用例,我花了几秒钟来获取数据,虽然我一次只能在页面上拉一个股票代码。
如果您的喜好太慢,请尝试增加内存限制。
<?php
ini_set('memory_limit','500M'); // or your desired limit
?>
此外,如果您有共享托管,则可能成为问题。但是,我对您的服务器不够了解,无法完全回答。