继续更新

This commit is contained in:
2025-10-15 11:11:23 +08:00
parent 7786e5f507
commit c147502b4d
89 changed files with 8116 additions and 2505 deletions

View File

@@ -0,0 +1,79 @@
.background-layer {
position: fixed;
inset: 0;
overflow: hidden;
z-index: -1;
background: linear-gradient(180deg, #e8f5e8 0%, #f0f8e8 55%, #e8f5e8 100%);
}
.aurora {
position: absolute;
width: 480px;
height: 480px;
border-radius: 58% 42% 53% 47% / 52% 46% 54% 48%;
filter: blur(0px);
opacity: 0.28;
background: radial-gradient(circle at 40% 40%, rgba(168, 230, 207, 0.4), rgba(168, 230, 207, 0));
animation: float 32s ease-in-out infinite;
}
.aurora-1 {
top: -160px;
left: -140px;
animation-delay: 0s;
}
.aurora-2 {
top: 50%;
left: 60%;
animation-delay: 6s;
background: radial-gradient(circle at 60% 60%, rgba(220, 237, 193, 0.35), rgba(220, 237, 193, 0));
}
.aurora-3 {
bottom: -180px;
right: -160px;
animation-delay: 12s;
background: radial-gradient(circle at 50% 50%, rgba(129, 199, 132, 0.3), rgba(129, 199, 132, 0));
}
@keyframes float {
0% {
transform: translate3d(0, 0, 0) scale(1);
}
25% {
transform: translate3d(40px, -30px, 0) scale(1.05);
}
50% {
transform: translate3d(-35px, 25px, 0) scale(0.95);
}
75% {
transform: translate3d(20px, 35px, 0) scale(1.08);
}
100% {
transform: translate3d(0, 0, 0) scale(1);
}
}
@media (max-width: 768px) {
.aurora {
width: 280px;
height: 280px;
opacity: 0.24;
}
.aurora-1 {
top: -110px;
left: -130px;
}
.aurora-2 {
top: 45%;
left: 35%;
}
.aurora-3 {
bottom: -140px;
right: -120px;
}
}

View File

@@ -0,0 +1,414 @@
:root {
--bg-base: rgba(255, 255, 255, 0.85);
--panel-bg: rgba(248, 252, 248, 0.9);
--panel-border: rgba(129, 199, 132, 0.25);
--accent-1: #4caf50;
--accent-2: #81c784;
--accent-3: #a5d6a7;
--text-primary: #2e7d32;
--text-secondary: #558b2f;
--chip-bg: rgba(76, 175, 80, 0.15);
--shadow-soft: 0 16px 40px rgba(46, 125, 50, 0.15);
color-scheme: light;
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
background: transparent;
color: var(--text-primary);
font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif;
line-height: 1.6;
min-height: 100vh;
-webkit-font-smoothing: antialiased;
}
.screen {
width: min(100%, 840px);
margin: 0 auto;
padding: 18px 16px 72px;
display: flex;
flex-direction: column;
gap: 18px;
}
.screen-header {
display: flex;
flex-direction: column;
gap: 18px;
padding: 20px 18px;
border-radius: 20px;
background: var(--bg-base);
border: 1px solid var(--panel-border);
box-shadow: var(--shadow-soft);
backdrop-filter: blur(18px);
}
.title-group {
display: flex;
flex-direction: column;
gap: 10px;
}
.eyebrow {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 4px 12px;
font-size: 0.8rem;
letter-spacing: 0.08em;
text-transform: uppercase;
border-radius: 999px;
color: var(--accent-1);
background: var(--chip-bg);
}
.screen-header h1 {
font-size: 1.6rem;
font-weight: 700;
}
.tagline {
font-size: 0.95rem;
color: var(--text-secondary);
}
.actions {
display: flex;
flex-direction: column;
gap: 10px;
align-items: flex-start;
}
.refresh {
padding: 10px 20px;
border-radius: 999px;
border: none;
background: linear-gradient(135deg, rgba(76, 175, 80, 0.9), rgba(129, 199, 132, 0.9));
color: var(--text-primary);
font-size: 0.92rem;
font-weight: 600;
cursor: pointer;
transition: transform 0.2s ease, box-shadow 0.2s ease;
box-shadow: 0 12px 30px rgba(76, 175, 80, 0.25);
}
.refresh:active {
transform: scale(0.97);
}
.refresh:disabled {
opacity: 0.6;
cursor: not-allowed;
}
.timestamp {
font-size: 0.85rem;
color: var(--text-secondary);
}
.insights {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 12px;
}
.insight-card {
padding: 16px 18px;
background: var(--panel-bg);
border-radius: 16px;
border: 1px solid rgba(129, 199, 132, 0.3);
box-shadow: var(--shadow-soft);
display: flex;
flex-direction: column;
gap: 6px;
}
.insight-label {
font-size: 0.85rem;
color: var(--text-secondary);
letter-spacing: 0.02em;
}
.insight-value {
font-size: 1.3rem;
font-weight: 700;
display: flex;
align-items: baseline;
gap: 4px;
color: var(--text-primary);
}
.insight-value .unit {
font-size: 0.9rem;
font-weight: 500;
color: var(--text-secondary);
}
.ranking {
padding: 22px 18px 28px;
background: var(--bg-base);
border-radius: 24px;
border: 1px solid var(--panel-border);
box-shadow: var(--shadow-soft);
backdrop-filter: blur(22px);
display: flex;
flex-direction: column;
gap: 18px;
}
.ranking-header {
display: flex;
flex-direction: column;
gap: 6px;
}
.ranking-header h2 {
font-size: 1.25rem;
font-weight: 700;
}
.subtitle {
font-size: 0.88rem;
color: var(--text-secondary);
}
.programme-list {
display: flex;
flex-direction: column;
gap: 14px;
}
.loading,
.error-message,
.empty-message {
padding: 18px 16px;
text-align: center;
color: var(--text-secondary);
border-radius: 14px;
border: 1px dashed rgba(129, 199, 132, 0.4);
background: rgba(248, 252, 248, 0.6);
}
.programme-item {
display: grid;
grid-template-columns: auto 1fr;
gap: 14px;
padding: 16px;
border-radius: 18px;
background: rgba(248, 252, 248, 0.95);
border: 1px solid rgba(129, 199, 132, 0.3);
box-shadow: 0 14px 30px rgba(46, 125, 50, 0.1);
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.programme-item:hover {
transform: translateY(-2px);
box-shadow: 0 18px 36px rgba(46, 125, 50, 0.15);
}
.rank-badge {
width: 44px;
height: 44px;
border-radius: 14px;
display: flex;
align-items: center;
justify-content: center;
font-weight: 700;
font-size: 1.05rem;
color: #ffffff;
background: linear-gradient(135deg, rgba(76, 175, 80, 0.9), rgba(129, 199, 132, 0.9));
}
.rank-badge.top-1 {
background: linear-gradient(135deg, #2e7d32, #4caf50);
}
.rank-badge.top-2 {
background: linear-gradient(135deg, #388e3c, #66bb6a);
}
.rank-badge.top-3 {
background: linear-gradient(135deg, #4caf50, #81c784);
}
.programme-body {
display: flex;
flex-direction: column;
gap: 12px;
}
.programme-head {
display: flex;
flex-direction: column;
gap: 6px;
}
.programme-name {
font-size: 1.05rem;
font-weight: 700;
}
.channel-name {
font-size: 0.9rem;
color: var(--text-secondary);
}
.metric-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 10px;
}
.metric {
display: flex;
flex-direction: column;
gap: 2px;
}
.metric-label {
font-size: 0.78rem;
color: var(--text-secondary);
letter-spacing: 0.04em;
text-transform: uppercase;
}
.metric-value {
font-size: 0.98rem;
font-weight: 600;
}
.progress-trend {
display: flex;
flex-direction: column;
gap: 8px;
margin-top: 4px;
}
.progress-row {
display: flex;
flex-direction: column;
gap: 4px;
}
.progress-label {
display: flex;
justify-content: space-between;
font-size: 0.8rem;
color: var(--text-secondary);
}
.progress-bar {
width: 100%;
height: 6px;
border-radius: 6px;
background: rgba(116, 210, 255, 0.16);
overflow: hidden;
}
.progress-bar span {
display: block;
height: 100%;
border-radius: inherit;
background: linear-gradient(135deg, rgba(116, 210, 255, 0.95), rgba(122, 185, 255, 0.95));
width: 0;
transition: width 0.5s ease;
}
.progress-row.attention .progress-bar span {
background: linear-gradient(135deg, rgba(244, 156, 224, 0.95), rgba(116, 210, 255, 0.9));
}
/* Tablet layout */
@media (min-width: 600px) {
.screen {
padding: 24px 20px 88px;
gap: 20px;
}
.screen-header {
flex-direction: row;
justify-content: space-between;
align-items: center;
padding: 26px 28px;
}
.screen-header h1 {
font-size: 1.9rem;
}
.tagline {
font-size: 1rem;
}
.actions {
align-items: flex-end;
}
.insights {
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 16px;
}
.programme-item {
grid-template-columns: 72px 1fr;
padding: 18px 20px;
}
.rank-badge {
width: 54px;
height: 54px;
font-size: 1.25rem;
}
.metric-grid {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
}
/* Desktop layout */
@media (min-width: 1024px) {
.screen {
width: min(100%, 960px);
padding: 32px 28px 104px;
}
.insight-card {
padding: 20px 22px;
}
.insight-value {
font-size: 1.6rem;
}
.ranking {
padding: 30px 32px 36px;
}
.programme-item {
grid-template-columns: 96px 1fr;
padding: 22px 26px;
border-radius: 22px;
}
.programme-name {
font-size: 1.25rem;
}
.metric-grid {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
}
@media (prefers-reduced-motion: reduce) {
* {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}

View File

@@ -0,0 +1,62 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>猫眼电视收视排行</title>
<link rel="stylesheet" href="./css/background.css">
<link rel="stylesheet" href="./css/style.css">
</head>
<body>
<div class="background-layer">
<div class="aurora aurora-1"></div>
<div class="aurora aurora-2"></div>
<div class="aurora aurora-3"></div>
</div>
<div class="screen">
<header class="screen-header">
<div class="title-group">
<span class="eyebrow">实时收视</span>
<h1>猫眼电视收视排行</h1>
<p class="tagline">聚焦全国频道实时关注度,让你不错过热门节目</p>
</div>
<div class="actions">
<button id="refreshButton" class="refresh">手动刷新</button>
<span id="updateTime" class="timestamp">正在同步最新数据...</span>
</div>
</header>
<section class="insights" id="insightPanel">
<div class="insight-card">
<p class="insight-label">节目数量</p>
<p class="insight-value" id="programmeCount">--</p>
</div>
<div class="insight-card">
<p class="insight-label">最高市场份额</p>
<p class="insight-value"><span id="topMarketRate">--</span><span class="unit">%</span></p>
</div>
<div class="insight-card">
<p class="insight-label">最高关注指数</p>
<p class="insight-value"><span id="topAttentionRate">--</span><span class="unit">%</span></p>
</div>
<div class="insight-card">
<p class="insight-label">官方刷新频率</p>
<p class="insight-value" id="refreshGap">--</p>
</div>
</section>
<section class="ranking">
<div class="ranking-header">
<h2>频道节目排行榜</h2>
<span class="subtitle">实时榜单,数据持续刷新</span>
</div>
<div id="programmeList" class="programme-list">
<div class="loading">正在载入电视收视排行...</div>
</div>
</section>
</div>
<script src="./js/main.js"></script>
</body>
</html>

View File

@@ -0,0 +1,290 @@
const API_ENDPOINTS = [
"https://60s.api.shumengya.top/v2/maoyan/realtime/tv"
];
const FALLBACK_ENDPOINT = "./返回接口.json";
const REFRESH_INTERVAL = 4000;
const MAX_ITEMS = 40;
const refreshButton = document.getElementById("refreshButton");
const updateTimeEl = document.getElementById("updateTime");
const programmeListEl = document.getElementById("programmeList");
const programmeCountEl = document.getElementById("programmeCount");
const topMarketRateEl = document.getElementById("topMarketRate");
const topAttentionRateEl = document.getElementById("topAttentionRate");
const refreshGapEl = document.getElementById("refreshGap");
let isLoading = false;
let autoTimer = null;
function escapeHtml(value) {
if (value === undefined || value === null) {
return "";
}
return String(value)
.replace(/&/g, "&amp;")
.replace(/</g, "&lt;")
.replace(/>/g, "&gt;")
.replace(/"/g, "&quot;")
.replace(/'/g, "&#39;");
}
function safeText(value, fallback = "--") {
if (value === undefined || value === null || value === "") {
return fallback;
}
return escapeHtml(value);
}
function formatNumber(value, fractionDigits = 2) {
const numeric = Number(value);
if (!Number.isFinite(numeric)) {
return "--";
}
return numeric.toFixed(fractionDigits);
}
function formatGapText(seconds) {
const numeric = Number(seconds);
if (!Number.isFinite(numeric) || numeric <= 0) {
return "--";
}
if (numeric < 60) {
return `约每 ${Math.round(numeric)}`;
}
const minutes = Math.floor(numeric / 60);
const remaining = Math.round(numeric % 60);
if (remaining === 0) {
return `约每 ${minutes} 分钟`;
}
return `约每 ${minutes}${remaining}`;
}
function parseRate(value) {
const numeric = Number(value);
if (Number.isFinite(numeric) && numeric >= 0) {
return {
text: numeric.toFixed(4).replace(/0+$/, "").replace(/\.$/, ""),
ratio: Math.max(0, Math.min(numeric, 100))
};
}
return { text: "--", ratio: 0 };
}
function formatUpdateTime(data) {
if (data && typeof data.updated === "string" && data.updated.trim().length > 0) {
return data.updated.trim();
}
if (data && typeof data.updated_at === "number" && Number.isFinite(data.updated_at)) {
return new Date(data.updated_at).toLocaleString("zh-CN", { hour12: false });
}
return new Date().toLocaleString("zh-CN", { hour12: false });
}
function renderInsights(list, gapSecond) {
const total = Array.isArray(list) ? list.length : 0;
programmeCountEl.textContent = total ? total.toString() : "--";
if (total) {
const topMarket = list.reduce((max, item) => {
const value = Number(item?.market_rate);
return value > max ? value : max;
}, 0);
const topAttention = list.reduce((max, item) => {
const value = Number(item?.attention_rate);
return value > max ? value : max;
}, 0);
topMarketRateEl.textContent = topMarket ? topMarket.toFixed(2) : "--";
topAttentionRateEl.textContent = topAttention ? topAttention.toFixed(2) : "--";
} else {
topMarketRateEl.textContent = "--";
topAttentionRateEl.textContent = "--";
}
refreshGapEl.textContent = formatGapText(gapSecond);
}
function createMetric(label, value) {
return `
<div class="metric">
<span class="metric-label">${label}</span>
<span class="metric-value">${safeText(value)}</span>
</div>
`;
}
function createProgrammeItem(programme, index) {
const article = document.createElement("article");
article.className = "programme-item";
const topClass = index < 3 ? ` top-${index + 1}` : "";
const name = safeText(programme?.programme_name || "未命名节目");
const channel = safeText(programme?.channel_name || "--");
const market = parseRate(programme?.market_rate);
const attention = parseRate(programme?.attention_rate);
const marketDesc = safeText(programme?.market_rate_desc || formatNumber(programme?.market_rate));
const attentionDesc = safeText(programme?.attention_rate_desc || formatNumber(programme?.attention_rate));
article.innerHTML = `
<div class="rank-badge${topClass}">${index + 1}</div>
<div class="programme-body">
<div class="programme-head">
<div class="programme-name">${name}</div>
<div class="channel-name">${channel}</div>
</div>
<div class="metric-grid">
${createMetric("市场占有率", marketDesc)}
${createMetric("关注指数", attentionDesc)}
${createMetric("排序位置", `${index + 1}`)}
${createMetric("排名趋势", programme?.rank_trend ? safeText(programme.rank_trend) : "--")}
</div>
<div class="progress-trend">
<div class="progress-row market">
<div class="progress-label">
<span>市场份额</span>
<span>${market.text === "--" ? "--" : `${market.text}%`}</span>
</div>
<div class="progress-bar"><span style="width: ${market.ratio}%"></span></div>
</div>
<div class="progress-row attention">
<div class="progress-label">
<span>关注份额</span>
<span>${attention.text === "--" ? "--" : `${attention.text}%`}</span>
</div>
<div class="progress-bar"><span style="width: ${attention.ratio}%"></span></div>
</div>
</div>
</div>
`;
return article;
}
function renderProgrammeList(list) {
programmeListEl.innerHTML = "";
if (!Array.isArray(list) || list.length === 0) {
const empty = document.createElement("div");
empty.className = "empty-message";
empty.textContent = "暂时没有可展示的节目数据";
programmeListEl.appendChild(empty);
return;
}
list.slice(0, MAX_ITEMS).forEach((item, index) => {
programmeListEl.appendChild(createProgrammeItem(item, index));
});
}
async function requestJson(url) {
const response = await fetch(url, { cache: "no-store" });
if (!response.ok) {
throw new Error(`请求失败: ${response.status}`);
}
return response.json();
}
async function retrieveData() {
for (const endpoint of API_ENDPOINTS) {
try {
const result = await requestJson(endpoint);
if (result?.code === 200 && result?.data) {
return result.data;
}
} catch (error) {
console.warn("主接口请求失败", error);
}
}
try {
const fallbackResult = await requestJson(FALLBACK_ENDPOINT);
if (fallbackResult?.data) {
return fallbackResult.data;
}
} catch (fallbackError) {
console.warn("本地示例数据读取失败", fallbackError);
}
return null;
}
async function loadData(isManual = false) {
if (isLoading) {
return;
}
isLoading = true;
if (isManual) {
refreshButton.disabled = true;
refreshButton.textContent = "刷新中...";
}
if (!programmeListEl.children.length) {
programmeListEl.innerHTML = '<div class="loading">正在载入电视收视排行...</div>';
}
try {
const data = await retrieveData();
if (!data) {
throw new Error("无法获取数据");
}
renderProgrammeList(Array.isArray(data.list) ? data.list : []);
renderInsights(data.list, data.update_gap_second);
updateTimeEl.textContent = `最近更新 ${formatUpdateTime(data)}`;
} catch (error) {
console.error("加载数据失败", error);
programmeListEl.innerHTML = '';
const errorBox = document.createElement("div");
errorBox.className = "error-message";
errorBox.textContent = "数据获取暂时不可用,系统稍后会自动重试";
programmeListEl.appendChild(errorBox);
updateTimeEl.textContent = "最近更新 --";
renderInsights([], 0);
} finally {
if (isManual) {
refreshButton.disabled = false;
refreshButton.textContent = "手动刷新";
}
isLoading = false;
}
}
function startAutoRefresh() {
if (autoTimer) {
clearInterval(autoTimer);
}
autoTimer = setInterval(() => {
loadData(false);
}, REFRESH_INTERVAL);
}
refreshButton.addEventListener("click", () => {
loadData(true);
});
document.addEventListener("visibilitychange", () => {
if (document.hidden) {
if (autoTimer) {
clearInterval(autoTimer);
autoTimer = null;
}
} else {
startAutoRefresh();
loadData(false);
}
});
function init() {
loadData(false);
startAutoRefresh();
}
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", init);
} else {
init();
}

View File

@@ -0,0 +1,435 @@
{
"code": 200,
"message": "获取成功。数据来自官方/权威源头,以确保稳定与实时。开源地址 https://github.com/vikiboss/60s反馈群 595941841",
"data": {
"update_gap_second": 3,
"updated": "2025-09-26 16:22:45",
"updated_at": 1758874965018,
"list": [
{
"programme_name": "六姊妹37",
"channel_name": "CCTV-1",
"market_rate": 16.1709,
"market_rate_desc": "16.1709%",
"attention_rate": 1.2816,
"attention_rate_desc": "1.2816%"
},
{
"programme_name": "太行山上6",
"channel_name": "CCTV-4",
"market_rate": 8.2684,
"market_rate_desc": "8.2684%",
"attention_rate": 0.6553,
"attention_rate_desc": "0.6553%"
},
{
"programme_name": "星推荐",
"channel_name": "CCTV-8",
"market_rate": 7.3725,
"market_rate_desc": "7.3725%",
"attention_rate": 0.5843,
"attention_rate_desc": "0.5843%"
},
{
"programme_name": "炮兵司令朱瑞",
"channel_name": "CCTV-6",
"market_rate": 7.3315,
"market_rate_desc": "7.3315%",
"attention_rate": 0.5811,
"attention_rate_desc": "0.5811%"
},
{
"programme_name": "新闻直播间",
"channel_name": "CCTV-13",
"market_rate": 4.4396,
"market_rate_desc": "4.4396%",
"attention_rate": 0.3519,
"attention_rate_desc": "0.3519%"
},
{
"programme_name": "百姓剧场二:征服15",
"channel_name": "浙江卫视",
"market_rate": 4.3651,
"market_rate_desc": "4.3651%",
"attention_rate": 0.346,
"attention_rate_desc": "0.346%"
},
{
"programme_name": "新相亲大会精华版",
"channel_name": "江苏卫视",
"market_rate": 4.0919,
"market_rate_desc": "4.0919%",
"attention_rate": 0.3243,
"attention_rate_desc": "0.3243%"
},
{
"programme_name": "青春独播剧场:底线11",
"channel_name": "湖南卫视",
"market_rate": 3.9014,
"market_rate_desc": "3.9014%",
"attention_rate": 0.3092,
"attention_rate_desc": "0.3092%"
},
{
"programme_name": "全景自然:黄石公园-飞翔的生命",
"channel_name": "CCTV-9",
"market_rate": 2.504,
"market_rate_desc": "2.504%",
"attention_rate": 0.1985,
"attention_rate_desc": "0.1985%"
},
{
"programme_name": "运动一起赢",
"channel_name": "CCTV-5",
"market_rate": 2.0781,
"market_rate_desc": "2.0781%",
"attention_rate": 0.1647,
"attention_rate_desc": "0.1647%"
},
{
"programme_name": "小日子19",
"channel_name": "东方卫视",
"market_rate": 1.9804,
"market_rate_desc": "1.9804%",
"attention_rate": 0.157,
"attention_rate_desc": "0.157%"
},
{
"programme_name": "向幸福出发",
"channel_name": "CCTV-3",
"market_rate": 1.8832,
"market_rate_desc": "1.8832%",
"attention_rate": 0.1493,
"attention_rate_desc": "0.1493%"
},
{
"programme_name": "浴血十四年16",
"channel_name": "CCTV-7",
"market_rate": 1.8485,
"market_rate_desc": "1.8485%",
"attention_rate": 0.1465,
"attention_rate_desc": "0.1465%"
},
{
"programme_name": "正点财经",
"channel_name": "CCTV-2",
"market_rate": 1.7255,
"market_rate_desc": "1.7255%",
"attention_rate": 0.1368,
"attention_rate_desc": "0.1368%"
},
{
"programme_name": "热播剧场:太行山上6",
"channel_name": "深圳卫视",
"market_rate": 1.6132,
"market_rate_desc": "1.6132%",
"attention_rate": 0.1279,
"attention_rate_desc": "0.1279%"
},
{
"programme_name": "爱家剧场:父母爱情37",
"channel_name": "山东卫视",
"market_rate": 1.5558,
"market_rate_desc": "1.5558%",
"attention_rate": 0.1233,
"attention_rate_desc": "0.1233%"
},
{
"programme_name": "刘家媳妇4",
"channel_name": "CCTV-17",
"market_rate": 1.3905,
"market_rate_desc": "1.3905%",
"attention_rate": 0.1102,
"attention_rate_desc": "0.1102%"
},
{
"programme_name": "午茶剧场:归队8",
"channel_name": "北京卫视",
"market_rate": 1.1078,
"market_rate_desc": "1.1078%",
"attention_rate": 0.0878,
"attention_rate_desc": "0.0878%"
},
{
"programme_name": "吉视剧场:武工队传奇46",
"channel_name": "吉林卫视",
"market_rate": 0.9407,
"market_rate_desc": "0.9407%",
"attention_rate": 0.0745,
"attention_rate_desc": "0.0745%"
},
{
"programme_name": "情感剧场:朱元璋64",
"channel_name": "河北卫视",
"market_rate": 0.9211,
"market_rate_desc": "0.9211%",
"attention_rate": 0.073,
"attention_rate_desc": "0.073%"
},
{
"programme_name": "下午剧场:战火青春3",
"channel_name": "广东卫视",
"market_rate": 0.9211,
"market_rate_desc": "0.9211%",
"attention_rate": 0.073,
"attention_rate_desc": "0.073%"
},
{
"programme_name": "探索.发现-奥秘54",
"channel_name": "CCTV-10",
"market_rate": 0.822,
"market_rate_desc": "0.822%",
"attention_rate": 0.0652,
"attention_rate_desc": "0.0652%"
},
{
"programme_name": "一线",
"channel_name": "CCTV-12",
"market_rate": 0.7949,
"market_rate_desc": "0.7949%",
"attention_rate": 0.063,
"attention_rate_desc": "0.063%"
},
{
"programme_name": "海豚真情剧场:重案六组Ⅱ-45",
"channel_name": "安徽卫视",
"market_rate": 0.7684,
"market_rate_desc": "0.7684%",
"attention_rate": 0.0609,
"attention_rate_desc": "0.0609%"
},
{
"programme_name": "中国女子围棋甲级联赛-第10轮",
"channel_name": "CCTV-5+",
"market_rate": 0.7621,
"market_rate_desc": "0.7621%",
"attention_rate": 0.0604,
"attention_rate_desc": "0.0604%"
},
{
"programme_name": "休闲剧场:女子特战队2",
"channel_name": "天津卫视",
"market_rate": 0.6694,
"market_rate_desc": "0.6694%",
"attention_rate": 0.0531,
"attention_rate_desc": "0.0531%"
},
{
"programme_name": "动画大放映:猪猪侠之超星五灵侠第八季",
"channel_name": "CCTV-14",
"market_rate": 0.6637,
"market_rate_desc": "0.6637%",
"attention_rate": 0.0526,
"attention_rate_desc": "0.0526%"
},
{
"programme_name": "昆仑剧场:康熙微服私访记第三部30",
"channel_name": "青海卫视",
"market_rate": 0.6511,
"market_rate_desc": "0.6511%",
"attention_rate": 0.0516,
"attention_rate_desc": "0.0516%"
},
{
"programme_name": "京剧电影工程-大闹天宫",
"channel_name": "CCTV-11",
"market_rate": 0.6069,
"market_rate_desc": "0.6069%",
"attention_rate": 0.0481,
"attention_rate_desc": "0.0481%"
},
{
"programme_name": "温情剧场:神探狄仁杰Ⅱ-14",
"channel_name": "陕西卫视",
"market_rate": 0.571,
"market_rate_desc": "0.571%",
"attention_rate": 0.0453,
"attention_rate_desc": "0.0453%"
},
{
"programme_name": "下午剧场:狙击部队30",
"channel_name": "贵州卫视",
"market_rate": 0.5558,
"market_rate_desc": "0.5558%",
"attention_rate": 0.0441,
"attention_rate_desc": "0.0441%"
},
{
"programme_name": "白天剧场:西游记26",
"channel_name": "湖北卫视",
"market_rate": 0.5463,
"market_rate_desc": "0.5463%",
"attention_rate": 0.0433,
"attention_rate_desc": "0.0433%"
},
{
"programme_name": "中国爱大剧场:神枪21",
"channel_name": "四川卫视",
"market_rate": 0.5388,
"market_rate_desc": "0.5388%",
"attention_rate": 0.0427,
"attention_rate_desc": "0.0427%"
},
{
"programme_name": "全民开麦",
"channel_name": "CCTV-15",
"market_rate": 0.4915,
"market_rate_desc": "0.4915%",
"attention_rate": 0.039,
"attention_rate_desc": "0.039%"
},
{
"programme_name": "下午剧场:仁心俱乐部10",
"channel_name": "东南卫视",
"market_rate": 0.4858,
"market_rate_desc": "0.4858%",
"attention_rate": 0.0385,
"attention_rate_desc": "0.0385%"
},
{
"programme_name": "生活服务",
"channel_name": "江西卫视",
"market_rate": 0.4113,
"market_rate_desc": "0.4113%",
"attention_rate": 0.0326,
"attention_rate_desc": "0.0326%"
},
{
"programme_name": "白天剧场:神医喜来乐25",
"channel_name": "宁夏卫视",
"market_rate": 0.4044,
"market_rate_desc": "0.4044%",
"attention_rate": 0.032,
"attention_rate_desc": "0.032%"
},
{
"programme_name": "传奇剧场:铁血玫瑰15",
"channel_name": "黑龙江卫视",
"market_rate": 0.4031,
"market_rate_desc": "0.4031%",
"attention_rate": 0.032,
"attention_rate_desc": "0.032%"
},
{
"programme_name": "经典剧场:亮剑30",
"channel_name": "广西卫视",
"market_rate": 0.3836,
"market_rate_desc": "0.3836%",
"attention_rate": 0.0304,
"attention_rate_desc": "0.0304%"
},
{
"programme_name": "中国网球公开赛-女单-第二轮",
"channel_name": "CCTV-16",
"market_rate": 0.3539,
"market_rate_desc": "0.3539%",
"attention_rate": 0.0281,
"attention_rate_desc": "0.0281%"
},
{
"programme_name": "生活服务",
"channel_name": "河南卫视",
"market_rate": 0.3413,
"market_rate_desc": "0.3413%",
"attention_rate": 0.0271,
"attention_rate_desc": "0.0271%"
},
{
"programme_name": "生活服务",
"channel_name": "辽宁卫视",
"market_rate": 0.3318,
"market_rate_desc": "0.3318%",
"attention_rate": 0.0263,
"attention_rate_desc": "0.0263%"
},
{
"programme_name": "传奇剧场:狼烟21",
"channel_name": "内蒙古卫视",
"market_rate": 0.3262,
"market_rate_desc": "0.3262%",
"attention_rate": 0.0258,
"attention_rate_desc": "0.0258%"
},
{
"programme_name": "炫酷剧场:薛平贵与王宝钏19",
"channel_name": "云南卫视",
"market_rate": 0.3079,
"market_rate_desc": "0.3079%",
"attention_rate": 0.0244,
"attention_rate_desc": "0.0244%"
},
{
"programme_name": "休闲剧场:历史转折中的邓小平17",
"channel_name": "兵团卫视",
"market_rate": 0.3035,
"market_rate_desc": "0.3035%",
"attention_rate": 0.0241,
"attention_rate_desc": "0.0241%"
},
{
"programme_name": "亮剑12",
"channel_name": "重庆卫视",
"market_rate": 0.2656,
"market_rate_desc": "0.2656%",
"attention_rate": 0.0211,
"attention_rate_desc": "0.0211%"
},
{
"programme_name": "阳光剧场:飞哥大英雄39",
"channel_name": "海南卫视",
"market_rate": 0.2643,
"market_rate_desc": "0.2643%",
"attention_rate": 0.021,
"attention_rate_desc": "0.021%"
},
{
"programme_name": "劫中劫15-17",
"channel_name": "厦门卫视",
"market_rate": 0.246,
"market_rate_desc": "0.246%",
"attention_rate": 0.0195,
"attention_rate_desc": "0.0195%"
},
{
"programme_name": "生活服务",
"channel_name": "甘肃卫视",
"market_rate": 0.2448,
"market_rate_desc": "0.2448%",
"attention_rate": 0.0194,
"attention_rate_desc": "0.0194%"
},
{
"programme_name": "花季剧场:神枪7",
"channel_name": "中国教育台-1",
"market_rate": 0.1703,
"market_rate_desc": "0.1703%",
"attention_rate": 0.0135,
"attention_rate_desc": "0.0135%"
},
{
"programme_name": "雪莲剧场:南来北往21",
"channel_name": "西藏卫视",
"market_rate": 0.1634,
"market_rate_desc": "0.1634%",
"attention_rate": 0.013,
"attention_rate_desc": "0.013%"
},
{
"programme_name": "生活服务",
"channel_name": "山西卫视",
"market_rate": 0.1438,
"market_rate_desc": "0.1438%",
"attention_rate": 0.0114,
"attention_rate_desc": "0.0114%"
},
{
"programme_name": "生活服务",
"channel_name": "新疆卫视",
"market_rate": 0.0656,
"market_rate_desc": "0.0656%",
"attention_rate": 0.0052,
"attention_rate_desc": "0.0052%"
}
]
}
}