<?php
/**
 * 汇总用户行为数据日增量
 * @package crontab
 */

include_once(dirname(dirname(dirname(__FILE__))) . "/library/publicBase.php");

define('DATE', $argv[1]);

class spiderBehaviorDelta {
    public function __construct() {
        //删除半年前的数据
        $obj = new mWeiboBehavior();
        $six_month_ago = date('Y-m-d', strtotime('-1 month'));
        $obj->deleteExpireBehaviorDelta($six_month_ago);

        //统计今日增量
        $today = date('Y-m-d',strtotime(DATE));
        if(DATE == '') $today = date('Y-m-d');

        $page_num = 1;
        $page_size = 2000;
        while (true) {
            $today_data = $obj->getSpiderBehavior($today, 0, 0, $page_num, $page_size);
            if (empty($today_data)) break;
            $page_num++;

            $today_data = array_column($today_data, null, 'wid');

            $wids = array_column($today_data, 'wid');

            $yesterday = date('Y-m-d', strtotime('-1 day', strtotime($today)));
            $yesterday_data = $obj->getBehaviorByWids($wids, $yesterday);
            $yesterday_data = array_column($yesterday_data, null, 'wid');

            $three_day_ago = date('Y-m-d', strtotime('-2 day', strtotime($today)));
            $three_day_ago_data = $obj->getBehaviorByWids($wids, $three_day_ago);
            $three_day_ago_data = array_column($three_day_ago_data, null, 'wid');

            //将前天的数据查询出来做兼容
            if (empty($yesterday_data) && empty($three_day_ago_data)) return true;

            foreach ($today_data as $k => $v) {
                $reposts_delta = 0;
                $comments_delta = 0;
                $attitudes_delta = 0;

                if (isset($yesterday_data[$k])) {
                    $reposts_delta = $v['reposts_count'] - $yesterday_data[$k]['reposts_count'];
                    $comments_delta = $v['comments_count'] - $yesterday_data[$k]['comments_count'];
                    $attitudes_delta = $v['attitudes_count'] - $yesterday_data[$k]['attitudes_count'];
                }

                if (isset($three_day_ago_data[$k]) && !isset($yesterday_data[$k])) {
                    $reposts_delta = $v['reposts_count'] - $three_day_ago_data[$k]['reposts_count'];
                    $comments_delta = $v['comments_count'] - $three_day_ago_data[$k]['comments_count'];
                    $attitudes_delta = $v['attitudes_count'] - $three_day_ago_data[$k]['attitudes_count'];
                }

                $delta = array(
                    'uid' => $v['uid'],
                    'wid' => $v['wid'],
                    'reposts_delta' => $reposts_delta,
                    'comments_delta' => $comments_delta,
                    'attitudes_delta' => $attitudes_delta,
                    'date' => $v['date'],
                );

                $res = $obj->saveBehaviorDelta($delta);
                if (!$res) {
                    $this->writeLog('spider', 'insert_error.log', json_encode($delta));
                }
            }
        }

        return true;
    }
}

new spiderBehaviorDelta();