518 lines
23 KiB
HTML
518 lines
23 KiB
HTML
|
|
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
<title>{% block title %}首页{% endblock %}</title>
|
|
|
|
<link rel="stylesheet" href="/static/css/backend-plugin.min.css">
|
|
<link rel="stylesheet" href="/static/css/backend.css">
|
|
<meta name="referrer" content="no-referrer" />
|
|
</head>
|
|
<body class=" ">
|
|
<!-- loader Start -->
|
|
<div id="loading">
|
|
<div id="loading-center">
|
|
</div>
|
|
</div>
|
|
<!-- loader END -->
|
|
<!-- Wrapper Start -->
|
|
<div class="wrapper">
|
|
<div class="iq-sidebar sidebar-default ">
|
|
<div class="iq-sidebar-logo d-flex align-items-end justify-content-between">
|
|
<a href="" class="header-logo">
|
|
<img src="https://weibo.com/favicon.ico" class="img-fluid rounded-normal light-logo" alt="logo">
|
|
<span>微博舆情分析系统</span>
|
|
</a>
|
|
<div class="side-menu-bt-sidebar-1">
|
|
<svg xmlns="http://www.w3.org/2000/svg" class="text-light wrapper-menu" width="30" fill="none" viewbox="0 0 24 24" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
|
|
</svg>
|
|
</div>
|
|
</div>
|
|
<div class="data-scrollbar" data-scroll="1">
|
|
{% block nav %}
|
|
<nav class="iq-sidebar-menu">
|
|
<ul id="iq-sidebar-toggle" class="side-menu">
|
|
<li class="px-3 pt-3 pb-2 ">
|
|
<span class="text-uppercase small font-weight-bold">首页</span>
|
|
</li>
|
|
<li class="active sidebar-layout">
|
|
<a href="/page/home" class="svg-icon">
|
|
<i class="">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="18" fill="none" viewbox="0 0 24 24" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"></path>
|
|
</svg>
|
|
</i>
|
|
<span class="ml-2">首页</span>
|
|
</a>
|
|
</li>
|
|
<li class=" sidebar-layout">
|
|
<a href="/page/hotWord" class="svg-icon ">
|
|
<i class="">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="18" fill="none" viewbox="0 0 24 24" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z"></path>
|
|
</svg>
|
|
</i>
|
|
<span class="ml-2">热词统计</span>
|
|
</a>
|
|
</li>
|
|
<li class=" sidebar-layout">
|
|
<a href="/page/tableData" class="svg-icon">
|
|
<i class="">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="18" fill="none" viewbox="0 0 24 24" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z"></path>
|
|
</svg>
|
|
</i>
|
|
<span class="ml-2">微博舆情统计</span>
|
|
</a>
|
|
</li>
|
|
<li class="px-3 pt-3 pb-2 ">
|
|
<span class="text-uppercase small font-weight-bold">数据可视化</span>
|
|
</li>
|
|
<li class=" sidebar-layout">
|
|
<a href="/page/articleChar" class="svg-icon">
|
|
<i class="">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="18" fill="none" viewbox="0 0 24 24" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z"></path>
|
|
</svg>
|
|
</i>
|
|
<span class="ml-2">文章分析</span>
|
|
</a>
|
|
</li>
|
|
<li class=" sidebar-layout">
|
|
<a href="/page/ipChar" class="svg-icon">
|
|
<i class="">
|
|
<svg class="icon line" width="18" id="receipt" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" stroke="currentColor">
|
|
<path d="M17,16V3L13,5,10,3,7,5,3,3V17.83A3.13,3.13,0,0,0,5.84,21,3,3,0,0,0,9,18V17a1,1,0,0,1,1-1H20a1,1,0,0,1,1,1v1a3,3,0,0,1-3,3H6" style="fill: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2;"></path>
|
|
<line x1="8" y1="10" x2="12" y2="10" style="fill: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2;"></line>
|
|
</svg>
|
|
</i>
|
|
<span class="ml-2">IP分析</span>
|
|
</a>
|
|
</li>
|
|
<li class=" sidebar-layout">
|
|
<a href="/page/commentChar" class="svg-icon">
|
|
<i class="">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="18" fill="none" viewbox="0 0 24 24" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path>
|
|
</svg>
|
|
</i><span class="ml-2">评论分析</span>
|
|
</a>
|
|
</li>
|
|
<li class=" sidebar-layout">
|
|
<a href="/page/yuqingChar" class="svg-icon">
|
|
<i class="">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="18" fill="none" viewbox="0 0 24 24" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"></path>
|
|
</svg>
|
|
</i>
|
|
<span class="ml-2">舆情分析</span>
|
|
</a>
|
|
</li>
|
|
<li class="px-3 pt-3 pb-2">
|
|
<span class="text-uppercase small font-weight-bold">词云图</span>
|
|
</li>
|
|
<li class=" sidebar-layout">
|
|
<a href="/page/articleCloud" class="svg-icon">
|
|
<i class="">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="18" fill="none" viewbox="0 0 24 24" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"></path>
|
|
</svg>
|
|
</i><span class="ml-2">文章内容词云图</span>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
{% endblock %}
|
|
<div class="pt-5 pb-5"></div>
|
|
</div>
|
|
</div>
|
|
<div class="iq-top-navbar">
|
|
<div class="iq-navbar-custom">
|
|
<nav class="navbar navbar-expand-lg navbar-light p-0">
|
|
<div class="side-menu-bt-sidebar">
|
|
<svg xmlns="http://www.w3.org/2000/svg" class="text-secondary wrapper-menu" width="30" fill="none" viewbox="0 0 24 24" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"></path>
|
|
</svg>
|
|
</div>
|
|
<div class="d-flex align-items-center">
|
|
<div class="change-mode">
|
|
<div class="custom-control custom-switch custom-switch-icon custom-control-inline">
|
|
<div class="custom-switch-inner">
|
|
<p class="mb-0"> </p>
|
|
<input type="checkbox" class="custom-control-input" id="dark-mode" data-active="true">
|
|
<label class="custom-control-label" for="dark-mode" data-mode="toggle">
|
|
<span class="switch-icon-right">
|
|
<svg xmlns="http://www.w3.org/2000/svg" id="h-moon" height="20" width="20" class="h-6 w-6" fill="none" viewbox="0 0 24 24" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"></path>
|
|
</svg>
|
|
</span>
|
|
<span class="switch-icon-left">
|
|
<svg xmlns="http://www.w3.org/2000/svg" id="h-sun" height="20" width="20" class="h-6 w-6" fill="none" viewbox="0 0 24 24" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"></path>
|
|
</svg>
|
|
</span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-label="Toggle navigation">
|
|
<svg xmlns="http://www.w3.org/2000/svg" class="text-secondary" width="30" fill="none" viewbox="0 0 24 24" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16m-7 6h7"></path>
|
|
</svg>
|
|
</button>
|
|
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
|
<ul class="navbar-nav ml-auto navbar-list align-items-center">
|
|
<li class="nav-item nav-icon dropdown">
|
|
<a href="#" class="nav-item nav-icon dropdown-toggle pr-0 search-toggle" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
|
<span class="mb-0 ml-2 user-name">{{ username }}</span>
|
|
</a>
|
|
<ul class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownMenuButton">
|
|
<li class="dropdown-item d-flex svg-icon ">
|
|
<a href="/user/logOut">退出登录</a>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
<div class="content-page">
|
|
{% block content %}
|
|
<div class="container-fluid">
|
|
<div class="row">
|
|
<div class="col-md-12 mb-4 mt-1">
|
|
<div class="d-flex flex-wrap justify-content-between align-items-center">
|
|
<h4 class="font-weight-bold">首页</h4>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-8 col-md-12">
|
|
<div class="row">
|
|
<div class="col-md-4">
|
|
<div class="card">
|
|
<div class="card-body">
|
|
<div class="d-flex align-items-center">
|
|
<div class="">
|
|
<p class="mb-2 text-secondary">文章个数</p>
|
|
<div class="d-flex flex-wrap justify-content-start align-items-center">
|
|
<h5 class="mb-0 font-weight-bold">{{ articleLenMax }}个</h5>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<div class="card">
|
|
<div class="card-body">
|
|
<div class="d-flex align-items-center">
|
|
<div class="">
|
|
<p class="mb-2 text-secondary">最高点赞微博-作者</p>
|
|
<div class="d-flex flex-wrap justify-content-start align-items-center">
|
|
<h5 class="mb-0 font-weight-bold">{{ likeCountMaxAuthorName }}</h5>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<div class="card">
|
|
<div class="card-body">
|
|
<div class="d-flex align-items-center">
|
|
<div class="">
|
|
<p class="mb-2 text-secondary">最多城市</p>
|
|
<div class="d-flex flex-wrap justify-content-start align-items-center">
|
|
<h5 class="mb-0 font-weight-bold">{{ cityMax }}</h5>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-12">
|
|
<div class="card">
|
|
<div class="card-body">
|
|
<div class="d-flex justify-content-between align-items-center flex-wrap">
|
|
<h4 class="font-weight-bold">文章发布时间个数</h4>
|
|
</div>
|
|
<div id="main" style="width:100%;height: 350px" class="custom-chart"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-4 col-md-8">
|
|
<div class="card card-block card-stretch card-height">
|
|
<div class="card-header card-header-border d-flex justify-content-between">
|
|
<div class="header-title">
|
|
<h4 class="card-title">评论点赞量 Top Fore</h4>
|
|
</div>
|
|
</div>
|
|
<div class="card-body-list">
|
|
<ul class="list-style-3 mb-0">
|
|
{% for i in commentsLikeCountTopFore %}
|
|
<li class="p-3 list-item d-flex justify-content-start align-items-center">
|
|
<div class="avatar">
|
|
<p>
|
|
🧑 {{ i[5] }}
|
|
</p>
|
|
<p class="mb-0" style="color:#ccc;width:320px;overflow: hidden;text-overflow: ellipsis;white-space:nowrap">
|
|
{{ i[4] }}
|
|
</p>
|
|
</div>
|
|
<div class="list-style-action d-flex justify-content-end ml-auto">
|
|
<h6 class="font-weight-bold text-danger">👍 {{ i[2] }}</h6>
|
|
</div>
|
|
</li>
|
|
{% endfor %}
|
|
<div class="d-flex justify-content-end align-items-center border-top-table p-3">
|
|
<a href="/page/tableData" class="btn btn-secondary btn-sm">查看全部</a>
|
|
</div>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
<div class="col-lg-4 col-md-6">
|
|
<div class="card card-block card-stretch card-height">
|
|
<div class="card-header d-flex justify-content-between">
|
|
<div class="header-title">
|
|
<h4 class="card-title">文章类型占比</h4>
|
|
</div>
|
|
</div>
|
|
<div class="card-body p-0">
|
|
<div id="mainTwo" style="width:100%;height:350px">
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-4 col-md-6">
|
|
<div class="card card-block card-stretch card-height">
|
|
<div class="card-header d-flex justify-content-between">
|
|
<div class="header-title">
|
|
<h4 class="card-title">评论用户名词云图</h4>
|
|
</div>
|
|
</div>
|
|
<div class="card-body p-0">
|
|
<div id="mainTwo" style="width:100%;height:350px;text-align: center">
|
|
<img style="width:85%" src="/static/authorNameCloud.jpg" alt="">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-4 col-md-6">
|
|
<div class="card card-block card-stretch card-height">
|
|
<div class="card-header d-flex justify-content-between">
|
|
<div class="header-title">
|
|
<h4 class="card-title">评论用户时间占比</h4>
|
|
</div>
|
|
</div>
|
|
<div class="card-body p-0">
|
|
<div id="mainThree" style="width:100%;height:350px">
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|
|
</div>
|
|
</div>
|
|
<!-- Wrapper End-->
|
|
<footer class="iq-footer">
|
|
<div class="container-fluid">
|
|
<div class="row">
|
|
<div class="col-lg-6">
|
|
</div>
|
|
<div class="col-lg-6 text-right">
|
|
<span class="mr-1">Copyright © 2023.<a target="_blank" href="#">微博舆情数据分析</a></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
<script src="/static/echarts.min.js"></script>
|
|
<script src="/static/china.js"></script>
|
|
{% block echarts %}
|
|
<script>
|
|
var chartDom = document.getElementById('main');
|
|
var myCharts = echarts.init(chartDom);
|
|
var option;
|
|
var xData = {{ xData | tojson }};
|
|
var yData = {{ yData }};
|
|
var xRes = []
|
|
var yRes = []
|
|
for(var i = 0;i < 8;i++){
|
|
xRes.push(xData[i])
|
|
yRes.push(yData[i])
|
|
}
|
|
option = {
|
|
tooltip:{
|
|
trigger:"axis"
|
|
},
|
|
legend:{},
|
|
toolbox: {
|
|
show: true,
|
|
feature: {
|
|
dataZoom: {
|
|
yAxisIndex: 'none'
|
|
},
|
|
dataView: { readOnly: false },
|
|
magicType: { type: ['line', 'bar'] },
|
|
restore: {},
|
|
saveAsImage: {}
|
|
}
|
|
},
|
|
xAxis: {
|
|
type: 'category',
|
|
boundaryGap: false,
|
|
data: xRes
|
|
},
|
|
yAxis: {
|
|
type: 'value'
|
|
},
|
|
series: [
|
|
{
|
|
name:"日期个数",
|
|
data: yRes,
|
|
type: 'line',
|
|
areaStyle: {
|
|
color:"rgba(0,128,255,0.2)"
|
|
},
|
|
smooth:true,
|
|
lineStyle:{
|
|
width:5
|
|
},
|
|
emphasis:{
|
|
focus:'series'
|
|
}
|
|
}
|
|
]
|
|
};
|
|
let count = 8;
|
|
setInterval(()=>{
|
|
if(count >= xData.length) count=0
|
|
xRes.shift()
|
|
xRes.push(xData[count])
|
|
yRes.shift()
|
|
yRes.push(yData[count])
|
|
count++
|
|
myCharts.setOption({
|
|
xAxis:[{
|
|
data:xRes
|
|
}],
|
|
series:[{
|
|
data:yRes
|
|
}]
|
|
})
|
|
},2000)
|
|
|
|
option && myCharts.setOption(option);
|
|
|
|
</script>
|
|
<script>
|
|
var chartDom = document.getElementById('mainTwo');
|
|
var myChart = echarts.init(chartDom);
|
|
var option;
|
|
|
|
option = {
|
|
title: {
|
|
text: '各微博类型占比饼状图',
|
|
left: 'center'
|
|
},
|
|
tooltip: {
|
|
trigger: 'item'
|
|
},
|
|
legend: {
|
|
orient: 'vertical',
|
|
left: 'left',
|
|
padding:[10,20,30,20],
|
|
},
|
|
series: [
|
|
{
|
|
name: '博客类型占比',
|
|
type: 'pie',
|
|
radius: '50%',
|
|
data: {{ typeChart |tojson }},
|
|
emphasis: {
|
|
itemStyle: {
|
|
shadowBlur: 10,
|
|
shadowOffsetX: 0,
|
|
shadowColor: 'rgba(0, 0, 0, 0.5)'
|
|
}
|
|
}
|
|
}
|
|
]
|
|
};
|
|
|
|
option && myChart.setOption(option);
|
|
|
|
</script>
|
|
<script>
|
|
var chartDom = document.getElementById('mainThree');
|
|
var myChart = echarts.init(chartDom);
|
|
var option;
|
|
|
|
option = {
|
|
tooltip: {
|
|
trigger: 'item'
|
|
},
|
|
legend: {
|
|
top: '5%',
|
|
left:10,
|
|
right:10,
|
|
type: 'scroll',
|
|
},
|
|
series: [
|
|
{
|
|
name: '评论时间发布个数',
|
|
type: 'pie',
|
|
radius: ['60%', '50%'],
|
|
avoidLabelOverlap: false,
|
|
label: {
|
|
show: false,
|
|
position: 'center'
|
|
},
|
|
emphasis: {
|
|
label: {
|
|
show: true,
|
|
fontSize: 20,
|
|
fontWeight: 'bold'
|
|
}
|
|
},
|
|
labelLine: {
|
|
show: false
|
|
},
|
|
data: {{ createAtChart | tojson }}
|
|
}
|
|
]
|
|
};
|
|
|
|
option && myChart.setOption(option);
|
|
|
|
</script>
|
|
{% endblock %}
|
|
<script src="/static/js/backend-bundle.min.js"></script>
|
|
<script src="/static/js/customizer.js"></script>
|
|
<script src="/static/js/sidebar.js"></script>
|
|
<script src="/static/js/flex-tree.min.js"></script>
|
|
<script src="/static/js/tree.js"></script>
|
|
<script src="/static/js/table-treeview.js"></script>
|
|
<script src="/static/js/sweetalert.js"></script>
|
|
<script src="/static/js/vector-map-custom.js"></script>
|
|
<script src="/static/js/chart-custom.js"></script>
|
|
<script src="/static/js/01.js"></script>
|
|
<script src="/static/js/02.js"></script>
|
|
<script src="/static/js/slider.js"></script>
|
|
<script src="/static/js/index.js" type="module"></script>
|
|
<script src="/static/js/app.js">
|
|
|
|
</script>
|
|
</body>
|
|
</html> |