dpea85385 2019-06-24 11:52
浏览 241
已采纳

更改远程服务器上的JSON文件

I have an api to get some data (limit every 1 minute call) in JSON format and I want that api to be available for all those users who has the access to the server.

I had a php code getting the contents from api then using that JSON object in javascript file. But if multiple users go on the website, the api is called multiple times every minute, so only 1 guy gets the data, and the others don't.

Is there a good solution to something like this?

I try to save the JSON object into a remote file then everyone who accesses the website reads the JSON file which changes every minute but for some reason on the remote server the JSON file isn't being updated every minute. Is it a permission problem?

In php file I use "file_get_contents" to get json from rest api. then I save the data: "file_put_contents"

Is there a different solution of getting the JSON data (updated every 1 minute) to everyone who accesses the website available to use in the javascript file?

How to save json data to remote file every one minute?

  • 写回答

1条回答 默认 最新

  • dongsu0308 2019-06-24 12:42
    关注

    How about this:

    • Save your API data in a file.
    • Save your last call for the API data in another file.
    • When users require your data, check for the last API call.
    • If less than 1 minute passed, then get the data from the saved file.
    • If more than a minute passed, get new data, save it to the file, update the time log, then give the data to the user.

    For example, lets say users go to your index.php page:

    // lets define the working files
    define("FILE_API_TIMESTAMP", "api.timestamp.txt");
    define("FILE_API_DATA", "api.data.json");
    // initialize main vars
    // last api call
    $last_call = 0;
    // latest api data
    $api_data = false;
    // this moment timestamp
    $current_time = time();
    // check last api call from saved file
    if (file_exists(FILE_API_TIMESTAMP)) {
      $last_call = floatval( file_get_contents( FILE_API_TIMESTAMP ) );
    }
    // if more than 60 seconds passed since last call,
    // call API then save results
    if ($current_time - $last_call > 60) {
      // get new data
      // $api_data = getApiData(); -> put your function here: Curl etc...
      $api_data = "new data: ".time(); // just an example
      if ($api_data) {
        // if new data is available,
        // - log the current timestamp
        file_put_contents(FILE_API_TIMESTAMP, $current_time);
        // update $last_call for later use
        $last_call = $current_time;
        // - save the new data
        file_put_contents(FILE_API_DATA, $api_data);
      }
    }
    // check if we have new data, if not bring old data
    if (!$api_data) {
      if (file_exists(FILE_API_DATA))
        $api_data = file_get_contents(FILE_API_DATA);
      else
        $api_data = "no_data";
    }
    // finally, give the user the updated data:
    echo "Data updated at: ".date("d-m-Y H:i:s", $last_call);
    echo "<hr/>";
    echo $api_data;
    

    Does this help you?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置