我正在尝试从coinmarketcap的api中检索数据并将数据存储到缓存文件中。如果缓存文件超过10分钟,则检索新数据并存储到缓存文件。除了缓存数据之外,我已经能够使一切工作正常。永远不会在插件目录中创建缓存文件。任何帮助,将不胜感激。这是代码:
function Tickers($data){
foreach($data as $item){
echo "<a href=/currencies/" .$item->symbol. '/' . $item->name. ">$item->symbol</a>";
echo "<br>";
echo '<span>$' . $item->price_usd . '</span>';
echo "<br>";
echo "<br>";
}
}
function getdata(){
$time = 600; //seconds
$cache_file = 'wp-content/plugins/cryptocurrency_tickers/cache.txt';
if(file_exists($cache_file)){
if(time() - filemtime($cache_file) > $time) {
// too old , re-fetch
$data = json_decode(file_get_contents('https://api.coinmarketcap.com/v1/ticker/?limit=20'));
file_put_contents(cache_file,json_encode($data));
}
else{
//data is current
}
}else {
// create cache
$data = json_decode(file_get_contents('https://api.coinmarketcap.com/v1/ticker/?limit=20'));
file_put_contents(cache_file, json_encode($data));
}
$data = json_decode(file_get_contents($cache_file));
Tickers($data);
}
答案 0 :(得分:0)
再次查看代码,在file_put_contents上的'cache_file'前面缺少'$'
file_put_contents(cache_file,json_encode($data));
应该是
file_put_contents($cache_file,json_encode($data));
当你首先从API获取json数据时,你会解码,然后编码,为什么你没有直接从API保存数据,它已经是json编码的。
更好的代码版本:
function Tickers($data){
foreach($data as $item){
echo "<a href=/currencies/" .$item->symbol. '/' . $item->name. ">$item->symbol</a>";
echo "<br>";
echo '<span>$' . $item->price_usd . '</span>';
echo "<br>";
echo "<br>";
}
}
function getdata(){
$time = 600; //seconds
$cache_file = '/path/to/cache.txt';
if(file_exists($cache_file)){
if(time() - filemtime($cache_file) > $time) {
// too old , re-fetch
$data = file_get_contents('https://api.coinmarketcap.com/v1/ticker/?limit=20');
file_put_contents($cache_file, $data);
} else{
//data is current
}
} else {
// create cache
$data = file_get_contents('https://api.coinmarketcap.com/v1/ticker/?limit=20');
file_put_contents($cache_file, $data);
}
$data = json_decode(file_get_contents($cache_file));
Tickers($data);
}
getdata();
还要确保您的Web服务器用户可以写入插件目录。