⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 caijimodel.php

📁 a short sketch about linux syntex lines.
💻 PHP
字号:
<?php
/*
秀影Ver6.0.1数据采集工具类
开发商天天网络秀影
site:http://www.vodcms.com
email:jdzcn_net@hotmail.com
未结果授权不得才其他源码中使用本类.
*/
class CaijiModel {
	public $max;
	public $num;
	private $db;
	public $offset;
	public $Socket;
	public $errors;
	public function __construct(){
		$this->db = $GLOBALS['DB'];
		if (file_exists(ROOT.'cache/caiji') === false){
			mkdir(ROOT.'cache/caiji');
		}
	}
	/*过滤空地址的路径*/
	public function filter($array){
		if (is_array($array)){
			$data = array();
			foreach($array as $url){
				if (strlen(trim($url))>1){
					$data[] = $url;
				}
			}
			return $data;
		}else{
			return $array;
		}
	}
	/*
	保存平影片数据库中的图片到本地服务器
	*/
	public function savePictureToLocale(){
		$filter = array('.jpg', '.gif', '.bmp','.png','.psd','.jpeg');
		$Socket = new Easy_Socket();
		$IO = new Easy_Filesystem();
		$Page = new Page();
		$sql = 'SELECT movid,pic,otherpic FROM '.VODCMS_MOVIE.' WHERE pic LIKE \'http://%\' order by movid desc limit '.(int)$this->max;
		$total = $this->_DB->getCount($sql);
		if ($total == 0){return true;};
		$allmovie = $this->_DB->FetAll($sql);
		foreach ($allmovie as $movie){
			if ( in_array( $ext , $filter )){
				$filename = $this->savepic( trim($movie['pic']) );
				$this->_DB->update(VODCMS_MOVIE, array('pic'=> $filename), array('movid'=> $movie['movid']));
			}else{
				$this->_DB->update(VODCMS_MOVIE, array('pic'=> 'upload/nopic.gif'), array('movid'=> $movie['movid']));
			}
		}
		return false;
	}
	/*
	获取远程的图片到本地
	@param string 远程图片的地址
	return string 返回保存到本地目录后相对路径失败返回原路径
	*/
	public function savepic($url){
		$file= parse_url($url);
		$filename = null;
		if ( !preg_match('/http:\/\/(.+?)/', $url) )
		{
			return $url;
		}
		$ext = strtolower( strrchr($url, '.') );	//后缀名
		if (!$ext){$ext = '.jpg';}
		if (in_array($ext, array('.jpg','.gif', '.bmp', '.png', '.jpeg'))){
			$IO = new Easy_Filesystem();
			if ( is_object($this->Socket) === false){
				$this->Socket = new Easy_Socket();
			}
			if ( $this->Socket->Connect($file['host']) === true){	//链接服务器出错
				if ( $this->Socket->setQuery( $file ) === false){	//服务器返回内部错误时
					
					systemlog::set('采集图片'.$movie['pic'].'时对方服务器出现错误提示:'.$this->Socket->error);
					return $url;
				}else{
					$data = $this->Socket->getContent();
					if ($data['body']){
						$filename = $IO->makedir( 'upload/image/movie/'.date('Y/m/d')).'/'.substr(md5($url),8, 16).$ext;	//保存到文件
						$IO->wFile(ROOT.$filename , $data['body']);
						return $filename;
					}else{
						return $url;
					}
				}
			}
		}
		return $url;
	}
	/*
	采集规则录入
	*/
	public function addRule($post){
		if ($post['name']){
			$db = $GLOBALS['DB'];
			$select = $db->select();
			$select->from(VODCMS_RULES);
			$select->where(array('name'=>$post['name']));
			$sql = $select->toString();
			$row = $db->fetRow($sql);
			unset($post['player']);
			if ($row['id'] <= 0){
				$Request = new Easy_Controller_Request();
				
				$post['addtime'] = time();
				$post['auther'] = $Request->getCookie('admin');
				$post['locked'] = 0;
				return $db->insert(VODCMS_RULES, $post);
			}else{
				return $db->update(VODCMS_RULES, $post, array('id'=> $row['id']));
			}
		}else{
			return false;
		}
	}
	/**/
	public function getRow($where = array()){
		$db = $GLOBALS['DB'];
		$select = $db->select();
		$select->from(VODCMS_RULES);
		$select->where( $where );
		$sql = $select->toString();
		return $db->fetRow($sql);
	}
	/*列出全部规则记录*/
	public function getAll($where = null){
		$db = $GLOBALS['DB'];
		$select = $db->select();
		$select->from(VODCMS_RULES);
		$select->where( $where );
		$sql = $select->toString();
		$data = array();
		foreach($db->fetAll($sql) as $row){
			$row['moviecount'] = $this->getCount( $row['id'] );
			$data[] = $row;
		}
		unset($row);
		return $data;
	}
	/*
	获取指定规则已采集影片数
	*/
	public function getCount($ruleid){
		$select = $this->db->select();
		$select->from(VODCMS_CAIJI);
		$select->where( array('rulesid'=> $ruleid) );
		$sql = $select->toString();
		return $this->db->getCount($sql);
	}
	/*开始指定规则的数据*/
	public function start($id, $link=null){
		$row = $this->getRow( array('id'=> $id ));
		$db = $GLOBALS['DB'];
		//echo $url;
		if ( empty($link) ){
			$link = $row['url'];
		}
		if ( !($contents = $this->getContent($link)) ){
			echo $contents;
			echo $link.'获取失败';
			exit;
		}
		preg_match_all( $this->format($row['mlink']) , $contents , $temp);	//获取所有的影片连接地址
		if( count($temp[1]) > 0){
			foreach($temp[1] as $url){
				$sql = 'SELECT id FROM '.VODCMS_CAIJI.' WHERE url=\''.$row['name'].$url.'\' limit 1';
				$result = $db->fetRow($sql);
				if ($result===false){
					$db->insert(VODCMS_CAIJI, array('rulesid'=> $id, 'url'=> $row['name'].$url, 'locked'=>0) );
					$this->num++;
				}else{
					$this->errors++;
				}
				if( $this->errors > 20) {
					return true;
				}
			}
		}
		if ( $row['nextpage'] ){	//若设置了分页
			preg_match($this->format($row['nextpage']) , $contents , $temp);	//获取下一页地址
			$nextpagelink = $row['name'].$temp[1];
			if ( substr($nextpagelink, 0, 7) == 'http://' && $nextpagelink != $url && $nextpagelink != $row['name'] ){
				
				$this->offset = $this->offset+1;
				if ($this->offset % 5 == 0){		//每次采集5页就刷新
					return $nextpagelink;
				}
				return $this->start($id, $nextpagelink);
			}
		}
		return true;
	}
	/*格式化采集规则*/
	public function format($string){
		$pattern = null;
		$pattern = '/'.preg_quote($string, '/').'/i';
		$pattern  = str_replace(array('%s','%d'), array('(.+?)','(\d+)'),$pattern );
		return $pattern;
	}
	/*获取影片页面连接地址*/
	public function getmovielink($where = null) {
		$select = $this->db->select();
		$select->From(VODCMS_CAIJI);
		$select->where($where);
		$select->order('id DESC');
		$sql = $select->toString();
		return $this->db->fetAll($sql);
	}
	/**/
	public function getmoviedata($id, $start=0) {
		$select = $this->db->select();
		$select->From(VODCMS_CAIJI);
		$select->where( array('rulesid'=> $id, 'locked'=>0) );
		$select->order('id ASC');
		$start = $start ? $start : 1;
		$page = ($start - 1) *10;
		$select->limit($page.',10');
		$sql = $select->toString();
		$da = $this->getRow( array('id'=> $id) );
		$sqls = 'SELECT sid FROM '.VODCMS_SERVER.' WHERE helixserver=\'\'';
		$server = $this->db->fetRow($sqls);
		if( !$server['sid']) {
			$server['sid'] = 1;
		}
		$domain = substr($da['url'], 0, strrpos($da['url'], '/')).'/';
		$allrows = $this->db->fetAll($sql);
		if( count($allrows) > 0) {
			foreach($allrows  as $row){
				$contents = $this->getContent($row['url']);
				preg_match($this->format($da['title']).'s', $contents, $temp);
				$movie['name'] = trim(strip_tags($temp[1]));
				$movie['server'] = $server['sid'];
				preg_match($this->format($da['actor']).'s', $contents, $temp);
				$movie['actor'] = trim(strip_tags($temp[1]));
				preg_match($this->format($da['area']).'s', $contents, $temp);
				$movie['area'] = str_replace('地区', '', trim(strip_tags($temp[1])));
				preg_match($this->format($da['category']).'s', $contents, $temp);
				$movie['category'] = trim(strip_tags($temp[1]));
				$movie['player'] = $da['play'];
				preg_match($this->format($da['director']).'s', $contents, $temp);
				$movie['director'] = trim(strip_tags($temp[1]));
				preg_match($this->format($da['picture']).'s', $contents, $temp);
				$movie['pic'] = trim(strip_tags($temp[1]));
				preg_match($this->format($da['contents']).'s', $contents, $temp);
				$movie['content'] = trim(strip_tags($temp[1]));
				$movie['addtime'] = time();
				$movie['referer'] = $row['url'];
				//$movie['modifytime'] = time();
				/*if( strtolower(substr($movie['pic'], 0 , 7)) != 'http://') {
					$movie['pic'] = $this->savepic($da['name'].$movie['pic']);
				}else{
					$movie['pic'] = $this->savepic($da['name'].$movie['pic']);
				}*/
				if ($movie['pic']){
					if( strtolower(substr( $movie['pic'], 0 ,7)) != 'http://') {
						$movie['pic'] = $domain.$movie['pic'];
					}
				}
				$movie['caijiid'] = $row['id'];
				$movieobject = new moviemodel(); //创建影片模型实例
				if( ! $movieobject->exists( array('title'=> $movie['name'])) ) {
					$this->db->insert(VODCMS_CAIJIMOVIE, $movie);
					$movid = $this->db->lastInsertId();
					/*播器地址*/
					preg_match_all($this->format($da['playurl']).'s', $contents, $temp);
					$i =0;
					foreach($temp[1] as $player){
						$i++;
						$play = $domain.str_replace('$1', $player, $da['urllink']);
						$this->db->insert(VODCMS_CAIJIURL, 
						array('playurl'=>$play, 'caijimovid'=> $movid, 'rulesid'=> $da['id']));
					}
					if ($i>0){
						$this->db->update(VODCMS_CAIJI, array('locked'=>1), array('id'=> $row['id']));
					}
					unset($contents, $temp);
				}else{
					$this->db->update(VODCMS_CAIJI, array('locked'=>1), array('id'=> $row['id']));
				}
			}
			return false;
		}else{
			return true;
		}
	}
	/*获取指定页面的数据*/
	public function getContent($url){
		try{
			if ( substr($url, 0, 7) == 'http://'){
				if (! ($contents = @file_get_contents($url) )){
					echo $url._('采集失败');
					return NULL;
				}else{
					if ($contents){
						return stripcslashes($contents);
					}
				}
			}else{
				throw new Exception($url.'不是有效的URL地址');
			}
		}catch (Exception  $e){
			print_r($e->getMessage());
			return NULL;
		}
	}
}?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -