当前位置: 首页 > 后端技术 > PHP

swoole+Mixphp+CodeIgniter开发失踪儿童信息平台

时间:2023-03-29 23:08:03 PHP

这是我在sf上的第一篇文章。基于swoole、Mixphp和CodeIgniter编写一个失踪儿童信息平台。2017年,我关注的是有一个“团圆系统”,这是公安部专门设计的一个快速传播失踪儿童消息的平台,但是在网上找不到这个平台的地址。当然,无意中在淘宝平台上找到了一个接口。该接口可以获取失踪儿童的数据。后来这个界面提示无法访问。所以如果我要建立这样一个失踪儿童信息平台,我必须从另一个地方获取数据。团圆系统的全称应该是公安部失踪儿童紧急信息发布平台。新浪微博有官方微博,发布失踪儿童信息。因此,实现“失踪儿童信息平台”的第一步就是从微博获取数据,获取数据的程序最终可以在后台自动运行,不需要人工干预。熟悉微博页面抓取数据的php语言,所以在打算自己实现这个想法的时候,选择了php。另外之前也关注过swoole。swoole扩展了PHPer的能力范围,不再局限于web开发。然后我找到了一个更容易使用的基于swoole的框架MixPHP。因此微博抓取数据的程序是基于Mixphp编写的。项目结构如下:在apps/daemon/commands目录下新建控制器IndexController。php,controller部分代码如下:processName}'正在运行,PID:{$pid}。”.PHP_EOL;}//启动提示echo"mix-daemon'{$this->processName}'启动成功。".PHP_EOL;//转换为守护进程if($this->d){Process::daemon();}//写入PID文件Process::writePid(self::PID_FILE);//修改进程名Process::setName("mix-daemon:{$this->processName}");//开始工作$this->startWork();}publicfunctionstartWork(){try{while(true){//实时收集一次$sql="select`itemid`fromitemswherestatus=:status";$rows=\mix::app()->rdb->createCommand($sql)->bindParams(['status'=>'missing'])->queryAll();if(!empty($rows)){foreach($rowsas$row){//收集缺失的一个,$this->actionDetail($row['itemid']);睡眠(5);//再次增量收集$this->actionIncrementOnce();}}}}catch(\Exception$e){\Mix::app()->error->exception($e);睡眠(10);//休息一下以避免100%cpu$this->startWork();}}}哦,需要提醒一下更重要的是,Mixphp需要一些前提条件。官方文档里写的很详细。安装好Mixphp后,就可以直接运行上面的后台程序了。命令如:./mix-daemonindex/start-d-d表示该进程将在后台运行。数据抓取分为几个部分,批量抓取,程序第一次运行时,会给出一些url进行批量初始化和增量抓取,根据抓取的页面内容分析新的url,然后抓取新的url对于补充爬取就是说有些子的状态是缺失的,如果过段时间找到了,状态也会发生变化,所以这些url需要补充爬取。前台显示页面的前台显示相当于做一个网站,使用CodeIgniter框架。这个框架做网站很方便,所以一直在用。整个网站只显示那些仍然失踪的孩子的信息。页面效果大致是这样的:另外一个是发微博。我在微博开发平台上注册了一个应用,可以调用微博的API。因此,在数据抓取程序中,当数据存入数据库后,会发一条微博。共享接口被调用。微博API的使用流程如下。首先使用oauth获取access_token,然后从微博开发平台找到key和secret。部分代码如下:$c=newSaeTClientV2(WB_AKEY,WB_SKEY,$access_token);$sus=\mix::app()->rdb->insert('items',$dataArray)->execute();$insertId=\Mix::app()->rdb->getLastInsertId();$affectedRowss=\Mix::app()->rdb->getRowCount();if($affectedRowss>0){$texts="".$dataArray['名称']。“,”。$dataArray['agesex']。",".mb_substr($dataArray['detail'],0,110,'utf-8')。'...'。“如有线索,请第一时间与警方联系:”。$dataArray['警察局'].“http://www.anman.org/index/baobei/”。$容器编号;if($weibopic){$weibopic=$this->get_img($weibopic,\mix::app()->getRuntimePath());$weiboRep=$c->share($texts,$weibopic);if(isset($weiboRep['id'])){$sinaweibos=array('itemid'=>$containerid,'weiboid'=>$weiboRep['id']);\mix::app()->rdb->insert('sinaweibos',$sinaweibos)->execute();}如果($weibopic){取消链接($weib光学);}回声日期(“Y-m-dH:i:s”)。''。$容器编号。'微博发送成功!'。PHP_EOL;回声日期(“Y-m-dH:i:s”)。''。$容器编号。'插入数据成功'.PHP_EOL;\mix::app()->log->info(date("Y-m-dH:i:s").''.$containerid.'插入数据成功');}else{\mix::app()->log->error(date("Y-m-dH:i:s").''.$containerid.'插入操作错误');}微博效果如下:总结:整个实现过程使用swoole,codeigniter框架,微博开发平台,mysql后台程序将微博的数据抓取到本地,然后根据规则通过微博API发送微博。有一个专门的网站来显示这些信息。我打算稍后尝试对这些数据做一些分析。