mirror of https://gitee.com/zorlan/skycaiji
179 lines
6.3 KiB
PHP
179 lines
6.3 KiB
PHP
<?php
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| SkyCaiji (蓝天采集器)
|
|
|--------------------------------------------------------------------------
|
|
| Copyright (c) 2018 https://www.skycaiji.com All rights reserved.
|
|
|--------------------------------------------------------------------------
|
|
| 使用协议 https://www.skycaiji.com/licenses
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
|
|
namespace skycaiji\admin\controller;
|
|
|
|
class Collector extends BaseController {
|
|
public function indexAction(){
|
|
return $this->fetch();
|
|
}
|
|
|
|
public function setAction(){
|
|
$taskId=input('task_id/d',0);
|
|
$mtask=model('Task');
|
|
$mcoll=model('Collector');
|
|
$taskData=$mtask->getById($taskId);
|
|
if(empty($taskData)){
|
|
$this->error(lang('task_error_empty_task'));
|
|
}
|
|
if(empty($taskData['module'])){
|
|
|
|
$this->error(lang('task_error_null_module'));
|
|
}
|
|
if(!in_array($taskData['module'],config('allow_coll_modules'))){
|
|
$this->error(lang('coll_error_invalid_module'));
|
|
}
|
|
$collData=$mcoll->where(array('task_id'=>$taskData['id'],'module'=>$taskData['module']))->find();
|
|
if(request()->isPost()){
|
|
$effective=input('effective');
|
|
if(empty($effective)){
|
|
|
|
$this->error(lang('coll_error_empty_effective'));
|
|
}
|
|
$name=trim(input('name'));
|
|
$module=trim(input('module'));
|
|
$module=strtolower($module);
|
|
if(!in_array($module,config('allow_coll_modules'))){
|
|
$this->error(lang('coll_error_invalid_module'));
|
|
}
|
|
$config=input('post.config/a',null,'trim');
|
|
$config=array_array_map('trim',$config);
|
|
|
|
|
|
$acoll=controller('admin/C'.$module,'event');
|
|
$config=$acoll->setConfig($config);
|
|
|
|
$newColl=array('name'=>$name,'module'=>$module,'task_id'=>$taskId,'config'=>serialize($config),'uptime'=>NOW_TIME);
|
|
$collId=$collData['id'];
|
|
if(empty($collData)){
|
|
$collId=$mcoll->add_new($newColl);
|
|
}else{
|
|
$mcoll->edit_by_id($collId,$newColl);
|
|
}
|
|
if($collId>0){
|
|
$tab_link=trim(input('tab_link'),'#');
|
|
$this->success(lang('op_success'),'Collector/set?task_id='.$taskId.($tab_link?'&tab_link='.$tab_link:''));
|
|
}else{
|
|
$this->error(lang('op_failed'));
|
|
}
|
|
}else{
|
|
if(!empty($collData)){
|
|
$collData['config']=unserialize($collData['config']);
|
|
}
|
|
$GLOBALS['content_header']=lang('coll_set').lang('separator').lang('task_module_'.$taskData['module']);
|
|
$GLOBALS['breadcrumb']=breadcrumb(array(array('url'=>url('Task/edit?id='.$taskData['id']),'title'=>lang('task').lang('separator').$taskData['name']),lang('coll_set')));
|
|
$this->assign('collData',$collData);
|
|
$this->assign('taskData',$taskData);
|
|
return $this->fetch();
|
|
}
|
|
}
|
|
/*列表*/
|
|
public function listAction(){
|
|
$page=max(1,input('p/d',0));
|
|
$module=input('module');
|
|
$cond=array();
|
|
$taskCond=array();
|
|
if(!empty($module)){
|
|
$cond=array('module'=>$module);
|
|
}
|
|
|
|
$mcoll=model('Collector');
|
|
$limit=20;
|
|
$count=$mcoll->where($cond)->count();
|
|
$collList=$mcoll->where($cond)->paginate($limit,false,paginate_auto_config());
|
|
|
|
$pagenav = $collList->render();
|
|
$this->assign('pagenav',$pagenav);
|
|
$collList=$collList->all();
|
|
$collList=empty($collList)?array():$collList;
|
|
if($count>0){
|
|
$taskIds=array();
|
|
foreach ($collList as $coll){
|
|
$taskIds[$coll['task_id']]=$coll['task_id'];
|
|
}
|
|
if(!empty($taskIds)){
|
|
|
|
$taskCond['id']=array('in',$taskIds);
|
|
$taskNames=model('Task')->where($taskCond)->column('name','id');
|
|
$this->assign('taskNames',$taskNames);
|
|
}
|
|
}
|
|
|
|
$this->assign('collList',$collList);
|
|
return $this->fetch('list'.(input('tpl')?'_'.input('tpl'):''));
|
|
}
|
|
/*保存到云端*/
|
|
public function save2storeAction(){
|
|
$coll_id=input('coll_id/d',0);
|
|
$mcoll=model('Collector');
|
|
$collData=$mcoll->where(array('id'=>$coll_id))->find();
|
|
if(empty($collData)){
|
|
$this->error(lang('coll_error_empty_coll'));
|
|
}
|
|
$collData=$collData->toArray();
|
|
if(!in_array($collData['module'],config('allow_coll_modules'))){
|
|
$this->error(lang('coll_error_invalid_module'));
|
|
}
|
|
$config=unserialize($collData['config']);
|
|
if(empty($config)){
|
|
$this->error('规则不存在');
|
|
}
|
|
if(empty($config['source_url'])){
|
|
$this->error('请先完善起始页网址!');
|
|
}
|
|
if(empty($config['field_list'])){
|
|
$this->error('请先完善字段列表!');
|
|
}
|
|
$this->assign('collData',$collData);
|
|
return $this->fetch();
|
|
}
|
|
/*导出规则*/
|
|
public function exportAction(){
|
|
$coll_id=input('coll_id/d',0);
|
|
$mcoll=model('Collector');
|
|
$collData=$mcoll->where(array('id'=>$coll_id))->find();
|
|
if(empty($collData)){
|
|
$this->error(lang('coll_error_empty_coll'));
|
|
}
|
|
$config=unserialize($collData['config']);
|
|
if(empty($config)){
|
|
$this->error('规则不存在');
|
|
}
|
|
$taskData=model('Task')->getById($collData['task_id']);
|
|
$name=($collData['name']?$collData['name']:$taskData['name']);
|
|
$module=strtolower($collData['module']);
|
|
|
|
set_time_limit(600);
|
|
$collector=array(
|
|
'name'=>$name,
|
|
'module'=>$module,
|
|
'config'=>serialize($config),
|
|
);
|
|
$txt='/*skycaiji-collector-start*/'.base64_encode(serialize($collector)).'/*skycaiji-collector-end*/';
|
|
$name='规则_'.$name;
|
|
ob_start();
|
|
header("Expires: 0" );
|
|
header("Pragma:public" );
|
|
header("Cache-Control:must-revalidate,post-check=0,pre-check=0" );
|
|
header("Cache-Control:public");
|
|
header("Content-Type:application/octet-stream" );
|
|
|
|
header("Content-transfer-encoding: binary");
|
|
header("Accept-Length: " .mb_strlen($txt));
|
|
if (preg_match("/MSIE/i", $_SERVER["HTTP_USER_AGENT"])) {
|
|
header('Content-Disposition: attachment; filename="'.urlencode($name).'.skycaiji"');
|
|
}else{
|
|
header('Content-Disposition: attachment; filename="'.$name.'.skycaiji"');
|
|
}
|
|
echo $txt;
|
|
ob_end_flush();
|
|
}
|
|
} |