需要帮助在wordpress网站上缓存json_decode(file_get_contents('api'))

时间:2018-03-07 09:42:34

标签: php

我正在尝试从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);
}

1 个答案:

答案 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服务器用户可以写入插件目录。