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?
How about this:
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?