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

更改远程服务器上的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 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀