この記事の内容は、thinkphp5 がワーカーマン タイマーを使用して、特定のサイトのニュース情報を定期的にクロールするというものです。非常に詳しい内容です。困っている友人は参考にしてください。お役に立てれば幸いです。
1. まず、composer を通じて workerman をインストールします。 thinkphp5 完全開発マニュアルの拡張子 - "coposer package -" 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. アプリケーションでサーバー モジュールを作成し、サーバーでコントローラー 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; } }
Thinkphp のテンプレート継承とは何ですか?テンプレート継承の例
PHP を使用してユーザー名とパスワードを確認する方法 (コード)
以上がthinkphp5 は、ワーカーマン タイマーを使用して、サイト コンテンツ コードを定期的にクロールします。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。