前面的内容中提到了用单片机爬取网页信息在上传给服务器,当时也说了这是“多此一举”,主要是为了之后物联网打下基础(在Ebay上下单了来自中国的一批芯片传感器之类的,要一个月才到)。
经过一天多的测试,整体来说这个方案还是稳定的,没有出现数据漏传,服务器IP变动也很快可以重新定向。只不过整个程序里Delay函数的使用比较多,后面即便在一小时延迟内减去了部分余量,最后还是有一些误差,总之不精确。Sniper给出的方法是引入一个计时器的库,可以直接连授时服务器,尽可能地精准发送数据。不过我手头就两块板子,都在工作之中,就没有立刻进行测试了。取而代之的,我说过,这个功能可以用PHP实现。于是,我就实现了一下。不废话,上代码。
<?php
$contents = file_get_contents('http://api.bilibili.com/archive_stat/stat?aid=71155536');//av号
$data= json_decode($contents,true);//很重要 解析json
$servername = "********";//数据库信息
$username = "******";
$password = "*******";
$dbname = "******";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$aid = $data['data']['aid'];//这边就是把信息提取出来重新命名
$view = $data['data']['view'];
$danmaku = $data['data']['danmaku'];
$reply = $data['data']['reply'];
$favorite = $data['data']['favorite'];
$coin = $data['data']['coin'];
$share = $data['data']['share'];
$like = $data['data']['like'];
$sql = "INSERT INTO `*******` (aid, view, danmaku, reply, favorite, coin, share, zan)
VALUES('$aid', '$view', '$danmaku', '$reply', '$favorite', '$coin', '$share','$like')";
if(!mysqli_query($conn, $sql))
{
die('Error : ' . mysql_error());
}
//写表操作
$conn->close();
print ("hallo welt");//只是一开始用来测试网页正不正常
print ($like);
?>
以上是利用PHP获取B站API返回的JSON数值,解析后发送到数据库对应的位置。直接访问这个网页就会进行一次写表操作,不过我们要做的是持续追踪。
这里遇到了非常蛋疼的情况,我本来是想在PHP中添加定时器,类似Sleep的东西。不过要是那样就必须设置网页始终后台运行,谁知道会发生什么神奇的的事情。远程服务器要的就是稳定,要是搞歇逼了,修都没人修。所以果断放弃了这种危险的方法。
于是再看到Cron,这个东西很好用,就是Linux平台的定时任务管理器,基本默认都装上了。然而,在远程机上没能配置成功Cron,又不敢瞎JB乱搞。就开始打NAS的主意,除了服务器,我这边的NAS不也是7*24运行的嘛。OK,说干就干,就是CTMD上来就给卡住了。Synology的Cron在哪儿啊!
查了一下,行吧,还有点小复杂。
先用putty什么的连进去,正常的用户登录,
然后
sudo -i
输密码,拿到root权限
cd /etc
vi crontab
进入Cron管理表
linux的表格编辑没学过的话是真的不知道怎么操作
先Insert按一下,这键就真的是不太常用。
然后上下左右操作,这些还都好,你搞好了保存是最蛋疼的。首先ESC一下退出编辑,然后需要打个冒号出来,w保存,q是退出,可以分开用,也可以一起保存加退出。
然后就回到了目录
最后还需要重启一下服务
restart crond
这个cron的设置格式,网上资料太多了,我就不多BB了。
哦对了,为啥不用文件目录去访问而是用了个局域网ip,这个首先是我真的懒得搞群晖的文件目录了。这东西在群晖的网站服务器目录下,其实也是我这边的本地开发环境。
我其实比较推荐用这种方式建立本地环境,他相比在电脑本机上操作更加真实(开始胡扯)没有把网页挂到远程服务器上是因为那样这网页谁都可以访问,万一被爬了,我这数据岂不是就乱套了。