>  기사  >  백엔드 개발  >  thinkphp5는 작업자 타이머를 사용하여 정기적으로 사이트 콘텐츠 코드를 크롤링합니다.

thinkphp5는 작업자 타이머를 사용하여 정기적으로 사이트 콘텐츠 코드를 크롤링합니다.

不言
不言원래의
2018-07-26 09:19:454227검색

이 기사의 내용은 thinkphp5가 특정 사이트의 뉴스 정보를 정기적으로 크롤링하는 방법에 대한 것입니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다. 전체 개발 설명서의 "coposer 패키지"에 작곡가를 통해 Workererman을 설치하는 방법에 대한 자세한 지침이 있습니다. Workererman:

#在项目根目录执行以下指令
composer require topthink/think-worker

2. 프로젝트 루트 디렉터리에 서비스 시작 파일 server.php를 생성합니다:

<?php

define(&#39;APP_PATH&#39;, __DIR__ . &#39;/application/&#39;);
define("BIND_MODULE", "server/Worker");
// 加载框架引导文件
require __DIR__ . &#39;/thinkphp/start.php&#39;;

3 . 애플리케이션 모듈에서 서버를 생성하고 서버에 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, &#39;index&#39;), array(), true);//时间间隔过小,运行会崩溃
    }
    /**
     * 采集数据
     */

    public function index(){

       
        $total=$this->get_jinse();
        return json([&#39;msg&#39;=>"此次采集数据共 $total 条。",&#39;total&#39;=>$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(&#39;Article&#39;);
        $items=[];

        foreach ($data as $k=>$v){

            preg_match(&#39;/【(.+?)】(.+)/u&#39;,$v->content,$content);

            if(!@$content[2]){
                continue;
            }


            $list=array(
                &#39;source_id&#39;=>$v->id,
                &#39;source&#39;=>&#39;金色财经&#39;,
                &#39;title&#39;=>trim(preg_replace(&#39;/.*\|/&#39;,&#39;&#39;,$content[1])),
                &#39;content&#39;=>$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는 작업자 타이머를 사용하여 정기적으로 사이트 콘텐츠 코드를 크롤링합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.