Я пытаюсь получить данные JSON с удаленного сервера с помощью curl и сохранить их в базе данных. Данные на удаленном сервере обновляются каждую минуту.
Сценарий curl работает нормально с получением данных. Но он получает данные примерно каждые 10 секунд. Я хочу, чтобы он получал данные раз в минуту.
Я искал SO и обнаружил, что cronjob и планировщик задач Windows - это решения, предусмотренные для запланированных заданий с использованием curl. Моя проблема заключается в том, что мне не нужно запускать веб-страницу, содержащую curl, поэтому она может начать получать данные с сервера, но мне приходится читать данные раз в минуту.
Поскольку данные обновляются каждую 5-ю секунду, как 9:10:05 -> 9:11:05 -> 9:12:05 -> ... Одним из вариантов является использование cronjob ИЛИ планировщик Windows для запуска Интернета страница, например, 3-я секунда и закрытие, например, 7-я секунда, поэтому каждую минуту читается одно значение. Но это не кажется хорошим или надежным решением для меня или нет?
У меня вопрос, как мне читать данные с удаленного сервера раз в минуту, используя curl? Есть какое-то программное решение или использование планировщика задач cronjob / windows?
Я занимаюсь разработкой на рабочей станции Windows, но мне нужно развернуть ее на сервере под управлением Ubuntu.
EDIT
У меня есть еще 2 вопроса о моем коде:
1) Как я уже говорил в OP выше, curl постоянно извлекает данные из источника, как будто работает бесконечный цикл. Это поведение curl по умолчанию, или мне нужно выполнить некоторую настройку для извлечения данных, например, один раз через это?
2) Мне нужно держать окно браузера открытым, чтобы завиток начал извлекать данные. Не работает, если веб-страница не открыта. Это стандартное поведение curl или оно также может запускаться как задание бэкэнда, поэтому веб-страница, на которой он находится, не должна оставаться открытой постоянно?
Вот мой код:
index.php
HTML + PHP + JS для ввода и отображения данных
connect.php
Подключение к базе данных
RequestData.PhP
<!DOCTYPE html>
<html lang="en">
<head>
<title>Weather Data</title>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
</head>
<body>
<h2>Connect.php</h2>
<div>
<?php
require("Connection.php");
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://cors.io/?http://api.holfuy.com/live/?s=759&pw=h1u5l4kka&m=JSON&tu=C&su=m/s",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Cache-Control: no-cache"
),
));
$response = curl_exec($curl);
$Wdata = json_decode($response, true);
$tem = $Wdata["temperature"];
$hum = $Wdata["humidity"];
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
// Here code to save $response into database;
echo $response;
echo "<br>";
echo $tem;
echo "<br>";
echo $hum;
}
try{
$sql = "INSERT INTO weatherdata (humidity, temprature)
VALUES ('".$tem."','".$hum."')";
echo "<meta http-equiv='refresh' content='0'>";
($conn->query($sql));
//$conn = null;
}
catch(PDOException $e)
{
}
?>
</div>
</body>
</html>