本篇文章给大家分享的内容是关于thinkphp5使用workerman定时器定时爬取某站点新闻资讯等的内容,内容很详细,有需要的朋友可以参考一下,希望可以帮助到你们.
1、首先通过 composer 安装workerman,在thinkphp5完全开发手册的扩展-》coposer包-》workerman有详细说明:
#在项目根目录执行以下指令composer require topthink/think-worker
2.在项目根目录创建服务启动文件 server.php:
<?phpdefine('app_path', __dir__ . '/application/');define("bind_module", "server/worker");// 加载框架引导文件require __dir__ . '/thinkphp/start.php';
3、在application里创建server模块,并在server里创建控制器 worker.php:
<?phpnamespace app\server\controller;use think\worker\server;class worker extends server{ public function onworkerstart($work) { $handle=new collection(); $handle->add_timer(); }}
4.创建collection.php类
<?phpnamespace app\server\controller;use app\common\model\articlemodel;use think\controller;use workerman\lib\timer;class collection extends controller{ public function __construct(){ parent::__construct(); } public function add_timer(){ timer::add(10, array($this, 'index'), array(), true);//时间间隔过小,运行会崩溃 } /** * 采集数据 */ public function index(){ $total=$this->get_jinse(); return json(['msg'=>"此次采集数据共 $total 条。",'total'=>$total]); } /** * 获取金色财经资讯 */ public function get_jinse(){ $url="https://api.jinse.com/v4/live/list?limit=20"; $data=$this->get_curl($url); $data=json_decode($data); $data=$data->list[0]->lives; $validate=validate('article'); $items=[]; foreach ($data as $k=>$v){ preg_match('/【(.+?)】(.+)/u',$v->content,$content); if(!@$content[2]){ continue; } $list=array( 'source_id'=>$v->id, 'source'=>'金色财经', 'title'=>trim(preg_replace('/.*\|/','',$content[1])), 'content'=>$content[2], ); if($validate->check($list)){ $items[]=$list; } } if($items){ krsort($items); $model=new articlemodel(); $model->saveall($items); } return count($items); } public function get_curl($url){ $ch=curl_init(); curl_setopt($ch, curlopt_ssl_verifypeer, false); curl_setopt($ch,curlopt_url,$url); curl_setopt($ch,curlopt_header,0); curl_setopt($ch,curlopt_returntransfer,1); $output = curl_exec($ch); if($output === false ){ echo "curl error:".curl_error($ch); } curl_close($ch); // 4. 释放curl句柄 return $output; } }
5、启动服务 php server.php start
相关推荐:
thinkphp中模板继承是什么?模板继承的实例
如何利用php进行用户名和密码的验证(代码)
以上就是thinkphp5使用workerman定时器定时爬取站点内容的代码的详细内容。