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