Heim  >  Artikel  >  Backend-Entwicklung  >  thinkphp5 verwendet den Workerman-Timer, um den Inhaltscode der Website regelmäßig zu crawlen

thinkphp5 verwendet den Workerman-Timer, um den Inhaltscode der Website regelmäßig zu crawlen

不言
不言Original
2018-07-26 09:19:454218Durchsuche

Der Inhalt dieses Artikels handelt von der Verwendung des Workerman-Timers zum regelmäßigen Crawlen von Nachrichteninformationen einer bestimmten Website. Ich hoffe, dass er Ihnen helfen kann 🎜>1. Installieren Sie zuerst workerman über Composer. Detaillierte Anweisungen finden Sie im vollständigen Entwicklungshandbuch für thinkphp5 – „coposer package-“workerman:

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

2. Erstellen Sie die Dienststartdatei server.php Stammverzeichnis:

<?php

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

3. Erstellen Sie das Servermodul in der Anwendung und erstellen Sie den Controller Worker.php im Server:

<?php
namespace app\server\controller;
use think\worker\Server;

class Worker extends Server
{

    public function onWorkerStart($work)
    {
        $handle=new Collection();
        $handle->add_timer();
    }


}

4. Erstellen Sie die Collection.php-Klasse

<?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. Starten Sie den Dienst php server.php start

Verwandte Empfehlungen:

Was ist Vorlagenvererbung in Thinkphp? Beispiel für die Vorlagenvererbung

So verwenden Sie PHP zur Überprüfung von Benutzername und Passwort (Code)

Das obige ist der detaillierte Inhalt vonthinkphp5 verwendet den Workerman-Timer, um den Inhaltscode der Website regelmäßig zu crawlen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn