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

2023-12-11 18:10

本文主要是介绍swoole+Mixphp+CodeIgniter开发失踪儿童信息平台,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这是我在sf上的第一篇文章。写基于swoole、Mixphp和CodeIgniter开发的失踪儿童信息平台。

在2017年的时候,关注到有一个“团圆系统”,它是公安部专门为了快速扩散失踪儿童消息的平台,但是网上并没有找到这个平台的地址。当然,偶然在淘宝平台上找到一个接口,这个接口可以取得失踪儿童的数据,后来这个接口提示不能访问了。那么如果我想去做这样的一个失踪儿童信息平台的话,就要从另外的地方获取数据了。

团圆系统的全称应该是公安部儿童失踪信息紧急发布平台,在新浪微博上有一个官方的微博账号,通过这个微博账号发布儿童失踪信息。因此在实现“失踪儿童信息平台”的第一步就是从微博上去获取数据,并且这个获取数据的程序最后能在后台程序自动运行,这样就不用人工干预了。

从微博页面抓取数据

我对php语言要熟悉一些,因此在打算自己动手实现这个想法的时候,就选择了php,另外之前也关注到swoole,swoole拓展了PHPer的能力范围,不再局限于Web开发。进而找了一个比较容易上手的基于swoole的框架MixPHP,因此,在从微博上抓取数据的程序是基于Mixphp写的,工程结构如下:
图片描述

在apps/daemon/commands目录下新建一个控制器IndexController.php,控制器部分代码如下:

<?php
/*** Created by PhpStorm.* User: luoam* Date: 2018/4/20* Time: 22:28*/namespace apps\daemon\commands;use mix\client\Http;
use mix\console\Controller;
use mix\swoole\Process;
use apps\daemon\commands\SaeTClientV2;
use apps\daemon\commands\SaeTOAuthV2;
use apps\daemon\commands\Sae;class IndexController extends Controller
{// 启动public function actionStart(){// 重复启动处理if ($pid = Process::getMasterPid(self::PID_FILE)) {return "mix-daemon '{$this->processName}' is running, PID : {$pid}." . PHP_EOL;}// 启动提示echo "mix-daemon '{$this->processName}' start successed." . PHP_EOL;// 蜕变为守护进程if ($this->d) {Process::daemon();}// 写入 PID 文件Process::writePid(self::PID_FILE);// 修改进程名称Process::setName("mix-daemon: {$this->processName}");// 开始工作$this->startWork();}public function startWork(){try {while (true) {//实时采集一次$sql = "select `itemid` from items where status=:status";$rows = \mix::app()->rdb->createCommand($sql)->bindParams(['status' => '失踪'])->queryAll();if (!empty($rows)) {foreach ($rows as $row) {//采集一次失踪的,$this->actionDetail($row['itemid']);sleep(5);//再增量采集一次$this->actionIncrementOnce();}}}} catch (\Exception $e) {\Mix::app()->error->exception($e);sleep(10); // 休息一会,避免 cpu 出现 100%$this->startWork();}}}

哦,需要提醒的是,Mixphp需要一些准备条件,在官方文档中写的非常详细。安装好Mixphp之后就可以直接运行上面的后台程序,命令如:

./mix-daemon index/start -d

-d 表示这个进程将在后台运行。
数据的抓取分为几个部分,

  1. 批量抓取,在程序第一次运行时会给定一些url进行批量初始化抓取
  2. 增量抓取,会根据抓取回来的页面内容分析新的url,再进行抓取新的url
  3. 补充抓取,意思是部分儿童的状态为失踪,隔一段时间之后找回来了,那么状态也会发生变化,因此要对这些url进行补充抓取。

前台展示页面

前台展示,相当于做一个网站,使用的是CodeIgniter框架,这个框架用来做网站,很方便,因此我也一直在用。
整个网站只显示那些仍然处于失踪状态的儿童的信息。页面的效果大致是这样的:
图片描述

另外一个就是发微博

我在微博开发平台注册了一个应用,可以调用微博的api,因此在数据抓取的程序里,在数据存到数据库中的同时会发一条微博。调用的是share接口。使用微博的api的过程是这样的,先使用oauth获取到access_token,另外从微博开发平台找到key和secret,部分代码如下:

$c = new SaeTClientV2(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['name'] . "," . $dataArray['agesex'] . "," . mb_substr($dataArray['detail'], 0, 110, 'utf-8') . '...' . "如有线索,请迅速与警方联系:" . $dataArray['policetel'] . "http://www.anman.org/index/baobei/" . $containerid;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();}if ($weibopic){unlink($weibopic);}echo date("Y-m-d H:i:s") . ' ' . $containerid . '微博发送成功!' . PHP_EOL;echo date("Y-m-d H:i:s") . ' ' . $containerid . '插入数据操作成功' . PHP_EOL;\mix::app()->log->info(date("Y-m-d H:i:s") . ' ' . $containerid . '插入数据操作成功');
} else {\mix::app()->log->error(date("Y-m-d H:i:s") . ' ' . $containerid . '插入操作出错');
}

微博的效果如下:
图片描述

总结一下:

整个实现过程中使用到了swoole,codeigniter框架,微博开发平台,mysql。
后台程序从微博中抓取数据到本地,然后根据规则通过微博api在发送微博。
有一个专门的网站去展示这些信息。
后面我打算试着去对这些数据做一些分析。

这篇关于swoole+Mixphp+CodeIgniter开发失踪儿童信息平台的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/481615

相关文章

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

使用Python检查CPU型号并弹出警告信息

《使用Python检查CPU型号并弹出警告信息》本教程将指导你如何编写一个Python程序,该程序能够在启动时检查计算机的CPU型号,如果检测到CPU型号包含“I3”,则会弹出一个警告窗口,感兴趣的小... 目录教程目标方法一所需库步骤一:安装所需库步骤二:编写python程序步骤三:运行程序注意事项方法二

C#图表开发之Chart详解

《C#图表开发之Chart详解》C#中的Chart控件用于开发图表功能,具有Series和ChartArea两个重要属性,Series属性是SeriesCollection类型,包含多个Series对... 目录OverviChina编程ewSeries类总结OverviewC#中,开发图表功能的控件是Char

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD