使用 curl 定期从远程服务器获取数据
Fetch data from a remote server periodically using curl
我正在尝试使用 curl 从远程服务器获取 JSON 数据并将其保存在数据库中。远程服务器上的数据每分钟更新一次。
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 工作站上进行开发,但我需要将其部署到服务器 运行ning Ubuntu。
编辑
我还有 2 个关于我的代码的问题:
1) 正如我在上面的 OP 中所述,curl 不断从源中获取数据,就像它是一个无限循环 运行ning。这是 curl 的默认行为还是我需要做一些配置来获取数据,例如一次通过它?
2) 我需要保持浏览器 window 打开,以便 curl 开始获取数据。如果网页未打开,则不起作用。它是 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>
我想说使用 cronjob 是最好的方法! (假设您使用的是 linux 发行版)
在 cron 中,你 select 间隔,但如果你愿意,你可以使用睡眠功能来延迟命令 运行 几秒钟:
*/1 * * * * sleep 5; mycommand
^^ ^^
every minute five seconds
编辑:您的 post 似乎不太清楚您使用的是哪种操作系统 运行,我建议在我的 post 中使用 cronjob 但这仅可用linux 系统。 Windows 如果您从 windows 系统中 运行 使用它,则可以使用任务调度程序,尽管我不确定它是如何工作的,所以我无法帮助您设置它。
如果您不想使用 cron 作业并且想通过浏览器直接使用此页面,请使用此代码。
使用元标记在五分钟后使用 find content = 300 刷新
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="300">
<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>
我正在尝试使用 curl 从远程服务器获取 JSON 数据并将其保存在数据库中。远程服务器上的数据每分钟更新一次。
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 工作站上进行开发,但我需要将其部署到服务器 运行ning Ubuntu。
编辑
我还有 2 个关于我的代码的问题:
1) 正如我在上面的 OP 中所述,curl 不断从源中获取数据,就像它是一个无限循环 运行ning。这是 curl 的默认行为还是我需要做一些配置来获取数据,例如一次通过它?
2) 我需要保持浏览器 window 打开,以便 curl 开始获取数据。如果网页未打开,则不起作用。它是 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>
我想说使用 cronjob 是最好的方法! (假设您使用的是 linux 发行版) 在 cron 中,你 select 间隔,但如果你愿意,你可以使用睡眠功能来延迟命令 运行 几秒钟:
*/1 * * * * sleep 5; mycommand
^^ ^^
every minute five seconds
编辑:您的 post 似乎不太清楚您使用的是哪种操作系统 运行,我建议在我的 post 中使用 cronjob 但这仅可用linux 系统。 Windows 如果您从 windows 系统中 运行 使用它,则可以使用任务调度程序,尽管我不确定它是如何工作的,所以我无法帮助您设置它。
如果您不想使用 cron 作业并且想通过浏览器直接使用此页面,请使用此代码。
使用元标记在五分钟后使用 find content = 300 刷新
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="300">
<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>