<?php namespace LibModels\Wap\Guang; use Api\Yohobuy; use Configs\CacheConfig; use Plugin\Cache; /** * 逛资讯详情相关的数据模型 * * @name DetailData * @package LibModels/Wap/Guang * @copyright yoho.inc * @version 1.0 (2015-10-10 14:49:15) * @author fei.hong <fei.hong@yoho.cn> */ class DetailData { const URI_PACKAGE_ARTICLE = 'guang/service/v2/article/'; const URI_PACKAGE_AUTHOR = 'guang/service/v1/author/'; /** * 逛资讯详情页数据封装 * * @param int $id 内容ID * @param bool $isApp 标识是否是APP访问 * @return array */ public static function package($id, $isApp = false) { $result = array(); $result['getAuthor'] = array(); $result['getArticle'] = array(); $result['getArticleContent'] = array(); $result['getBrand'] = array(); $result['getOtherArticle'] = array(); // 客户端类型 $clientType = $isApp ? 'iphone' : 'h5'; $key = CacheConfig::KEY_ACTION_GUANG_DETAIL_DATA . strval($id) . $clientType; if (USE_CACHE) { // 先尝试获取一级缓存(master), 有数据则直接返回. $cached = Cache::get($key, 'master'); if (!empty($cached)) { $article = Yohobuy::yarClient(Yohobuy::SERVICE_URL . self::URI_PACKAGE_ARTICLE, 'getArticle', array($id, $clientType), false, 1000); if (isset($article['pageViews'])) { $cached['getArticle']['pageViews'] = $article['pageViews']; } return $cached; } } // 获取资讯 $article = Yohobuy::yarClient(Yohobuy::SERVICE_URL . self::URI_PACKAGE_ARTICLE, 'getArticle', array($id, $clientType), false); if (!isset($article['author_id'])) { // 再尝试获取二级缓存(slave), 有数据则直接返回. $cached = Cache::get($key, 'slave'); if (!empty($cached)) { return $cached; } return $result; } $result['getArticle'] = $article; // 获取作者信息 Yohobuy::yarConcurrentCall(Yohobuy::SERVICE_URL . self::URI_PACKAGE_AUTHOR, 'getAuthor', array($article['author_id'], $clientType), function ($retval) use (&$result) { $result['getAuthor'] = empty($retval) ? array() : $retval; }); // 获取资讯内容 Yohobuy::yarConcurrentCall(Yohobuy::SERVICE_URL . self::URI_PACKAGE_ARTICLE, 'getArticleContent', array($id, $clientType), function ($retval) use (&$result) { $result['getArticleContent'] = empty($retval) ? array() : $retval; }); // 获取资讯相关的品牌 Yohobuy::yarConcurrentCall(Yohobuy::SERVICE_URL . self::URI_PACKAGE_ARTICLE, 'getBrand', array($id, $clientType), function ($retval) use (&$result) { $result['getBrand'] = empty($retval) ? array() : $retval; }); // 获取资讯相关的其它资讯 if (isset($article['tag'])) { Yohobuy::yarConcurrentCall(Yohobuy::SERVICE_URL . self::URI_PACKAGE_ARTICLE, 'getOtherArticle', array($article['tag'], $id, 0, 3, $clientType), function ($retval) use (&$result) { $result['getOtherArticle'] = empty($retval) ? array() : $retval; }); } // 调用发起请求 Yohobuy::yarConcurrentLoop(); if (USE_CACHE) { // 接口调用异常时, 不害怕,从我们的二级缓存(slave)里再取数据. if (empty($result)) { $result = Cache::get($key, 'slave'); } // 接口调用正常,数据封装完成, 则设置一级(master)和二级(slave)数据缓存 elseif (!empty($result['getArticle']) && !empty($result['getArticleContent'])) { Cache::set($key, $result); } } return $result; } /** * 逛资讯详情页数据封装 (专为YOHO!潮流志APP提供) * * @param int $id 内容ID * @param bool $isApp 标识是否是APP访问 * @return array */ public static function packageFoEzine($id, $isApp = false) { $result = array(); $result['getAuthor'] = array(); $result['getArticle'] = array(); $result['getArticleContent'] = array(); $result['getBrand'] = array(); $result['getOtherArticle'] = array(); // 客户端类型 $clientType = $isApp ? 'iphone' : 'h5'; // 获取资讯 $article = Yohobuy::yarClient(Yohobuy::SERVICE_URL . self::URI_PACKAGE_ARTICLE, 'getArticle', array($id, $clientType)); if (!isset($article['author_id'])) { return $result; } $result['getArticle'] = $article; // 获取资讯内容 Yohobuy::yarConcurrentCall(Yohobuy::SERVICE_URL . self::URI_PACKAGE_ARTICLE, 'getArticleContent', array($id, $clientType), function ($retval) use (&$result) { $result['getArticleContent'] = empty($retval) ? array() : $retval; }); // 获取资讯相关的品牌 Yohobuy::yarConcurrentCall(Yohobuy::SERVICE_URL . self::URI_PACKAGE_ARTICLE, 'getBrand', array($id, $clientType), function ($retval) use (&$result) { $result['getBrand'] = empty($retval) ? array() : $retval; }); // 调用发起请求 Yohobuy::yarConcurrentLoop(); return $result; } /** * 获取详情信息 */ public static function intro($id) { return Yohobuy::yarClient(Yohobuy::SERVICE_URL . self::URI_PACKAGE_ARTICLE, 'getArticleContent', array($id, 'h5')); } }