📄 caijimodel.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 + -