TP5使用workerman定时器定时爬取某站点新闻资讯等内容

22 篇文章 1 订阅
7 篇文章 2 订阅

1、首先通过 composer 安装workerman

tp5.0 只能用1.0.1版本

composer require topthink/think-worker 1.0.1

 2.在项目根目录创建服务启动文件 server.php:

<?php


define('APP_PATH', __DIR__ . '/application/');

define("BIND_MODULE", "api/Worker");

// 加载框架引导文件

require __DIR__ . '/thinkphp/start.php';

 3、在application里创建api模块,并在api里创建控制器 Worker.php:

<?php
namespace app\server\controller;
use think\worker\Server;
 
class Worker extends Server
{
 
    public function onWorkerStart($work)
    {
        $handle=new Collection();
        $handle->add_timer();
    }
 
 
}

4.创建Collection.php类

<?php
namespace 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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 ThinkPHP 6 中使用 Workerman 实现定时器可以通过添加自定义命令来实现。下面是一个简单的实现步骤: 1. 首先,确保你已经安装了 Workerman 和 think-worker 扩展。可以通过执行以下命令来安装它们: ``` composer require workerman/workerman think-worker ``` 2. 创建一个自定义的命令类来处理定时任务。在 app/command 目录下创建一个名为 Timer.php 的文件,并在该文件中编写以下代码: ```php <?php namespace app\command; use think\console\Command; use think\console\Input; use think\console\Output; class Timer extends Command { protected function configure() { $this->setName('timer:work')->setDescription('Workerman Timer'); } protected function execute(Input $input, Output $output) { $worker = new \Workerman\Worker(); $worker->onWorkerStart = function($worker) { // 在这里编写定时任务的处理逻辑 \Workerman\Lib\Timer::add(1, function() { echo "定时任务执行\n"; }); }; \Workerman\Worker::runAll(); } } ``` 3. 注册自定义命令。在 config/console.php 中的 commands 数组中添加命令类的命名空间路径: ```php 'commands' => [ 'app\command\Timer', ], ``` 4. 运行定时任务。通过执行以下命令来运行定时任务: ``` php think timer:work ``` 这样,定时任务就会在后台运行,并每秒钟执行一次。你可以在 `$worker->onWorkerStart` 回调函数中编写具体的定时任务逻辑。请根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值