将PHP API调用转换为cron作业并访问返回的值

时间:2016-09-24 08:52:39

标签: php cron cron-task

我的目标是每隔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。

非常感谢你的帮助。

1 个答案:

答案 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
}