thinkphp5使用workerman定時器定時爬取網站內容的代碼

來源:互聯網
上載者:User
本篇文章給大家分享的內容是關於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進行使用者名稱和密碼的驗證(代碼)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.