Ejemplo n.º 1
0
/**
 *  通过访问的文章uv推文章
 *  @params int 	$num 		从多少条数据中随机取数据。例如从100条数据中随机取数据。
 *  @parmas int 	$getNum 	返回的数据条数的数量,例如需要补充21条数据,此时传21 就好了
 *  @params array 	$unDocArr 	查询数据,需要排除进行的文章id集合,一维数组。
 * 	@params boolean	$is_miss 	用于标记是否是真正需要推的数据,true表示错过,不是真正要推的
 */
function get_data_by_hot_v3($num = 100, $getNum = 36, $unDocArr = array(), $is_miss = true)
{
    global $db_guess;
    # 对一部分排重
    if ($unDocArr) {
        $unStr = implode(',', $unDocArr);
        $whereStr = 'where docId not in(' . $unStr . ') ';
    } else {
        $whereStr = '';
    }
    $sql = 'SELECT docId,uv from article_monitor_v2 ' . $whereStr . ' ORDER BY uv desc limit ' . $num;
    $result2 = $db_guess->get_results($sql);
    # 在100个单元中随机取出36个单元,并按uv排倒序
    if ($result2) {
        # 将可能存在的字串类型转成int型
        $result2_1 = array();
        foreach ($result2 as $key => $value) {
            $value1 = array();
            $value1['docId'] = (int) $value['docId'];
            $value1['uv'] = (int) $value['uv'];
            $result2_1[$key] = $value1;
        }
        $result2 = $result2_1;
        $res1 = array_rand($result2, $getNum);
        if ($res1) {
            $newArray1 = array();
            foreach ($res1 as $key => $value) {
                $newArray1[] = $result2[$value];
            }
            $newArray2 = array();
            foreach ($newArray1 as $key => $value) {
                $newArray2[$value['docId']] = $value['uv'];
            }
            arsort($newArray2);
            # 根据docId获取文章的title,short_title,pic_src
            # 重组一个去获取文章信息的docId集合
            $docArr = array_keys($newArray2);
            $dataArr = get_data_by_docid($docArr);
            # 如果标记了不是命中推送的话,就加上url参数标记
            if ($is_miss) {
                foreach ($dataArr as $key => $value) {
                    $dataArr[$key]['url'] .= '&vlike=6';
                }
            }
            # 将含有文章信息的数据用其docId作为键
            $newArray3 = array();
            foreach ($dataArr as $key => $value) {
                $newArray3[$value['document_id']] = $value;
            }
            //var_dump($newArray3);exit('680_1');
            # 获取之后,按照uv倒序的顺序返回
            $newArray4 = array();
            foreach ($newArray2 as $key => $value) {
                $newArray4[$key] = $newArray3[$key];
            }
        }
    } else {
        $newArray4 = array();
    }
    return $newArray4;
}
Ejemplo n.º 2
0
/**
 *  通过访问的文章uv推文章
 *  @params int 	$num 		从多少条数据中随机取数据。例如从100条数据中随机取数据。
 *  @parmas int 	$getNum 	返回的数据条数的数量,例如需要补充21条数据,此时传21 就好了
 *  @params array 	$unDocArr 	查询数据,需要排除进行的文章id集合,一维数组。
 * 	@params boolean	$is_miss 	用于标记是否是真正需要推的数据,true表示错过,不是真正要推的
 */
function get_data_by_hot_v3($num = 200, $getNum = 36, $unDocArr = array(), $is_miss = true)
{
    global $db_doc_read, $doc_id, $dataNum;
    # 对一部分排重
    if ($unDocArr) {
        $unStr = implode(',', $unDocArr);
        $whereStr = ' where docId not in(' . $unStr . ') ';
    } else {
        $whereStr = ' where 1 AND  docId<>' . $doc_id . '  ';
    }
    // 	$sql = 'SELECT docId,uv from article_monitor_v2 '.$whereStr.' ORDER BY uv desc limit '.$num;
    $sql = 'SELECT docId,uv from article_monitor_v2  ORDER BY uv desc limit ' . $num;
    // 	$result2 = $db_doc_read->get_results($sql);
    /**
     * @desc START 杨叔说搞一个缓存 add by 任新强 2015-12-30 12:05:21
     */
    $mongokey22 = 'zol:cms:get:data:hot:v3:mongo:by:ryb';
    $mongoDate22 = ZOL_Api::run("Kv.MongoCenter.get", array('module' => 'cms', 'key' => $mongokey22));
    if (!$mongoDate22) {
        $result2 = $db_doc_read->get_results($sql);
        ZOL_Api::run("Kv.MongoCenter.set", array('module' => 'cms', 'key' => $mongokey22, 'data' => $result2, 'life' => 60 * 60 * 4));
    } else {
        $result2 = $mongoDate22;
    }
    if ($unDocArr) {
        $i = 0;
        $results = array();
        foreach ($result2 as $v) {
            if ($i > 99) {
                break;
            }
            if (in_array($v['docId'], $unDocArr)) {
                continue;
            }
            array_push($results, $v);
            $i++;
        }
    }
    /**
     * @desc END
     */
    # 在100个单元中随机取出36个单元,并按uv排倒序
    if ($results || $result2) {
        $results = $results ? $results : $result2;
        # 将可能存在的字串类型转成int型
        $result2_1 = array();
        foreach ($results as $key => $value) {
            $value1 = array();
            $value1['docId'] = (int) $value['docId'];
            $value1['uv'] = (int) $value['uv'];
            $result2_1[$key] = $value1;
        }
        $results = $result2_1;
        $res1 = array_rand($results, $getNum);
        if (!is_array($res1)) {
            $res1 = array($res1);
        }
        if ($res1) {
            $newArray1 = array();
            foreach ($res1 as $key => $value) {
                $newArray1[] = $results[$value];
            }
            $newArray2 = array();
            foreach ($newArray1 as $key => $value) {
                $newArray2[$value['docId']] = $value['uv'];
            }
            arsort($newArray2);
            # 根据docId获取文章的title,short_title,pic_src
            # 重组一个去获取文章信息的docId集合
            $docArr = array_keys($newArray2);
            $dataArr = get_data_by_docid($docArr);
            # 如果标记了不是命中推送的话,就加上url参数标记  // $is_miss  文章页的“猜你喜欢”不用添加vlike=miss参数  change 20150804
            if ($is_miss) {
                foreach ($dataArr as $key => $value) {
                    $dataArr[$key]['url'] .= '?vlike=miss&from=article_guess';
                }
            }
            # 将含有文章信息的数据用其docId作为键
            $newArray3 = array();
            foreach ($dataArr as $key => $value) {
                $newArray3[$value['document_id']] = $value;
            }
            //var_dump($result2);exit('634_1');
            # 获取之后,按照uv倒序的顺序返回
            $newArray4 = array();
            foreach ($newArray2 as $key => $value) {
                $newArray4[$key] = $newArray3[$key];
            }
        }
    } else {
        $newArray4 = array();
    }
    return $newArray4;
}