我的目标是每隔10分钟运行以下php脚本,然后才能访问网站前端的$temp
和$icon
值:
$api_endpoint = 'https://api.forecast.io/forecast/';
$api_key = get_field('forecast_api_key', 'option');
$latitude = get_field('latitude', 'option');
$longitude = get_field('longitude', 'option');
$units = 'auto';
$lang = 'en';
$exclude = 'minutely,hourly,daily,alerts,flags';
// Build API call and parse data
$url = $api_endpoint.$api_key.'/'.$latitude.','.$longitude.'?units='.$units.'&exclude='.$exclude;
$response = file_get_contents($url);
$weather_data = json_decode($response, true);
// Output to front-end
$temp = round($weather_data['currently']['temperature']);
$icon = $weather_data['currently']['icon'];
有人可以高层解释一下这样做的最佳方法是什么?我需要限制每天到终端的API调用次数,据我所知,这个脚本应该作为cron任务执行,但我不知道如何从{{1}中的网站获取变量值}。
如果我忽略了一种更简单的方法(即不使用cron)来限制每个时段的通话次数,我也会对其他建议感兴趣。
服务器环境是Ubuntu 14.04 LTS VPS。
非常感谢你的帮助。
答案 0 :(得分:1)
我根本不认为你需要一个cron任务,除非你需要将返回值用于其他目的(例如在后台进程中进行一些计算)
我建议编写一个函数,该函数调用API并将结果存储到数据库中。您可以实现一个简单的缓存逻辑,以避免每次页面加载时的API调用。伪代码可能如下所示:
function getAPIresult(){
//Idea is to check for record in local db, before making the API call
//you can define the time schedule, AKA cache validity time as you want
$result = mysql_query("select from api_results where date='today'");
if($result){
return $result; // if valid record is found, use it on your website
}
else{
return setAPIResult();
}
}
function setAPIResult(){
//API CALL goes here and inserts the result into the database
.....
$weather_data = json_decode($response, true);
$result = mysql_insert('inserto into api_results ... values($weather_data)');
return $result; // insert and return the value
}