mirror of
https://github.com/breath57/dingtalk-skills.git
synced 2026-09-14 20:51:31 +08:00
chore: 将 traffic/ 移出版本库,改为本地 ignore
This commit is contained in:
@@ -8,4 +8,7 @@ __pycache__/
|
||||
|
||||
# local drafts & temp files (not for repo)
|
||||
docs/
|
||||
|
||||
# traffic dashboard — local only
|
||||
traffic/
|
||||
temp/
|
||||
-121
@@ -1,121 +0,0 @@
|
||||
// Auto-generated by scripts/merge_traffic.py — do not edit manually
|
||||
const TRAFFIC_DATA = {
|
||||
"last_updated": "2026-03-30 01:00 UTC",
|
||||
"repos": {
|
||||
"breath57_dingtalk-skills": {
|
||||
"name": "breath57/dingtalk-skills",
|
||||
"summary": {
|
||||
"total_clones": 2600,
|
||||
"total_clone_uniques": 1427,
|
||||
"total_views": 2109,
|
||||
"total_view_uniques": 883,
|
||||
"stars": 37,
|
||||
"forks": 4
|
||||
},
|
||||
"daily": {
|
||||
"2026-03-12": {
|
||||
"clones": 101,
|
||||
"clone_uniques": 61,
|
||||
"views": 118,
|
||||
"view_uniques": 38
|
||||
},
|
||||
"2026-03-13": {
|
||||
"clones": 143,
|
||||
"clone_uniques": 75,
|
||||
"views": 150,
|
||||
"view_uniques": 75
|
||||
},
|
||||
"2026-03-14": {
|
||||
"clones": 59,
|
||||
"clone_uniques": 26,
|
||||
"views": 53,
|
||||
"view_uniques": 28
|
||||
},
|
||||
"2026-03-15": {
|
||||
"clones": 57,
|
||||
"clone_uniques": 30,
|
||||
"views": 73,
|
||||
"view_uniques": 20
|
||||
},
|
||||
"2026-03-16": {
|
||||
"clones": 118,
|
||||
"clone_uniques": 57,
|
||||
"views": 168,
|
||||
"view_uniques": 56
|
||||
},
|
||||
"2026-03-17": {
|
||||
"clones": 180,
|
||||
"clone_uniques": 103,
|
||||
"views": 198,
|
||||
"view_uniques": 72
|
||||
},
|
||||
"2026-03-18": {
|
||||
"clones": 232,
|
||||
"clone_uniques": 123,
|
||||
"views": 243,
|
||||
"view_uniques": 121
|
||||
},
|
||||
"2026-03-19": {
|
||||
"clones": 275,
|
||||
"clone_uniques": 135,
|
||||
"views": 121,
|
||||
"view_uniques": 49
|
||||
},
|
||||
"2026-03-20": {
|
||||
"clones": 180,
|
||||
"clone_uniques": 106,
|
||||
"views": 108,
|
||||
"view_uniques": 51
|
||||
},
|
||||
"2026-03-21": {
|
||||
"clones": 58,
|
||||
"clone_uniques": 30,
|
||||
"views": 70,
|
||||
"view_uniques": 27
|
||||
},
|
||||
"2026-03-22": {
|
||||
"clones": 75,
|
||||
"clone_uniques": 42,
|
||||
"views": 97,
|
||||
"view_uniques": 48
|
||||
},
|
||||
"2026-03-23": {
|
||||
"clones": 226,
|
||||
"clone_uniques": 132,
|
||||
"views": 202,
|
||||
"view_uniques": 91
|
||||
},
|
||||
"2026-03-24": {
|
||||
"clones": 202,
|
||||
"clone_uniques": 120,
|
||||
"views": 112,
|
||||
"view_uniques": 63
|
||||
},
|
||||
"2026-03-25": {
|
||||
"clones": 203,
|
||||
"clone_uniques": 109,
|
||||
"views": 87,
|
||||
"view_uniques": 43
|
||||
},
|
||||
"2026-03-26": {
|
||||
"clones": 240,
|
||||
"clone_uniques": 124,
|
||||
"views": 155,
|
||||
"view_uniques": 42
|
||||
},
|
||||
"2026-03-27": {
|
||||
"clones": 160,
|
||||
"clone_uniques": 98,
|
||||
"views": 92,
|
||||
"view_uniques": 44
|
||||
},
|
||||
"2026-03-28": {
|
||||
"clones": 91,
|
||||
"clone_uniques": 56,
|
||||
"views": 62,
|
||||
"view_uniques": 15
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -1,488 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>GitHub Traffic Dashboard</title>
|
||||
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.4/dist/chart.umd.min.js"></script>
|
||||
<style>
|
||||
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
|
||||
:root {
|
||||
--bg: #0a0a0c;
|
||||
--s1: #111114;
|
||||
--s2: #1a1a1e;
|
||||
--s3: #222228;
|
||||
--border: #2a2a30;
|
||||
--text: #f0f0f2;
|
||||
--muted: #71717a;
|
||||
--dim: #52525b;
|
||||
--green: #34d399;
|
||||
--teal: #2dd4bf;
|
||||
--blue: #60a5fa;
|
||||
--indigo: #818cf8;
|
||||
--amber: #fbbf24;
|
||||
--orange: #fb923c;
|
||||
--rose: #fb7185;
|
||||
--r: 16px;
|
||||
}
|
||||
|
||||
html { scroll-behavior: smooth; }
|
||||
|
||||
body {
|
||||
background: var(--bg);
|
||||
color: var(--text);
|
||||
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Segoe UI', Helvetica, sans-serif;
|
||||
min-height: 100vh;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* ── Container ── */
|
||||
.container {
|
||||
max-width: 1400px;
|
||||
margin: 0 auto;
|
||||
padding: 2rem 2.5rem;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) { .container { padding: 1.25rem; } }
|
||||
|
||||
/* ── Header ── */
|
||||
header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
flex-wrap: wrap;
|
||||
gap: 1rem;
|
||||
margin-bottom: 2rem;
|
||||
padding-bottom: 1.25rem;
|
||||
border-bottom: 1px solid var(--border);
|
||||
}
|
||||
|
||||
.hd-left { display: flex; align-items: center; gap: 1rem; }
|
||||
|
||||
.hd-icon {
|
||||
width: 44px; height: 44px;
|
||||
background: linear-gradient(135deg, #34d39918 0%, #60a5fa18 100%);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 12px;
|
||||
display: flex; align-items: center; justify-content: center;
|
||||
font-size: 1.4rem;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.hd-title { font-size: 1.2rem; font-weight: 700; letter-spacing: -0.03em; }
|
||||
.hd-sub { font-size: 0.72rem; color: var(--muted); margin-top: 0.1rem; }
|
||||
|
||||
.hd-right { display: flex; align-items: center; gap: 0.75rem; flex-wrap: wrap; }
|
||||
|
||||
.badge {
|
||||
background: var(--s2);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 999px;
|
||||
padding: 0.3rem 0.9rem;
|
||||
font-size: 0.65rem;
|
||||
color: var(--muted);
|
||||
white-space: nowrap;
|
||||
}
|
||||
.badge-live {
|
||||
display: flex; align-items: center; gap: 0.4rem;
|
||||
}
|
||||
.badge-live::before {
|
||||
content: '';
|
||||
width: 6px; height: 6px;
|
||||
background: var(--green);
|
||||
border-radius: 50%;
|
||||
animation: pulse-dot 2s ease-in-out infinite;
|
||||
}
|
||||
@keyframes pulse-dot { 0%,100% { opacity: 1; } 50% { opacity: 0.3; } }
|
||||
|
||||
/* ── Repo tabs ── */
|
||||
.repo-tabs {
|
||||
display: flex;
|
||||
gap: 0.5rem;
|
||||
margin-bottom: 1.75rem;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.repo-tab {
|
||||
background: var(--s1);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 10px;
|
||||
padding: 0.55rem 1.1rem;
|
||||
font-size: 0.75rem;
|
||||
color: var(--muted);
|
||||
cursor: pointer;
|
||||
transition: all 0.2s;
|
||||
font-family: 'SF Mono', 'Fira Code', monospace;
|
||||
letter-spacing: -0.02em;
|
||||
}
|
||||
.repo-tab:hover { border-color: var(--dim); color: var(--text); }
|
||||
.repo-tab.active {
|
||||
background: var(--s2);
|
||||
border-color: var(--green);
|
||||
color: var(--green);
|
||||
box-shadow: 0 0 12px #34d39915;
|
||||
}
|
||||
|
||||
/* ── 6-col card grid ── */
|
||||
.cards {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(6, 1fr);
|
||||
gap: 0.875rem;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
@media (max-width: 1100px) { .cards { grid-template-columns: repeat(3, 1fr); } }
|
||||
@media (max-width: 640px) { .cards { grid-template-columns: repeat(2, 1fr); } }
|
||||
|
||||
.card {
|
||||
background: var(--s1);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: var(--r);
|
||||
padding: 1.25rem 1.2rem 1rem;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
transition: border-color 0.2s, transform 0.2s, box-shadow 0.2s;
|
||||
}
|
||||
.card:hover {
|
||||
border-color: color-mix(in srgb, var(--accent) 40%, var(--border));
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 30px #00000050;
|
||||
}
|
||||
.card::before {
|
||||
content: '';
|
||||
position: absolute; top: 0; left: 0; right: 0; height: 2px;
|
||||
background: linear-gradient(90deg, var(--accent), transparent);
|
||||
}
|
||||
.card::after {
|
||||
content: '';
|
||||
position: absolute; inset: 0;
|
||||
background: radial-gradient(ellipse at 20% 0%, color-mix(in srgb, var(--accent) 8%, transparent) 0%, transparent 60%);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.card-icon { font-size: 1.1rem; margin-bottom: 0.5rem; }
|
||||
.card-label {
|
||||
font-size: 0.58rem; font-weight: 600;
|
||||
text-transform: uppercase; letter-spacing: 0.1em;
|
||||
color: var(--muted); margin-bottom: 0.65rem;
|
||||
}
|
||||
.card-value {
|
||||
font-size: 1.9rem; font-weight: 800;
|
||||
letter-spacing: -0.05em; line-height: 1;
|
||||
color: var(--text);
|
||||
font-variant-numeric: tabular-nums;
|
||||
}
|
||||
.card-sub {
|
||||
font-size: 0.6rem; color: var(--dim);
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
|
||||
/* ── Charts ── */
|
||||
.charts {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 0.875rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
@media (max-width: 900px) { .charts { grid-template-columns: 1fr; } }
|
||||
|
||||
.chart-card {
|
||||
background: var(--s1);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: var(--r);
|
||||
padding: 1.5rem;
|
||||
}
|
||||
.chart-hd {
|
||||
display: flex; align-items: center; justify-content: space-between;
|
||||
margin-bottom: 1.25rem;
|
||||
}
|
||||
.chart-title {
|
||||
font-size: 0.7rem; font-weight: 600;
|
||||
text-transform: uppercase; letter-spacing: 0.08em;
|
||||
color: var(--muted);
|
||||
display: flex; align-items: center; gap: 0.4rem;
|
||||
}
|
||||
.chart-wrap { position: relative; height: 220px; }
|
||||
|
||||
/* ── Footer ── */
|
||||
.footer {
|
||||
display: flex; align-items: center; justify-content: space-between;
|
||||
flex-wrap: wrap; gap: 0.5rem;
|
||||
margin-top: 1.5rem;
|
||||
font-size: 0.62rem; color: var(--dim);
|
||||
padding-top: 1rem; border-top: 1px solid var(--border);
|
||||
}
|
||||
.footer code {
|
||||
background: var(--s2); border: 1px solid var(--border);
|
||||
border-radius: 5px; padding: 0.1rem 0.4rem; font-size: 0.6rem;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
|
||||
<header>
|
||||
<div class="hd-left">
|
||||
<div class="hd-icon">📊</div>
|
||||
<div>
|
||||
<div class="hd-title">GitHub Traffic Dashboard</div>
|
||||
<div class="hd-sub">自动采集 · 实时刷新 · 多仓库</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hd-right">
|
||||
<span id="last-updated" class="badge">载入中…</span>
|
||||
<span class="badge badge-live">实时</span>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div id="repo-tabs" class="repo-tabs"></div>
|
||||
|
||||
<div class="cards">
|
||||
<div class="card" style="--accent: var(--green)">
|
||||
<div class="card-icon">📥</div>
|
||||
<div class="card-label">总 Clone</div>
|
||||
<div class="card-value" id="v-clones">—</div>
|
||||
<div class="card-sub">全历史累计</div>
|
||||
</div>
|
||||
<div class="card" style="--accent: var(--teal)">
|
||||
<div class="card-icon">👥</div>
|
||||
<div class="card-label">独立 Cloner</div>
|
||||
<div class="card-value" id="v-clone-u">—</div>
|
||||
<div class="card-sub">每日之和</div>
|
||||
</div>
|
||||
<div class="card" style="--accent: var(--blue)">
|
||||
<div class="card-icon">👁</div>
|
||||
<div class="card-label">总访问量</div>
|
||||
<div class="card-value" id="v-views">—</div>
|
||||
<div class="card-sub">全历史累计</div>
|
||||
</div>
|
||||
<div class="card" style="--accent: var(--indigo)">
|
||||
<div class="card-icon">🧑</div>
|
||||
<div class="card-label">独立访客</div>
|
||||
<div class="card-value" id="v-view-u">—</div>
|
||||
<div class="card-sub">每日之和</div>
|
||||
</div>
|
||||
<div class="card" style="--accent: var(--amber)">
|
||||
<div class="card-icon">⭐</div>
|
||||
<div class="card-label">Stars</div>
|
||||
<div class="card-value" id="v-stars">—</div>
|
||||
<div class="card-sub">当前</div>
|
||||
</div>
|
||||
<div class="card" style="--accent: var(--orange)">
|
||||
<div class="card-icon">🍴</div>
|
||||
<div class="card-label">Forks</div>
|
||||
<div class="card-value" id="v-forks">—</div>
|
||||
<div class="card-sub">当前</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="charts">
|
||||
<div class="chart-card">
|
||||
<div class="chart-hd">
|
||||
<span class="chart-title">📥 Clone 趋势</span>
|
||||
</div>
|
||||
<div class="chart-wrap"><canvas id="chart-clones"></canvas></div>
|
||||
</div>
|
||||
<div class="chart-card">
|
||||
<div class="chart-hd">
|
||||
<span class="chart-title">👁 访问趋势</span>
|
||||
</div>
|
||||
<div class="chart-wrap"><canvas id="chart-views"></canvas></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<span id="coverage">—</span>
|
||||
<span>
|
||||
采集: <code>./scripts/collect-traffic.sh</code> ·
|
||||
看板: <code>python3 scripts/traffic-server.py</code>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
</div><!-- .container -->
|
||||
|
||||
<script>
|
||||
(function () {
|
||||
const REFRESH_MS = 60000;
|
||||
let chartClones = null, chartViews = null;
|
||||
let currentSlug = null;
|
||||
|
||||
async function loadData() {
|
||||
const resp = await fetch('data.js?t=' + Date.now());
|
||||
const text = await resp.text();
|
||||
const m = text.match(/const TRAFFIC_DATA\s*=\s*(\{[\s\S]*\})\s*;/);
|
||||
if (!m) return null;
|
||||
return JSON.parse(m[1]);
|
||||
}
|
||||
|
||||
const fmt = n => (n ?? 0).toLocaleString('zh-CN');
|
||||
|
||||
function renderTabs(data) {
|
||||
const box = document.getElementById('repo-tabs');
|
||||
const slugs = Object.keys(data.repos);
|
||||
box.innerHTML = '';
|
||||
if (slugs.length <= 1) { box.style.display = 'none'; return; }
|
||||
box.style.display = 'flex';
|
||||
slugs.forEach(slug => {
|
||||
const tab = document.createElement('div');
|
||||
tab.className = 'repo-tab' + (slug === currentSlug ? ' active' : '');
|
||||
tab.textContent = data.repos[slug].name;
|
||||
tab.onclick = () => { currentSlug = slug; render(data); };
|
||||
box.appendChild(tab);
|
||||
});
|
||||
}
|
||||
|
||||
function fillCards(repo) {
|
||||
const s = repo.summary || {};
|
||||
document.getElementById('v-clones').textContent = fmt(s.total_clones);
|
||||
document.getElementById('v-clone-u').textContent = fmt(s.total_clone_uniques);
|
||||
document.getElementById('v-views').textContent = fmt(s.total_views);
|
||||
document.getElementById('v-view-u').textContent = fmt(s.total_view_uniques);
|
||||
document.getElementById('v-stars').textContent = fmt(s.stars);
|
||||
document.getElementById('v-forks').textContent = fmt(s.forks);
|
||||
}
|
||||
|
||||
const mkGrad = (ctx, hex) => {
|
||||
const g = ctx.createLinearGradient(0, 0, 0, 220);
|
||||
g.addColorStop(0, hex + '30');
|
||||
g.addColorStop(1, hex + '00');
|
||||
return g;
|
||||
};
|
||||
|
||||
const ds = {
|
||||
tension: 0.35, fill: true, spanGaps: true,
|
||||
pointRadius: 2.5, pointHoverRadius: 6,
|
||||
pointBorderWidth: 0, borderWidth: 2,
|
||||
};
|
||||
|
||||
const chartOpts = () => ({
|
||||
responsive: true,
|
||||
maintainAspectRatio: false,
|
||||
interaction: { mode: 'index', intersect: false },
|
||||
plugins: {
|
||||
legend: {
|
||||
labels: {
|
||||
color: '#71717a', font: { size: 10.5 },
|
||||
boxWidth: 8, padding: 16,
|
||||
usePointStyle: true, pointStyleWidth: 8,
|
||||
},
|
||||
},
|
||||
tooltip: {
|
||||
backgroundColor: '#1a1a1e',
|
||||
titleColor: '#f0f0f2', bodyColor: '#a1a1aa',
|
||||
borderColor: '#2a2a30', borderWidth: 1,
|
||||
padding: 10, cornerRadius: 8,
|
||||
callbacks: {
|
||||
label: ctx =>
|
||||
` ${ctx.dataset.label}: ${ctx.parsed.y?.toLocaleString('zh-CN') ?? '—'}`,
|
||||
},
|
||||
},
|
||||
},
|
||||
scales: {
|
||||
x: {
|
||||
grid: { color: '#1a1a1e' },
|
||||
ticks: { color: '#52525b', font: { size: 10 }, maxRotation: 0 },
|
||||
border: { display: false },
|
||||
},
|
||||
y: {
|
||||
grid: { color: '#1a1a1e' },
|
||||
ticks: { color: '#52525b', font: { size: 10 } },
|
||||
beginAtZero: true,
|
||||
border: { display: false },
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
function renderCharts(repo) {
|
||||
const daily = repo.daily || {};
|
||||
const days = Object.keys(daily).sort();
|
||||
const labels = days.map(d => d.slice(5));
|
||||
|
||||
// Clone chart
|
||||
const ctxC = document.getElementById('chart-clones').getContext('2d');
|
||||
if (chartClones) chartClones.destroy();
|
||||
chartClones = new Chart(ctxC, {
|
||||
type: 'line',
|
||||
data: {
|
||||
labels,
|
||||
datasets: [
|
||||
{
|
||||
...ds, label: 'Clone',
|
||||
data: days.map(d => daily[d]?.clones ?? null),
|
||||
borderColor: '#34d399',
|
||||
backgroundColor: mkGrad(ctxC, '#34d399'),
|
||||
pointBackgroundColor: '#34d399',
|
||||
},
|
||||
{
|
||||
...ds, label: '独立 Cloner',
|
||||
data: days.map(d => daily[d]?.clone_uniques ?? null),
|
||||
borderColor: '#2dd4bf',
|
||||
backgroundColor: mkGrad(ctxC, '#2dd4bf'),
|
||||
pointBackgroundColor: '#2dd4bf',
|
||||
},
|
||||
],
|
||||
},
|
||||
options: chartOpts(),
|
||||
});
|
||||
|
||||
// View chart
|
||||
const ctxV = document.getElementById('chart-views').getContext('2d');
|
||||
if (chartViews) chartViews.destroy();
|
||||
chartViews = new Chart(ctxV, {
|
||||
type: 'line',
|
||||
data: {
|
||||
labels,
|
||||
datasets: [
|
||||
{
|
||||
...ds, label: '访问量',
|
||||
data: days.map(d => daily[d]?.views ?? null),
|
||||
borderColor: '#60a5fa',
|
||||
backgroundColor: mkGrad(ctxV, '#60a5fa'),
|
||||
pointBackgroundColor: '#60a5fa',
|
||||
},
|
||||
{
|
||||
...ds, label: '独立访客',
|
||||
data: days.map(d => daily[d]?.view_uniques ?? null),
|
||||
borderColor: '#818cf8',
|
||||
backgroundColor: mkGrad(ctxV, '#818cf8'),
|
||||
pointBackgroundColor: '#818cf8',
|
||||
},
|
||||
],
|
||||
},
|
||||
options: chartOpts(),
|
||||
});
|
||||
|
||||
if (days.length) {
|
||||
document.getElementById('coverage').textContent =
|
||||
`数据覆盖:${days[0]} → ${days[days.length - 1]}(${days.length} 天)`;
|
||||
}
|
||||
}
|
||||
|
||||
function render(data) {
|
||||
document.getElementById('last-updated').textContent = '更新于 ' + (data.last_updated || '—');
|
||||
|
||||
const slugs = Object.keys(data.repos);
|
||||
if (!slugs.length) return;
|
||||
if (!currentSlug || !data.repos[currentSlug]) currentSlug = slugs[0];
|
||||
|
||||
renderTabs(data);
|
||||
const repo = data.repos[currentSlug];
|
||||
fillCards(repo);
|
||||
renderCharts(repo);
|
||||
}
|
||||
|
||||
async function refresh() {
|
||||
try {
|
||||
const data = await loadData();
|
||||
if (data) render(data);
|
||||
} catch (e) {
|
||||
console.warn('刷新失败:', e);
|
||||
}
|
||||
}
|
||||
|
||||
// 初始加载 + 定时刷新
|
||||
refresh();
|
||||
setInterval(refresh, REFRESH_MS);
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,2 +0,0 @@
|
||||
# raw/ 目录存放每日原始 API 响应,由 collect-traffic.sh 自动生成
|
||||
# 文件命名格式:clones-YYYY-MM-DD.json / views-YYYY-MM-DD.json / repo-YYYY-MM-DD.json
|
||||
@@ -1 +0,0 @@
|
||||
{"count":2109,"uniques":886,"clones":[{"timestamp":"2026-03-12T00:00:00Z","count":101,"uniques":61},{"timestamp":"2026-03-13T00:00:00Z","count":143,"uniques":75},{"timestamp":"2026-03-14T00:00:00Z","count":59,"uniques":26},{"timestamp":"2026-03-15T00:00:00Z","count":57,"uniques":30},{"timestamp":"2026-03-16T00:00:00Z","count":118,"uniques":57},{"timestamp":"2026-03-17T00:00:00Z","count":180,"uniques":103},{"timestamp":"2026-03-18T00:00:00Z","count":232,"uniques":123},{"timestamp":"2026-03-19T00:00:00Z","count":275,"uniques":135},{"timestamp":"2026-03-20T00:00:00Z","count":180,"uniques":106},{"timestamp":"2026-03-21T00:00:00Z","count":58,"uniques":30},{"timestamp":"2026-03-22T00:00:00Z","count":75,"uniques":42},{"timestamp":"2026-03-23T00:00:00Z","count":226,"uniques":132},{"timestamp":"2026-03-24T00:00:00Z","count":202,"uniques":120},{"timestamp":"2026-03-25T00:00:00Z","count":203,"uniques":109}]}
|
||||
@@ -1 +0,0 @@
|
||||
{"count":2109,"uniques":886,"clones":[{"timestamp":"2026-03-12T00:00:00Z","count":101,"uniques":61},{"timestamp":"2026-03-13T00:00:00Z","count":143,"uniques":75},{"timestamp":"2026-03-14T00:00:00Z","count":59,"uniques":26},{"timestamp":"2026-03-15T00:00:00Z","count":57,"uniques":30},{"timestamp":"2026-03-16T00:00:00Z","count":118,"uniques":57},{"timestamp":"2026-03-17T00:00:00Z","count":180,"uniques":103},{"timestamp":"2026-03-18T00:00:00Z","count":232,"uniques":123},{"timestamp":"2026-03-19T00:00:00Z","count":275,"uniques":135},{"timestamp":"2026-03-20T00:00:00Z","count":180,"uniques":106},{"timestamp":"2026-03-21T00:00:00Z","count":58,"uniques":30},{"timestamp":"2026-03-22T00:00:00Z","count":75,"uniques":42},{"timestamp":"2026-03-23T00:00:00Z","count":226,"uniques":132},{"timestamp":"2026-03-24T00:00:00Z","count":202,"uniques":120},{"timestamp":"2026-03-25T00:00:00Z","count":203,"uniques":109}]}
|
||||
@@ -1 +0,0 @@
|
||||
{"count":2248,"uniques":900,"clones":[{"timestamp":"2026-03-13T00:00:00Z","count":143,"uniques":75},{"timestamp":"2026-03-14T00:00:00Z","count":59,"uniques":26},{"timestamp":"2026-03-15T00:00:00Z","count":57,"uniques":30},{"timestamp":"2026-03-16T00:00:00Z","count":118,"uniques":57},{"timestamp":"2026-03-17T00:00:00Z","count":180,"uniques":103},{"timestamp":"2026-03-18T00:00:00Z","count":232,"uniques":123},{"timestamp":"2026-03-19T00:00:00Z","count":275,"uniques":135},{"timestamp":"2026-03-20T00:00:00Z","count":180,"uniques":106},{"timestamp":"2026-03-21T00:00:00Z","count":58,"uniques":30},{"timestamp":"2026-03-22T00:00:00Z","count":75,"uniques":42},{"timestamp":"2026-03-23T00:00:00Z","count":226,"uniques":132},{"timestamp":"2026-03-24T00:00:00Z","count":202,"uniques":120},{"timestamp":"2026-03-25T00:00:00Z","count":203,"uniques":109},{"timestamp":"2026-03-26T00:00:00Z","count":240,"uniques":124}]}
|
||||
@@ -1 +0,0 @@
|
||||
{"count":2265,"uniques":892,"clones":[{"timestamp":"2026-03-14T00:00:00Z","count":59,"uniques":26},{"timestamp":"2026-03-15T00:00:00Z","count":57,"uniques":30},{"timestamp":"2026-03-16T00:00:00Z","count":118,"uniques":57},{"timestamp":"2026-03-17T00:00:00Z","count":180,"uniques":103},{"timestamp":"2026-03-18T00:00:00Z","count":232,"uniques":123},{"timestamp":"2026-03-19T00:00:00Z","count":275,"uniques":135},{"timestamp":"2026-03-20T00:00:00Z","count":180,"uniques":106},{"timestamp":"2026-03-21T00:00:00Z","count":58,"uniques":30},{"timestamp":"2026-03-22T00:00:00Z","count":75,"uniques":42},{"timestamp":"2026-03-23T00:00:00Z","count":226,"uniques":132},{"timestamp":"2026-03-24T00:00:00Z","count":202,"uniques":120},{"timestamp":"2026-03-25T00:00:00Z","count":203,"uniques":109},{"timestamp":"2026-03-26T00:00:00Z","count":240,"uniques":124},{"timestamp":"2026-03-27T00:00:00Z","count":160,"uniques":98}]}
|
||||
@@ -1 +0,0 @@
|
||||
{"count":2297,"uniques":918,"clones":[{"timestamp":"2026-03-15T00:00:00Z","count":57,"uniques":30},{"timestamp":"2026-03-16T00:00:00Z","count":118,"uniques":57},{"timestamp":"2026-03-17T00:00:00Z","count":180,"uniques":103},{"timestamp":"2026-03-18T00:00:00Z","count":232,"uniques":123},{"timestamp":"2026-03-19T00:00:00Z","count":275,"uniques":135},{"timestamp":"2026-03-20T00:00:00Z","count":180,"uniques":106},{"timestamp":"2026-03-21T00:00:00Z","count":58,"uniques":30},{"timestamp":"2026-03-22T00:00:00Z","count":75,"uniques":42},{"timestamp":"2026-03-23T00:00:00Z","count":226,"uniques":132},{"timestamp":"2026-03-24T00:00:00Z","count":202,"uniques":120},{"timestamp":"2026-03-25T00:00:00Z","count":203,"uniques":109},{"timestamp":"2026-03-26T00:00:00Z","count":240,"uniques":124},{"timestamp":"2026-03-27T00:00:00Z","count":160,"uniques":98},{"timestamp":"2026-03-28T00:00:00Z","count":91,"uniques":56}]}
|
||||
@@ -1 +0,0 @@
|
||||
{"forks":4,"stars":37}
|
||||
@@ -1 +0,0 @@
|
||||
{"forks":4,"stars":37}
|
||||
@@ -1 +0,0 @@
|
||||
{"forks":4,"stars":37}
|
||||
@@ -1 +0,0 @@
|
||||
{"forks":4,"stars":37}
|
||||
@@ -1 +0,0 @@
|
||||
{"forks":4,"stars":37}
|
||||
@@ -1 +0,0 @@
|
||||
{"count":1800,"uniques":692,"views":[{"timestamp":"2026-03-12T00:00:00Z","count":118,"uniques":38},{"timestamp":"2026-03-13T00:00:00Z","count":150,"uniques":75},{"timestamp":"2026-03-14T00:00:00Z","count":53,"uniques":28},{"timestamp":"2026-03-15T00:00:00Z","count":73,"uniques":20},{"timestamp":"2026-03-16T00:00:00Z","count":168,"uniques":56},{"timestamp":"2026-03-17T00:00:00Z","count":198,"uniques":72},{"timestamp":"2026-03-18T00:00:00Z","count":243,"uniques":121},{"timestamp":"2026-03-19T00:00:00Z","count":121,"uniques":49},{"timestamp":"2026-03-20T00:00:00Z","count":108,"uniques":51},{"timestamp":"2026-03-21T00:00:00Z","count":70,"uniques":27},{"timestamp":"2026-03-22T00:00:00Z","count":97,"uniques":48},{"timestamp":"2026-03-23T00:00:00Z","count":202,"uniques":91},{"timestamp":"2026-03-24T00:00:00Z","count":112,"uniques":63},{"timestamp":"2026-03-25T00:00:00Z","count":87,"uniques":43}]}
|
||||
@@ -1 +0,0 @@
|
||||
{"count":1800,"uniques":692,"views":[{"timestamp":"2026-03-12T00:00:00Z","count":118,"uniques":38},{"timestamp":"2026-03-13T00:00:00Z","count":150,"uniques":75},{"timestamp":"2026-03-14T00:00:00Z","count":53,"uniques":28},{"timestamp":"2026-03-15T00:00:00Z","count":73,"uniques":20},{"timestamp":"2026-03-16T00:00:00Z","count":168,"uniques":56},{"timestamp":"2026-03-17T00:00:00Z","count":198,"uniques":72},{"timestamp":"2026-03-18T00:00:00Z","count":243,"uniques":121},{"timestamp":"2026-03-19T00:00:00Z","count":121,"uniques":49},{"timestamp":"2026-03-20T00:00:00Z","count":108,"uniques":51},{"timestamp":"2026-03-21T00:00:00Z","count":70,"uniques":27},{"timestamp":"2026-03-22T00:00:00Z","count":97,"uniques":48},{"timestamp":"2026-03-23T00:00:00Z","count":202,"uniques":91},{"timestamp":"2026-03-24T00:00:00Z","count":112,"uniques":63},{"timestamp":"2026-03-25T00:00:00Z","count":87,"uniques":43}]}
|
||||
@@ -1 +0,0 @@
|
||||
{"count":1837,"uniques":707,"views":[{"timestamp":"2026-03-13T00:00:00Z","count":150,"uniques":75},{"timestamp":"2026-03-14T00:00:00Z","count":53,"uniques":28},{"timestamp":"2026-03-15T00:00:00Z","count":73,"uniques":20},{"timestamp":"2026-03-16T00:00:00Z","count":168,"uniques":56},{"timestamp":"2026-03-17T00:00:00Z","count":198,"uniques":72},{"timestamp":"2026-03-18T00:00:00Z","count":243,"uniques":121},{"timestamp":"2026-03-19T00:00:00Z","count":121,"uniques":49},{"timestamp":"2026-03-20T00:00:00Z","count":108,"uniques":51},{"timestamp":"2026-03-21T00:00:00Z","count":70,"uniques":27},{"timestamp":"2026-03-22T00:00:00Z","count":97,"uniques":48},{"timestamp":"2026-03-23T00:00:00Z","count":202,"uniques":91},{"timestamp":"2026-03-24T00:00:00Z","count":112,"uniques":63},{"timestamp":"2026-03-25T00:00:00Z","count":87,"uniques":43},{"timestamp":"2026-03-26T00:00:00Z","count":155,"uniques":42}]}
|
||||
@@ -1 +0,0 @@
|
||||
{"count":1779,"uniques":685,"views":[{"timestamp":"2026-03-14T00:00:00Z","count":53,"uniques":28},{"timestamp":"2026-03-15T00:00:00Z","count":73,"uniques":20},{"timestamp":"2026-03-16T00:00:00Z","count":168,"uniques":56},{"timestamp":"2026-03-17T00:00:00Z","count":198,"uniques":72},{"timestamp":"2026-03-18T00:00:00Z","count":243,"uniques":121},{"timestamp":"2026-03-19T00:00:00Z","count":121,"uniques":49},{"timestamp":"2026-03-20T00:00:00Z","count":108,"uniques":51},{"timestamp":"2026-03-21T00:00:00Z","count":70,"uniques":27},{"timestamp":"2026-03-22T00:00:00Z","count":97,"uniques":48},{"timestamp":"2026-03-23T00:00:00Z","count":202,"uniques":91},{"timestamp":"2026-03-24T00:00:00Z","count":112,"uniques":63},{"timestamp":"2026-03-25T00:00:00Z","count":87,"uniques":43},{"timestamp":"2026-03-26T00:00:00Z","count":155,"uniques":42},{"timestamp":"2026-03-27T00:00:00Z","count":92,"uniques":44}]}
|
||||
@@ -1 +0,0 @@
|
||||
{"count":1788,"uniques":681,"views":[{"timestamp":"2026-03-15T00:00:00Z","count":73,"uniques":20},{"timestamp":"2026-03-16T00:00:00Z","count":168,"uniques":56},{"timestamp":"2026-03-17T00:00:00Z","count":198,"uniques":72},{"timestamp":"2026-03-18T00:00:00Z","count":243,"uniques":121},{"timestamp":"2026-03-19T00:00:00Z","count":121,"uniques":49},{"timestamp":"2026-03-20T00:00:00Z","count":108,"uniques":51},{"timestamp":"2026-03-21T00:00:00Z","count":70,"uniques":27},{"timestamp":"2026-03-22T00:00:00Z","count":97,"uniques":48},{"timestamp":"2026-03-23T00:00:00Z","count":202,"uniques":91},{"timestamp":"2026-03-24T00:00:00Z","count":112,"uniques":63},{"timestamp":"2026-03-25T00:00:00Z","count":87,"uniques":43},{"timestamp":"2026-03-26T00:00:00Z","count":155,"uniques":42},{"timestamp":"2026-03-27T00:00:00Z","count":92,"uniques":44},{"timestamp":"2026-03-28T00:00:00Z","count":62,"uniques":15}]}
|
||||
@@ -1 +0,0 @@
|
||||
{"count":2109,"uniques":886,"clones":[{"timestamp":"2026-03-12T00:00:00Z","count":101,"uniques":61},{"timestamp":"2026-03-13T00:00:00Z","count":143,"uniques":75},{"timestamp":"2026-03-14T00:00:00Z","count":59,"uniques":26},{"timestamp":"2026-03-15T00:00:00Z","count":57,"uniques":30},{"timestamp":"2026-03-16T00:00:00Z","count":118,"uniques":57},{"timestamp":"2026-03-17T00:00:00Z","count":180,"uniques":103},{"timestamp":"2026-03-18T00:00:00Z","count":232,"uniques":123},{"timestamp":"2026-03-19T00:00:00Z","count":275,"uniques":135},{"timestamp":"2026-03-20T00:00:00Z","count":180,"uniques":106},{"timestamp":"2026-03-21T00:00:00Z","count":58,"uniques":30},{"timestamp":"2026-03-22T00:00:00Z","count":75,"uniques":42},{"timestamp":"2026-03-23T00:00:00Z","count":226,"uniques":132},{"timestamp":"2026-03-24T00:00:00Z","count":202,"uniques":120},{"timestamp":"2026-03-25T00:00:00Z","count":203,"uniques":109}]}
|
||||
@@ -1 +0,0 @@
|
||||
{"forks":4,"stars":37}
|
||||
@@ -1 +0,0 @@
|
||||
{"count":1800,"uniques":692,"views":[{"timestamp":"2026-03-12T00:00:00Z","count":118,"uniques":38},{"timestamp":"2026-03-13T00:00:00Z","count":150,"uniques":75},{"timestamp":"2026-03-14T00:00:00Z","count":53,"uniques":28},{"timestamp":"2026-03-15T00:00:00Z","count":73,"uniques":20},{"timestamp":"2026-03-16T00:00:00Z","count":168,"uniques":56},{"timestamp":"2026-03-17T00:00:00Z","count":198,"uniques":72},{"timestamp":"2026-03-18T00:00:00Z","count":243,"uniques":121},{"timestamp":"2026-03-19T00:00:00Z","count":121,"uniques":49},{"timestamp":"2026-03-20T00:00:00Z","count":108,"uniques":51},{"timestamp":"2026-03-21T00:00:00Z","count":70,"uniques":27},{"timestamp":"2026-03-22T00:00:00Z","count":97,"uniques":48},{"timestamp":"2026-03-23T00:00:00Z","count":202,"uniques":91},{"timestamp":"2026-03-24T00:00:00Z","count":112,"uniques":63},{"timestamp":"2026-03-25T00:00:00Z","count":87,"uniques":43}]}
|
||||
Reference in New Issue
Block a user