thinkphp5使用workerman定時器定時爬取某站點新聞資訊等內容


1、首先通過 composer 安裝workerman,在thinkphp5完全開發手冊的擴展-》coposer包-》workerman有詳細說明:

#在項目根目錄執行以下指令
composer require topthink/think-worker

 2.在項目根目錄創建服務啟動文件 server.php:

<?php

define('APP_PATH', __DIR__ . '/application/');
define("BIND_MODULE", "server/Worker");
// 加載框架引導文件
require __DIR__ . '/thinkphp/start.php';

 3、在application里創建server模塊,並在server里創建控制器 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM