<?php
ini_set('display_errors', 1);      // 显示错误
ini_set('display_startup_errors', 1); // 显示 PHP 启动时的错误
error_reporting(E_ERROR);            // 记录所有级别的错误

include_once dirname(dirname(__FILE__)).'/base/dealBase.php';

define('DEAL_FLAG', $argv[0]);
define('PROC_CODE', $argv[1]);

class getWeiboVideo extends dealBase {

    private $task_key = _RQ_SPIDER_WEIBO_DATA;

    public function setPara() {
        $this->spiderdaemon = SPIDER_WEIBO_DATA;
        $this->processnum = $GLOBALS['DAEMON_NUMLIMIT'][SPIDER_WEIBO_DATA];
    }

    public function deal() {
        $obj = new mSpider();
        $rdobj = $obj->initRedis();

        $ipinfo = $rdobj->get(_RQ_SPIDER_USE_IP);
        $ipdata = json_decode($ipinfo, true);
        if (!$ipinfo && $rdobj->llen($this->task_key) + 0 >= 0) {
            $ipdata = $obj->getZmhttpIp(_RQ_SPIDER_USE_IP);
        }
        if (empty($ipdata)) {
            sleep(2);
            return false;
        }

        $rq_data = $rdobj->rpop($this->task_key);
        if (empty($rq_data)) exit();
//        $ipdata['ip'] = '127.0.0.1';
//        $ipdata['port'] = '3306';

        $obj->proxy_ip = $ipdata['ip'];
        $obj->proxy_port = $ipdata['port'];

        $baselog = $rq_data . "|" . $ipdata['ip'] . "|" . $ipdata['port'] . "|" . PROC_CODE . "|";
        $obj->writeLog('spider', $this->spiderdaemon . '_video_progress.log', $baselog);

        $mweibo = new mWeibo();
        $data = $mweibo->getWeiboById($rq_data);
        if(empty($data['video_url'])) return false;

        $detail= $obj->getWapWeibo($data['wid']);
        if(!$detail) {
            $rdobj->lpush($this->task_key, $rq_data);
            $obj->writeLog('spider', $this->spiderdaemon . '_video_error.log', $baselog.$data['wid'].'|'.$obj->getError());
            return false;
        }
        if($detail == 'error'){
            $rdobj->lpush($this->task_key, $rq_data);
            $obj->writeLog('spider', $this->spiderdaemon . '_video_error.log', $baselog.$data['wid'].'|获取数据为空');
            return false;
        }

        $obj->writeLog('spider', $this->spiderdaemon . '_video_success.log', $baselog.$data['wid']);

        $aliobj = new mAliyunOSS();

        //保存视频
        $savepath = $mweibo->getWeiboDataVideoSavePath($data['wid'], $data['created_at']);
        $is_exist = $aliobj->isExist(ALIYUN_OSS_BUCKET_WEIBO_DATA, $savepath);
        if (!$is_exist) {
            $videoData = $obj->getWeiboVideo($detail['video_url']);
            if(!$videoData){
                $rdobj->lpush($this->task_key, $rq_data);
                $obj->writeLog('spider', $this->spiderdaemon . '_video_get_error.log', $baselog.$data['wid'].'|下载失败|'.$detail['video_url'].'|'.$obj->curl_err);
                return false;
            }

            $res = $aliobj->simpleUploadStr(ALIYUN_OSS_BUCKET_WEIBO_DATA, $savepath, $videoData);
            if(!$res) {
                $rdobj->lpush($this->task_key, $rq_data);
                $obj->writeLog('spider', $this->spiderdaemon . '_video_get_error.log', $baselog.$data['wid'].'|上传失败|'.$aliobj->getError());
            }
        }

        if(empty($detail['video_cover_url'])){
            $obj->writeLog('spider', $this->spiderdaemon . '_video_success.log', $baselog.$data['wid']);
            return true;
        }

        $cover_name = !empty($detail['video_cover']) ? $detail['video_cover'] : $data['wid'];
        $cover_savepath = $mweibo->getWeiboDataPicSavePath($cover_name, $data['created_at']);

        $is_exist = $aliobj->isExist(ALIYUN_OSS_BUCKET_WEIBO_DATA, $cover_savepath);
        if(!$is_exist){
            $params = array();
            $headers = array(
                "Referer: https://weibo.com"
            );
            $imgageData = $obj->getRequest($detail['video_cover_url'], $params, $headers);
            if(!$imgageData){
                $obj->writeLog('spider', $this->spiderdaemon . '_video_cover_error.log', $baselog.$data['wid'].'|下载失败|'.$detail['video_cover_url']);
                return false;
            }

            $res = $aliobj->simpleUploadStr(ALIYUN_OSS_BUCKET_WEIBO_DATA, $cover_savepath, $imgageData);
            if(!$res) {
                $obj->writeLog('spider', $this->spiderdaemon . '_video_cover_error.log', $baselog.$data['wid'].'|上传失败|'.$aliobj->getError());
            }

            $res = $mweibo->updateWeibo($data['id'], array('video_cover' => $cover_name));
            if(!$res) {
                $obj->writeLog('spider', $this->spiderdaemon . '_video_cover_error.log', $baselog.$data['wid'].'|更新失败|'.$mweibo->getError());
            }
        }

        $obj->writeLog('spider', $this->spiderdaemon . '_video_cover_success.log', $baselog.$data['wid']);
        return true;
    }
}

new getWeiboVideo();