我的目标是每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任务执行,但不确定如何从/var/www/
的网站获取变量值/var/www/
。
如果我忽略了一种更简单的方法(即不使用cron)来限制每个时段的调用次数,那么我也会对替代建议感兴趣。
服务器环境是Ubuntu 14.04 LTS VPS。
非常感谢您的帮助。
我认为您根本不需要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
}