diff --git a/.gitignore b/.gitignore index 37c9963..2059543 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,6 @@ node_modules/ dist/ .astro/ *.log -.env.local \ No newline at end of file +.env.local +.tmp/ +gzhh/ diff --git a/public/assets/wechat-archive/wechat-081.webp b/public/assets/wechat-archive/wechat-081.webp new file mode 100644 index 0000000..33abded Binary files /dev/null and b/public/assets/wechat-archive/wechat-081.webp differ diff --git a/public/assets/wechat-archive/wechat-084.webp b/public/assets/wechat-archive/wechat-084.webp new file mode 100644 index 0000000..bc5d44b Binary files /dev/null and b/public/assets/wechat-archive/wechat-084.webp differ diff --git a/public/assets/wechat-archive/wechat-085.webp b/public/assets/wechat-archive/wechat-085.webp new file mode 100644 index 0000000..8531ac0 Binary files /dev/null and b/public/assets/wechat-archive/wechat-085.webp differ diff --git a/public/assets/wechat-archive/wechat-088.webp b/public/assets/wechat-archive/wechat-088.webp new file mode 100644 index 0000000..6c2cfa3 Binary files /dev/null and b/public/assets/wechat-archive/wechat-088.webp differ diff --git a/public/assets/wechat-archive/wechat-089.webp b/public/assets/wechat-archive/wechat-089.webp new file mode 100644 index 0000000..7f52776 Binary files /dev/null and b/public/assets/wechat-archive/wechat-089.webp differ diff --git a/public/assets/wechat-archive/wechat-117.webp b/public/assets/wechat-archive/wechat-117.webp new file mode 100644 index 0000000..c1877c3 Binary files /dev/null and b/public/assets/wechat-archive/wechat-117.webp differ diff --git a/public/assets/wechat-archive/wechat-121.webp b/public/assets/wechat-archive/wechat-121.webp new file mode 100644 index 0000000..a3539b5 Binary files /dev/null and b/public/assets/wechat-archive/wechat-121.webp differ diff --git a/public/assets/wechat-archive/wechat-129.webp b/public/assets/wechat-archive/wechat-129.webp new file mode 100644 index 0000000..f325a60 Binary files /dev/null and b/public/assets/wechat-archive/wechat-129.webp differ diff --git a/public/assets/wechat-archive/wechat-132.webp b/public/assets/wechat-archive/wechat-132.webp new file mode 100644 index 0000000..96eddd8 Binary files /dev/null and b/public/assets/wechat-archive/wechat-132.webp differ diff --git a/public/assets/wechat-archive/wechat-145.webp b/public/assets/wechat-archive/wechat-145.webp new file mode 100644 index 0000000..0610926 Binary files /dev/null and b/public/assets/wechat-archive/wechat-145.webp differ diff --git a/public/assets/wechat-archive/wechat-146.webp b/public/assets/wechat-archive/wechat-146.webp new file mode 100644 index 0000000..6694825 Binary files /dev/null and b/public/assets/wechat-archive/wechat-146.webp differ diff --git a/public/assets/wechat-archive/wechat-150.webp b/public/assets/wechat-archive/wechat-150.webp new file mode 100644 index 0000000..53b745e Binary files /dev/null and b/public/assets/wechat-archive/wechat-150.webp differ diff --git a/public/assets/wechat-archive/wechat-151.webp b/public/assets/wechat-archive/wechat-151.webp new file mode 100644 index 0000000..0f43473 Binary files /dev/null and b/public/assets/wechat-archive/wechat-151.webp differ diff --git a/public/assets/wechat-archive/wechat-152.webp b/public/assets/wechat-archive/wechat-152.webp new file mode 100644 index 0000000..8bad20c Binary files /dev/null and b/public/assets/wechat-archive/wechat-152.webp differ diff --git a/public/assets/wechat-archive/wechat-153.webp b/public/assets/wechat-archive/wechat-153.webp new file mode 100644 index 0000000..ef1b408 Binary files /dev/null and b/public/assets/wechat-archive/wechat-153.webp differ diff --git a/public/assets/wechat-archive/wechat-159.webp b/public/assets/wechat-archive/wechat-159.webp new file mode 100644 index 0000000..5dba38f Binary files /dev/null and b/public/assets/wechat-archive/wechat-159.webp differ diff --git a/public/assets/wechat-archive/wechat-160.webp b/public/assets/wechat-archive/wechat-160.webp new file mode 100644 index 0000000..dfe6ead Binary files /dev/null and b/public/assets/wechat-archive/wechat-160.webp differ diff --git a/public/assets/wechat-archive/wechat-161.webp b/public/assets/wechat-archive/wechat-161.webp new file mode 100644 index 0000000..7af60d5 Binary files /dev/null and b/public/assets/wechat-archive/wechat-161.webp differ diff --git a/public/assets/wechat-archive/wechat-162.webp b/public/assets/wechat-archive/wechat-162.webp new file mode 100644 index 0000000..0d0be7e Binary files /dev/null and b/public/assets/wechat-archive/wechat-162.webp differ diff --git a/public/assets/wechat-archive/wechat-176.webp b/public/assets/wechat-archive/wechat-176.webp new file mode 100644 index 0000000..885f34c Binary files /dev/null and b/public/assets/wechat-archive/wechat-176.webp differ diff --git a/public/assets/wechat-archive/wechat-178.webp b/public/assets/wechat-archive/wechat-178.webp new file mode 100644 index 0000000..b4951c6 Binary files /dev/null and b/public/assets/wechat-archive/wechat-178.webp differ diff --git a/public/assets/wechat-archive/wechat-180.webp b/public/assets/wechat-archive/wechat-180.webp new file mode 100644 index 0000000..a3dc82d Binary files /dev/null and b/public/assets/wechat-archive/wechat-180.webp differ diff --git a/public/assets/wechat-archive/wechat-181.webp b/public/assets/wechat-archive/wechat-181.webp new file mode 100644 index 0000000..f072cab Binary files /dev/null and b/public/assets/wechat-archive/wechat-181.webp differ diff --git a/public/assets/wechat-archive/wechat-193.webp b/public/assets/wechat-archive/wechat-193.webp new file mode 100644 index 0000000..05708df Binary files /dev/null and b/public/assets/wechat-archive/wechat-193.webp differ diff --git a/public/assets/wechat-archive/wechat-196.webp b/public/assets/wechat-archive/wechat-196.webp new file mode 100644 index 0000000..3b5ebf6 Binary files /dev/null and b/public/assets/wechat-archive/wechat-196.webp differ diff --git a/public/assets/wechat-archive/wechat-197.webp b/public/assets/wechat-archive/wechat-197.webp new file mode 100644 index 0000000..83caada Binary files /dev/null and b/public/assets/wechat-archive/wechat-197.webp differ diff --git a/public/assets/wechat-archive/wechat-368.webp b/public/assets/wechat-archive/wechat-368.webp new file mode 100644 index 0000000..9299a38 Binary files /dev/null and b/public/assets/wechat-archive/wechat-368.webp differ diff --git a/public/assets/wechat-archive/wechat-370.webp b/public/assets/wechat-archive/wechat-370.webp new file mode 100644 index 0000000..fbf0768 Binary files /dev/null and b/public/assets/wechat-archive/wechat-370.webp differ diff --git a/public/assets/wechat-archive/wechat-373.webp b/public/assets/wechat-archive/wechat-373.webp new file mode 100644 index 0000000..3f2e574 Binary files /dev/null and b/public/assets/wechat-archive/wechat-373.webp differ diff --git a/public/assets/wechat-archive/wechat-375.webp b/public/assets/wechat-archive/wechat-375.webp new file mode 100644 index 0000000..3c85c77 Binary files /dev/null and b/public/assets/wechat-archive/wechat-375.webp differ diff --git a/public/assets/wechat-archive/wechat-382.webp b/public/assets/wechat-archive/wechat-382.webp new file mode 100644 index 0000000..0d081f7 Binary files /dev/null and b/public/assets/wechat-archive/wechat-382.webp differ diff --git a/public/assets/wechat-archive/wechat-387.webp b/public/assets/wechat-archive/wechat-387.webp new file mode 100644 index 0000000..62c44b2 Binary files /dev/null and b/public/assets/wechat-archive/wechat-387.webp differ diff --git a/public/assets/wechat-archive/wechat-388.webp b/public/assets/wechat-archive/wechat-388.webp new file mode 100644 index 0000000..abda70b Binary files /dev/null and b/public/assets/wechat-archive/wechat-388.webp differ diff --git a/public/assets/wechat-archive/wechat-391.webp b/public/assets/wechat-archive/wechat-391.webp new file mode 100644 index 0000000..c2a0f3b Binary files /dev/null and b/public/assets/wechat-archive/wechat-391.webp differ diff --git a/public/assets/wechat-archive/wechat-396.webp b/public/assets/wechat-archive/wechat-396.webp new file mode 100644 index 0000000..2233f38 Binary files /dev/null and b/public/assets/wechat-archive/wechat-396.webp differ diff --git a/public/assets/wechat-archive/wechat-405.webp b/public/assets/wechat-archive/wechat-405.webp new file mode 100644 index 0000000..f52092d Binary files /dev/null and b/public/assets/wechat-archive/wechat-405.webp differ diff --git a/public/assets/wechat-archive/wechat-408.webp b/public/assets/wechat-archive/wechat-408.webp new file mode 100644 index 0000000..17ccd1e Binary files /dev/null and b/public/assets/wechat-archive/wechat-408.webp differ diff --git a/public/assets/wechat-archive/wechat-411.webp b/public/assets/wechat-archive/wechat-411.webp new file mode 100644 index 0000000..0bdf104 Binary files /dev/null and b/public/assets/wechat-archive/wechat-411.webp differ diff --git a/public/assets/wechat-archive/wechat-446.webp b/public/assets/wechat-archive/wechat-446.webp new file mode 100644 index 0000000..05eea56 Binary files /dev/null and b/public/assets/wechat-archive/wechat-446.webp differ diff --git a/public/assets/wechat-archive/wechat-455.webp b/public/assets/wechat-archive/wechat-455.webp new file mode 100644 index 0000000..2cc2514 Binary files /dev/null and b/public/assets/wechat-archive/wechat-455.webp differ diff --git a/public/assets/wechat-archive/wechat-459.webp b/public/assets/wechat-archive/wechat-459.webp new file mode 100644 index 0000000..6478924 Binary files /dev/null and b/public/assets/wechat-archive/wechat-459.webp differ diff --git a/public/assets/wechat-archive/wechat-470.webp b/public/assets/wechat-archive/wechat-470.webp new file mode 100644 index 0000000..baeefab Binary files /dev/null and b/public/assets/wechat-archive/wechat-470.webp differ diff --git a/public/assets/wechat-archive/wechat-480.webp b/public/assets/wechat-archive/wechat-480.webp new file mode 100644 index 0000000..5eeb881 Binary files /dev/null and b/public/assets/wechat-archive/wechat-480.webp differ diff --git a/public/assets/wechat-archive/wechat-490.webp b/public/assets/wechat-archive/wechat-490.webp new file mode 100644 index 0000000..ea54f4b Binary files /dev/null and b/public/assets/wechat-archive/wechat-490.webp differ diff --git a/public/assets/wechat-archive/wechat-499.webp b/public/assets/wechat-archive/wechat-499.webp new file mode 100644 index 0000000..8efb203 Binary files /dev/null and b/public/assets/wechat-archive/wechat-499.webp differ diff --git a/scripts/audit_gzhh_images.py b/scripts/audit_gzhh_images.py new file mode 100644 index 0000000..cd57627 --- /dev/null +++ b/scripts/audit_gzhh_images.py @@ -0,0 +1,116 @@ +import json +import math +from pathlib import Path + +from PIL import Image, ImageDraw, ImageFont, ImageOps + + +ROOT = Path(__file__).resolve().parents[1] +BASE = ROOT / ".tmp" / "gzhh-images" +RAW = BASE / "raw" +MANIFEST = BASE / "manifest.json" +AUDIT = BASE / "audit.json" +SHEETS = BASE / "contact-sheets" + +CELL_WIDTH = 280 +CELL_HEIGHT = 220 +COLS = 5 +ROWS = 4 +PER_SHEET = COLS * ROWS + + +def font(size: int): + paths = [ + Path("C:/Windows/Fonts/msyh.ttc"), + Path("C:/Windows/Fonts/simhei.ttf"), + ] + for path in paths: + if path.exists(): + return ImageFont.truetype(str(path), size) + return ImageFont.load_default() + + +small_font = font(14) +label_font = font(16) +title_font = font(22) + + +manifest = json.loads(MANIFEST.read_text(encoding="utf-8")) +unique_entries = [] +seen_files = set() + +for entry in manifest: + file_name = entry.get("file") + if entry.get("status") != "ok" or not file_name or file_name in seen_files: + continue + seen_files.add(file_name) + image_path = RAW / file_name + record = { + "id": len(unique_entries) + 1, + "file": file_name, + "path": image_path.relative_to(ROOT).as_posix(), + "sources": entry.get("sources", []), + "alts": entry.get("alts", []), + "bytes": entry.get("bytes", 0), + "hash": entry.get("hash", ""), + } + try: + with Image.open(image_path) as image: + record["width"], record["height"] = image.size + record["format"] = image.format + preview = image.convert("RGB") + preview.thumbnail((128, 128)) + record["entropy"] = round(preview.convert("L").entropy(), 3) + record["candidate"] = ( + record["width"] * record["height"] >= 200_000 + and min(record["width"], record["height"]) >= 280 + and 0.32 <= record["width"] / record["height"] <= 3.2 + and record["entropy"] >= 3.2 + ) + except Exception as error: + record["error"] = str(error) + record["candidate"] = False + unique_entries.append(record) + +AUDIT.write_text(json.dumps(unique_entries, ensure_ascii=False, indent=2) + "\n", encoding="utf-8") +SHEETS.mkdir(parents=True, exist_ok=True) + +candidates = [item for item in unique_entries if item.get("candidate")] + +for sheet_index in range(math.ceil(len(candidates) / PER_SHEET)): + page_items = candidates[sheet_index * PER_SHEET : (sheet_index + 1) * PER_SHEET] + sheet = Image.new("RGB", (CELL_WIDTH * COLS, 48 + CELL_HEIGHT * ROWS), "#f7f3e8") + draw = ImageDraw.Draw(sheet) + draw.text( + (18, 10), + f"公众号图片候选 {sheet_index + 1}/{math.ceil(len(candidates) / PER_SHEET)} · {len(candidates)} 张", + fill="#1f2b2a", + font=title_font, + ) + for item_index, item in enumerate(page_items): + col = item_index % COLS + row = item_index // COLS + x = col * CELL_WIDTH + y = 48 + row * CELL_HEIGHT + draw.rectangle((x + 5, y + 5, x + CELL_WIDTH - 5, y + CELL_HEIGHT - 5), fill="#ffffff", outline="#d6d7cf") + try: + with Image.open(ROOT / item["path"]) as source: + preview = ImageOps.contain(source.convert("RGB"), (CELL_WIDTH - 24, 154)) + px = x + (CELL_WIDTH - preview.width) // 2 + py = y + 12 + (154 - preview.height) // 2 + sheet.paste(preview, (px, py)) + except Exception: + pass + source_name = Path(item["sources"][0]).stem if item["sources"] else "未知来源" + source_name = source_name[:20] + draw.text((x + 12, y + 170), f"#{item['id']:03d} {item['width']}×{item['height']}", fill="#376d5a", font=label_font) + draw.text((x + 12, y + 192), source_name, fill="#596563", font=small_font) + sheet.save(SHEETS / f"sheet-{sheet_index + 1:02d}.jpg", quality=90) + +summary = { + "unique": len(unique_entries), + "candidates": len(candidates), + "rejected_by_shape_or_size": len(unique_entries) - len(candidates), + "sheets": math.ceil(len(candidates) / PER_SHEET), +} +print(json.dumps(summary, ensure_ascii=False)) diff --git a/scripts/download-gzhh-images.mjs b/scripts/download-gzhh-images.mjs new file mode 100644 index 0000000..2221593 --- /dev/null +++ b/scripts/download-gzhh-images.mjs @@ -0,0 +1,108 @@ +import { createHash } from "node:crypto"; +import { mkdir, readdir, readFile, writeFile } from "node:fs/promises"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const projectRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); +const sourceDirectory = path.join(projectRoot, "gzhh"); +const outputDirectory = path.join(projectRoot, ".tmp", "gzhh-images", "raw"); +const manifestPath = path.join(projectRoot, ".tmp", "gzhh-images", "manifest.json"); +const concurrency = 8; +const maxBytes = 20 * 1024 * 1024; + +const extensionByType = new Map([ + ["image/jpeg", ".jpg"], + ["image/png", ".png"], + ["image/webp", ".webp"], + ["image/gif", ".gif"], + ["image/svg+xml", ".svg"] +]); + +const markdownFiles = (await readdir(sourceDirectory)).filter((name) => name.endsWith(".md")); +const imageMap = new Map(); + +for (const source of markdownFiles) { + const markdown = await readFile(path.join(sourceDirectory, source), "utf8"); + for (const match of markdown.matchAll(/!\[([^\]]*)\]\((https?:\/\/[^\s\)]+)\)/g)) { + const alt = match[1].trim(); + const url = match[2].replaceAll("&", "&").replaceAll("\\_", "_"); + let parsed; + try { + parsed = new URL(url); + } catch { + continue; + } + if (parsed.hostname !== "mmbiz.qpic.cn") continue; + const existing = imageMap.get(parsed.href) ?? { url: parsed.href, sources: [], alts: [] }; + if (!existing.sources.includes(source)) existing.sources.push(source); + if (alt && !existing.alts.includes(alt)) existing.alts.push(alt); + imageMap.set(parsed.href, existing); + } +} + +await mkdir(outputDirectory, { recursive: true }); + +const entries = [...imageMap.values()]; +const results = new Array(entries.length); +const contentFiles = new Map(); +let cursor = 0; +let completed = 0; + +const download = async (entry, index) => { + try { + const response = await fetch(entry.url, { + headers: { + "user-agent": "Mozilla/5.0 (compatible; ClassArchive/1.0)", + referer: "https://mp.weixin.qq.com/" + }, + signal: AbortSignal.timeout(45_000) + }); + if (!response.ok) throw new Error(`HTTP ${response.status}`); + const contentType = response.headers.get("content-type")?.split(";")[0].toLowerCase() ?? ""; + if (!contentType.startsWith("image/")) throw new Error(`Unexpected content type: ${contentType || "unknown"}`); + const declaredLength = Number(response.headers.get("content-length") ?? 0); + if (declaredLength > maxBytes) throw new Error(`Image exceeds ${maxBytes} bytes`); + const buffer = Buffer.from(await response.arrayBuffer()); + if (buffer.byteLength > maxBytes) throw new Error(`Image exceeds ${maxBytes} bytes`); + const hash = createHash("sha256").update(buffer).digest("hex"); + const extension = extensionByType.get(contentType) ?? ".img"; + let file = contentFiles.get(hash); + let duplicate = true; + if (!file) { + duplicate = false; + file = `${String(index + 1).padStart(4, "0")}-${hash.slice(0, 12)}${extension}`; + await writeFile(path.join(outputDirectory, file), buffer); + contentFiles.set(hash, file); + } + return { ...entry, status: "ok", file, contentType, bytes: buffer.byteLength, hash, duplicate }; + } catch (error) { + return { ...entry, status: "error", error: error instanceof Error ? error.message : String(error) }; + } +}; + +const worker = async () => { + while (true) { + const index = cursor++; + if (index >= entries.length) return; + results[index] = await download(entries[index], index); + completed += 1; + if (completed % 50 === 0 || completed === entries.length) { + console.log(`Downloaded ${completed}/${entries.length}`); + } + } +}; + +await Promise.all(Array.from({ length: concurrency }, () => worker())); +await writeFile(manifestPath, `${JSON.stringify(results, null, 2)}\n`, "utf8"); + +const successful = results.filter((item) => item.status === "ok"); +console.log( + JSON.stringify({ + references: entries.length, + successful: successful.length, + failed: results.length - successful.length, + uniqueContent: successful.filter((item) => !item.duplicate).length, + bytes: successful.filter((item) => !item.duplicate).reduce((sum, item) => sum + item.bytes, 0), + manifest: path.relative(projectRoot, manifestPath) + }) +); diff --git a/scripts/export_gzhh_gallery.py b/scripts/export_gzhh_gallery.py new file mode 100644 index 0000000..81d3140 --- /dev/null +++ b/scripts/export_gzhh_gallery.py @@ -0,0 +1,56 @@ +import json +from pathlib import Path + +from PIL import Image, ImageOps + + +ROOT = Path(__file__).resolve().parents[1] +BASE = ROOT / ".tmp" / "gzhh-images" +AUDIT = BASE / "audit.json" +OUTPUT = ROOT / "public" / "assets" / "wechat-archive" + +SELECTED_IDS = [ + 81, 84, 85, 88, 89, + 117, 121, 129, 132, + 145, 146, 150, 151, 152, 153, + 159, 160, 161, 162, + 176, 178, 180, 181, + 193, 196, 197, + 368, 370, 373, 375, + 382, 387, 388, 391, + 396, 405, 408, 411, + 446, 455, 459, + 470, 480, 490, 499, +] + +records = {item["id"]: item for item in json.loads(AUDIT.read_text(encoding="utf-8"))} +OUTPUT.mkdir(parents=True, exist_ok=True) + +exported = [] +for image_id in SELECTED_IDS: + record = records[image_id] + source_path = ROOT / record["path"] + output_name = f"wechat-{image_id:03d}.webp" + output_path = OUTPUT / output_name + with Image.open(source_path) as image: + frame = ImageOps.exif_transpose(image).convert("RGB") + frame.thumbnail((1800, 1800), Image.Resampling.LANCZOS) + frame.save(output_path, "WEBP", quality=84, method=6) + exported.append({ + "id": image_id, + "file": output_name, + "source": record.get("sources", [""])[0], + "width": frame.width, + "height": frame.height, + "bytes": output_path.stat().st_size, + }) + +(BASE / "selected-manifest.json").write_text( + json.dumps(exported, ensure_ascii=False, indent=2) + "\n", + encoding="utf-8", +) +print(json.dumps({ + "selected": len(exported), + "bytes": sum(item["bytes"] for item in exported), + "output": str(OUTPUT.relative_to(ROOT)), +}, ensure_ascii=False)) diff --git a/scripts/import-gzhh-articles.mjs b/scripts/import-gzhh-articles.mjs new file mode 100644 index 0000000..014d158 --- /dev/null +++ b/scripts/import-gzhh-articles.mjs @@ -0,0 +1,89 @@ +import { readdir, readFile, writeFile } from "node:fs/promises"; +import { fileURLToPath } from "node:url"; +import path from "node:path"; + +const projectRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); +const sourceDirectory = path.join(projectRoot, "gzhh"); +const outputFile = path.join(projectRoot, "src", "data", "articles.generated.json"); + +const cleanMarkdown = (value) => + value + .replace(/!\[[^\]]*\]\([^\)]+\)/g, " ") + .replace(/\[([^\]]+)\]\([^\)]+\)/g, "$1") + .replace(/[*_`>#]/g, " ") + .replace(/\s+/g, " ") + .trim(); + +const getExcerpt = (body, title) => { + const ignored = /(?:data:image|%3Csvg|transform=|阅读|点赞|分享|推荐|留言|2024届612|font-family|__bottom-bar__|sns_opr_btn|picture_content|page_content)/i; + const lines = body + .split(/\r?\n/) + .map((line) => cleanMarkdown(line)) + .filter((line) => { + if (!line || line === "(unknown)" || line === cleanMarkdown(title) || ignored.test(line)) return false; + if (/^(?:原创|原文地址|图\d+|内容来自|[=\-]{3,})/.test(line)) return false; + return /[\p{L}\p{N}]/u.test(line); + }); + const excerptText = lines[0]?.length >= 32 ? lines[0] : lines.slice(0, 3).join(" "); + return excerptText.length > 88 ? `${excerptText.slice(0, 88)}…` : excerptText; +}; + +const getTitle = (raw, fileName) => { + const heading = raw.match(/\r?\n([^\r\n]{2,120})\r?\n={3,}\r?\n/); + const title = heading?.[1]?.trim(); + return title && title !== "(unknown)" + ? title + : fileName.replace(/\.md$/i, "").replaceAll("_", " "); +}; + +const getCategory = (title) => { + if (/毕业|高考|成人礼|壮行|远足|百日誓师|教师风采|班级之星|612|陆壹贰|往年今日/.test(title)) { + return /毕业|高考|成人礼|壮行/.test(title) ? "毕业时刻" : "班级记忆"; + } + if (/考试|四六级|四.六级|CET|竞赛|考生|准考证|成绩|普通话|数学建模|挂科|重修|招生/.test(title)) { + return "考试升学"; + } + if (/春节|元旦|除夕|小年|圣诞|清明|父亲节|母亲节|儿童节|六一|五四|新年/.test(title)) { + return "节日来信"; + } + if (/通知|通告|说明|提醒|返校|课程表|网站|公众号|AI功能|招聘|邀请函/.test(title)) { + return "校园通知"; + } + return "班级记忆"; +}; + +const parseArticle = (fileName, raw) => { + const title = getTitle(raw, fileName); + const date = raw.match(/\b(20\d{2}-\d{2}-\d{2})\b/)?.[1] ?? ""; + const sourceUrl = raw.match(/原文地址:\s*\[?((?:https?:\/\/)?mp\.weixin\.qq\.com\/s\/[^\s\]\)]+)/)?.[1] + ?.replaceAll("\\_", "_") ?? ""; + const contentStart = raw.search(/>\s*原文地址:/); + const body = contentStart >= 0 ? raw.slice(contentStart).split(/\r?\n/).slice(2).join("\n") : raw; + const images = [...body.matchAll(/!\[[^\]]*\]\((https?:\/\/[^\s\)]+)\)/g)] + .map((match) => match[1]) + .filter((url) => /mmbiz\.qpic\.cn/.test(url)); + const excerptText = getExcerpt(body, title); + + return { + title, + date, + displayDate: date ? date.replaceAll("-", ".") : "日期待补", + sourceUrl, + cover: images[0] ?? "", + excerpt: excerptText.length > 88 ? `${excerptText.slice(0, 88)}…` : excerptText || "一页从公众号找回的班级记录。", + category: getCategory(title), + fileName + }; +}; + +const fileNames = (await readdir(sourceDirectory)).filter((fileName) => fileName.endsWith(".md")); +const articles = ( + await Promise.all( + fileNames.map(async (fileName) => parseArticle(fileName, await readFile(path.join(sourceDirectory, fileName), "utf8"))) + ) +) + .filter((article) => article.sourceUrl) + .sort((a, b) => b.date.localeCompare(a.date) || a.title.localeCompare(b.title, "zh-CN")); + +await writeFile(outputFile, `${JSON.stringify(articles, null, 2)}\n`, "utf8"); +console.log(`Imported ${articles.length} articles from gzhh into ${path.relative(projectRoot, outputFile)}.`); diff --git a/src/data/articles.generated.json b/src/data/articles.generated.json new file mode 100644 index 0000000..ebce5a6 --- /dev/null +++ b/src/data/articles.generated.json @@ -0,0 +1,1062 @@ +[ + { + "title": "英语听力前奏 mp3", + "date": "2026-06-22", + "displayDate": "2026.06.22", + "sourceUrl": "https://mp.weixin.qq.com/s/iFazljBlHyVK_0r1JMT20Q", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "一页从公众号找回的班级记录。", + "category": "班级记忆", + "fileName": "英语听力前奏_mp3.md" + }, + { + "title": "2021年哦,五年前", + "date": "2026-06-21", + "displayDate": "2026.06.21", + "sourceUrl": "https://mp.weixin.qq.com/s/JxJR02SOgRl_b9fdjZM25g", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/vnD1kFuIzjoRGlRjtoF0adwQx2Mkez1fEkv1HxywLuvBHOZIyvNcPWA2ETEJFt90DT9dbuN09oaFoD9CJpO0ugIbLkyLKZVLgQuW1v1Amiaw/0?wx_fmt=jpeg", + "excerpt": "一页从公众号找回的班级记录。", + "category": "班级记忆", + "fileName": "2021年哦_五年前.md" + }, + { + "title": "明天是父亲节", + "date": "2026-06-20", + "displayDate": "2026.06.20", + "sourceUrl": "https://mp.weixin.qq.com/s/jnkIu9ywMrVxBTCNjqHFPQ", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "一页从公众号找回的班级记录。", + "category": "节日来信", + "fileName": "明天是父亲节.md" + }, + { + "title": "再见 张震岳", + "date": "2026-06-12", + "displayDate": "2026.06.12", + "sourceUrl": "https://mp.weixin.qq.com/s/dTBPm5PgaKHFnbWZs12V6g", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "一页从公众号找回的班级记录。", + "category": "班级记忆", + "fileName": "再见___张震岳.md" + }, + { + "title": "大学英语四、六级考试应知应会", + "date": "2026-06-10", + "displayDate": "2026.06.10", + "sourceUrl": "https://mp.weixin.qq.com/s/mFPvoDdqbWAcWeEzdgW2kg", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_png/vnD1kFuIzjowPR2QqPaXusFparC8iax3VkrY9xPlWy6O3WPAJg3Pw9BY0okXs8g6AaMm8hMCJuqaglTKjib2iaMVAGynlnibLyZWJp7iaTuMT8rA/640?wx_fmt=png&from=appmsg", + "excerpt": "其实这才是正经内容 《中华人民共和国刑法》和《中华人民共和国教育法》(新修订)对考试作弊行为的处罚(节选) 2026年上半年全国大学英语四、六级笔试考前提醒", + "category": "考试升学", + "fileName": "大学英语四_六级考试应知应会.md" + }, + { + "title": "Bye!", + "date": "2026-06-09", + "displayDate": "2026.06.09", + "sourceUrl": "https://mp.weixin.qq.com/s/vYX7wGElBzxuFaq310nDtA", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "一页从公众号找回的班级记录。", + "category": "班级记忆", + "fileName": "Bye_.md" + }, + { + "title": "2024年6月8日下午,高考最后一科英语试题写完之后,你在想什么?", + "date": "2026-06-08", + "displayDate": "2026.06.08", + "sourceUrl": "https://mp.weixin.qq.com/s/W7m1KCFpQnwRzbgInCdk4Q", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_png/vnD1kFuIzjpy6tWONVTKz6FnOiaUiarZXDVkibhVDmWsENYBxh3euVu4InTzqqXTcHkfNUG0XtYc2DwVibmiciarQGUpF6Y75ibQagH8xrCkicbfLuk/0?wx_fmt=png&from=appmsg", + "excerpt": "一页从公众号找回的班级记录。", + "category": "毕业时刻", + "fileName": "2024年6月8日下午_高考最后一科英语试题写完之后_你在想什么_.md" + }, + { + "title": "《中华人民共和国刑法》和《中华人民共和国教育法》(新修订)对考试作弊行为的处罚(节选)", + "date": "2026-06-07", + "displayDate": "2026.06.07", + "sourceUrl": "https://mp.weixin.qq.com/s/Z83NPQlq1jIEXCPmFZEtWA", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "一、《中华人民共和国刑法》(2015 年 11 月 1 日起施行)(节选)", + "category": "考试升学", + "fileName": "_中华人民共和国刑法_和_中华人民共和国教育法_(新修订)对考试作弊行为的处罚(节选).md" + }, + { + "title": "命题作文", + "date": "2026-06-07", + "displayDate": "2026.06.07", + "sourceUrl": "https://mp.weixin.qq.com/s/q8TmnMDoMkxualPzxE9FgA", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "一页从公众号找回的班级记录。", + "category": "班级记忆", + "fileName": "命题作文.md" + }, + { + "title": "往年今日 2024年高考今天开考", + "date": "2026-06-07", + "displayDate": "2026.06.07", + "sourceUrl": "https://mp.weixin.qq.com/s/rjB8AzNVuY7O3a4klb0A6A", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "一页从公众号找回的班级记录。", + "category": "毕业时刻", + "fileName": "往年今日_2024年高考今天开考.md" + }, + { + "title": "2026年上半年全国大学英语四、六级笔试考前提醒", + "date": "2026-06-06", + "displayDate": "2026.06.06", + "sourceUrl": "https://mp.weixin.qq.com/s/HD2gKtcrm_1A4sqsSKr4gw", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "来源:山西省招生考试管理中心 2026年上半年全国大学英语四、六级笔试将于6月13日举行,为确保我省考试顺利实施,现将有关事项提醒如下: 一、做好考前准备", + "category": "考试升学", + "fileName": "2026年上半年全国大学英语四_六级笔试考前提醒.md" + }, + { + "title": "竞赛通知", + "date": "2026-06-03", + "displayDate": "2026.06.03", + "sourceUrl": "https://mp.weixin.qq.com/s/G5pTDUuGgi053F-r-TXeYQ", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "终于找到最值得的竞赛了,别的国一也就加一点分,这个只要省一就能保送清华。这周日就要开始了,好像叫什么普通高等学校招生全国统一考试", + "category": "考试升学", + "fileName": "竞赛通知.md" + }, + { + "title": "距离高考仅有七天", + "date": "2026-05-30", + "displayDate": "2026.05.30", + "sourceUrl": "https://mp.weixin.qq.com/s/0FdVUoAIkdaEuIIUELEPFA", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "一页从公众号找回的班级记录。", + "category": "毕业时刻", + "fileName": "距离高考仅有七天.md" + }, + { + "title": "2026年毕业纪念之PCB设计", + "date": "2026-05-16", + "displayDate": "2026.05.16", + "sourceUrl": "https://mp.weixin.qq.com/s/R2jQL0v4_jPyhY_CaJYoaA", + "cover": "https://mmbiz.qpic.cn/mmbiz_png/vnD1kFuIzjoFwHS8mjibykgganYoLpPy6E2dvuKJhFmFjotfWcbq2H3YHzibDzEibh8ypNZlMA8xlltNo3SAEIw9L5iaKQiaulYFK2A7vUmuzumw/640?wx_fmt=png&from=appmsg", + "excerpt": "一页从公众号找回的班级记录。", + "category": "毕业时刻", + "fileName": "2026年毕业纪念之PCB设计.md" + }, + { + "title": "全国大学英语四、六级考试退费说明", + "date": "2026-05-14", + "displayDate": "2026.05.14", + "sourceUrl": "https://mp.weixin.qq.com/s/wunNdSoCJ0H2cWnXgqH0Ag", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "你在想什么?还是认命吧!", + "category": "考试升学", + "fileName": "全国大学英语四_六级考试退费说明.md" + }, + { + "title": "当呼吸化为空气", + "date": "2026-05-11", + "displayDate": "2026.05.11", + "sourceUrl": "https://mp.weixin.qq.com/s/FbyjnzRXtmp0UuvuT2PSHw", + "cover": "https://mmbiz.qpic.cn/mmbiz_gif/kxxXMThaLgPESfLknM0tvveEQ8v1iak6ubCSVCBgMlhLASsajLah2HVSwPUN0Xt8f3FiaBqCQZd3tYq2ibDoUU0Pv448Xm33osAkDuxx0ZfPmI/640?wx_fmt=gif", + "excerpt": "当意识消散于无形 我们留下了什么? 《当呼吸化为空气》", + "category": "班级记忆", + "fileName": "当呼吸化为空气.md" + }, + { + "title": "母亲节", + "date": "2026-05-10", + "displayDate": "2026.05.10", + "sourceUrl": "https://mp.weixin.qq.com/s/Xh5x3Nnjjs7ZYBuwX9a5vA", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_gif/RgqicdKs6JmrOyGwbtewddxMhDITfOkd4h1M9oQsAkCkOZfdMDCNgDX61ibhiaZI8UYDCL3RWticX0DG6IGzp6S4bXic7Y14DZveeLLHaqKpGcibQ/640?wx_fmt=gif", + "excerpt": "母 亲 节", + "category": "节日来信", + "fileName": "母亲节.md" + }, + { + "title": "距离2026年高考还有30天", + "date": "2026-05-09", + "displayDate": "2026.05.09", + "sourceUrl": "https://mp.weixin.qq.com/s/u2olN30j3zdsq-sQ_S5nEg", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "一页从公众号找回的班级记录。", + "category": "毕业时刻", + "fileName": "距离2026年高考还有30天.md" + }, + { + "title": "612大事记", + "date": "2026-05-03", + "displayDate": "2026.05.03", + "sourceUrl": "https://mp.weixin.qq.com/s/H4_RmiQAzYgKALWwLKVJSw", + "cover": "https://mmbiz.qpic.cn/mmbiz_png/FoGqm1OoYOy519ZAUw219n13Uk1QnNSySCuOUGOljXZj9MIyiaIcttrsUXegq6iasXqHvbwNMc51MozgwgKasx7A/640?wx_fmt=png", + "excerpt": "612班 大 事", + "category": "班级记忆", + "fileName": "612大事记.md" + }, + { + "title": "高三远足活动", + "date": "2026-05-03", + "displayDate": "2026.05.03", + "sourceUrl": "https://mp.weixin.qq.com/s/iP5tXG0phgjNcoW2F9s3IQ", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/Ms8iaT2gxEfpP93kCTbZJEo0H9kpbea32FU3qlWicfVOsRmZTBv4fbI0tSicpVQkNdkgV8IX9iaj2TK1gnlpibKFXAA/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1#imgIndex=4", + "excerpt": "道阻且长,行则将至 行而不辍,未来可期 为鼓舞高三学生备战高考的士气,激发决胜高考的斗志,亲近自然、强健体魄,2023年10月15日,高平一中高三年级开展了“励志笃行,顶峰相见…", + "category": "班级记忆", + "fileName": "高三远足活动.md" + }, + { + "title": "将进酒朗诵", + "date": "2026-05-03", + "displayDate": "2026.05.03", + "sourceUrl": "https://mp.weixin.qq.com/s/yIl970mCwQeMavhbq7jHvg", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "一页从公众号找回的班级记录。", + "category": "班级记忆", + "fileName": "将进酒朗诵.md" + }, + { + "title": "两张课程表,其他的暂时缺失", + "date": "2026-05-03", + "displayDate": "2026.05.03", + "sourceUrl": "https://mp.weixin.qq.com/s/MEs5Br9UY4HeDr1luN7gDQ", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_png/vnD1kFuIzjrvCHsroFNkXWwIO4NhzYEwicdLP3M1icORSByZ0mMsBPMKcEql9Zd87D9yia8JmyIS7cLgfRHrXdyvNxfktc2nChic0df5m6eBr7s/0?wx_fmt=png&from=appmsg", + "excerpt": "一页从公众号找回的班级记录。", + "category": "校园通知", + "fileName": "两张课程表_其他的暂时缺失.md" + }, + { + "title": "李玉刚 刚好遇见你", + "date": "2026-04-26", + "displayDate": "2026.04.26", + "sourceUrl": "https://mp.weixin.qq.com/s/r4MHZRsY4TgYfYj7-zwbcA", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "一页从公众号找回的班级记录。", + "category": "班级记忆", + "fileName": "李玉刚___刚好遇见你.md" + }, + { + "title": "清明节", + "date": "2026-04-05", + "displayDate": "2026.04.05", + "sourceUrl": "https://mp.weixin.qq.com/s/TdA8YDK5qw-7kJEmAZaf9A", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_gif/wEHia0b96yY4libuYn677vJu1uloA4OPtDw6XR113JAwXaMKFSzUQvGX48tDtgIe5sWRUNHPqbqJXkLD8CaRvibiaA/640?wx_fmt=gif", + "excerpt": "妇女节踏青活动 春日晴好 女神之约", + "category": "节日来信", + "fileName": "清明节.md" + }, + { + "title": "温馨提示:今天是愚人节,凡是要求您上课的", + "date": "2026-04-01", + "displayDate": "2026.04.01", + "sourceUrl": "https://mp.weixin.qq.com/s/Tsx3WySF9T-gUydeLkQ43g", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "温馨提示:今天是愚人节,凡是要求您上课的都是骗你呢!!!", + "category": "班级记忆", + "fileName": "温馨提示_今天是愚人节_凡是要求您上课的都是骗你呢___.md" + }, + { + "title": "2026春招市场,招聘求职双活跃", + "date": "2026-03-27", + "displayDate": "2026.03.27", + "sourceUrl": "https://mp.weixin.qq.com/s/1QUU6-a4-LCbbrZH4Bnopw", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "《2026年春招市场行情周报(第四期)》(简称报告)指出,新质领域技术岗位面临人才缺口,AI工程师需供比3:1。", + "category": "校园通知", + "fileName": "2026春招市场_招聘求职双活跃.md" + }, + { + "title": "百日誓师:距离2026年暑假约100天(", + "date": "2026-03-23", + "displayDate": "2026.03.23", + "sourceUrl": "https://mp.weixin.qq.com/s/Hk4avzUyxwQTED4BrLouMg", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "百日誓师:距离2026年暑假约100天(以7月1日计算)", + "category": "班级记忆", + "fileName": "百日誓师_距离2026年暑假约100天(以7月1日计算).md" + }, + { + "title": "百日誓师:距离2026年上半年四六级考试", + "date": "2026-03-05", + "displayDate": "2026.03.05", + "sourceUrl": "https://mp.weixin.qq.com/s/O-sqHfgUYtk-jHABtKxI1g", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "百日誓师:距离2026年上半年四六级考试剩余100天", + "category": "班级记忆", + "fileName": "百日誓师_距离2026年上半年四六级考试剩余100天.md" + }, + { + "title": "2026年考试目录", + "date": "2026-02-27", + "displayDate": "2026.02.27", + "sourceUrl": "https://mp.weixin.qq.com/s/F1yQnWvAuCaJvivI9hl-cg", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "一月考试 考试时间 考试名称", + "category": "考试升学", + "fileName": "2026年考试目录.md" + }, + { + "title": "温馨提示", + "date": "2026-02-27", + "displayDate": "2026.02.27", + "sourceUrl": "https://mp.weixin.qq.com/s/FeUnSxIZ4SDLZ2q_6Mvn6g", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "2025年下半年全国大学英语四、六级考试补考将于2026年6月14日举行,3月进行报名工作,有意向的同学请关注中国教育考试网通知。", + "category": "班级记忆", + "fileName": "温馨提示.md" + }, + { + "title": "2026年全国硕士研究生招生考试成绩预计", + "date": "2026-02-26", + "displayDate": "2026.02.26", + "sourceUrl": "https://mp.weixin.qq.com/s/uaEufASxladYXCDqWBHmbw", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "2026年全国硕士研究生招生考试成绩预计将于2026年2月28日公布,请关注招生单位信息,预祝取得好成绩", + "category": "考试升学", + "fileName": "2026年全国硕士研究生招生考试成绩预计将于2026年2月28日公布_请关注招生单位信息_预祝取得好成绩.md" + }, + { + "title": "2025年下半年全国大学英语四、六级考试(CET)", + "date": "2026-02-25", + "displayDate": "2026.02.25", + "sourceUrl": "https://mp.weixin.qq.com/s/EmtKsUI8WXBNtoh3NBiLUA", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "2025年下半年全国大学英语四、六级考试(CET)成绩查询服务将于2026年2月27日(周五)开通,有关安排如下:", + "category": "考试升学", + "fileName": "2025年下半年全国大学英语四_六级考试(CET).md" + }, + { + "title": "2026年春晚考点", + "date": "2026-02-18", + "displayDate": "2026.02.18", + "sourceUrl": "https://mp.weixin.qq.com/s/NFUfQdCTorGI4Zu1KgnBEw", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "思想政治 乡村振兴、区域协调发展、民营经济发展、中国式现代化、以人民为中心的发展思想 新时代我国社会主要矛盾、中国式现代化的内涵与特征、新时代青年的使命与担当", + "category": "班级记忆", + "fileName": "2026年春晚考点.md" + }, + { + "title": "新年快乐!!!", + "date": "2026-02-17", + "displayDate": "2026.02.17", + "sourceUrl": "https://mp.weixin.qq.com/s/5vBlE8pe6rl2ree1QNYYgQ", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_png/vnD1kFuIzjoBPvxSC8GpeezHntr6L9WxDKKvEAbLibO30hqgrDfQNNfwNzJibdZjwOrn6pYdmFytI3teFWyK7SKA27JxxRdDPlsmOtPMg67jU/0?wx_fmt=png&from=appmsg", + "excerpt": "一页从公众号找回的班级记录。", + "category": "节日来信", + "fileName": "新年快乐___.md" + }, + { + "title": "除夕快乐", + "date": "2026-02-16", + "displayDate": "2026.02.16", + "sourceUrl": "https://mp.weixin.qq.com/s/i6UYqm3fLSVtqLhK4LUJJA", + "cover": "https://mmbiz.qpic.cn/mmbiz_png/9O4sruTpNIGOuaJ5rnyWphkoBLF5rIxewXczibCsaNbkZ1tk3TlGrib0N9NV9Lo1mM8YKj19XYwYlNHmQsvxOOicQ/640?wx_fmt=png", + "excerpt": "千灯映长安 午马迎新年 新年快乐", + "category": "节日来信", + "fileName": "除夕快乐.md" + }, + { + "title": "2026年(丙午马年)春节系列网页", + "date": "2026-02-10", + "displayDate": "2026.02.10", + "sourceUrl": "https://mp.weixin.qq.com/s/NrWqaQ39-fqcYbM2Mn3QkA", + "cover": "https://mmbiz.qpic.cn/mmbiz_png/vnD1kFuIzjpnhib0XynwrXCQfibFOFmJKWrOYiaFc5ZePC4Cem4tDtGz9bCKhrpFq9UqSOkJHWYJLYkh8UNbqdDGHH2IChB84AHNibsic5PicwpvE/640?wx_fmt=png&from=appmsg", + "excerpt": "一页从公众号找回的班级记录。", + "category": "节日来信", + "fileName": "2026年(丙午马年)春节系列网页.md" + }, + { + "title": "小年快乐", + "date": "2026-02-10", + "displayDate": "2026.02.10", + "sourceUrl": "https://mp.weixin.qq.com/s/dM0_4rPZoTo257ef3KshRw", + "cover": "https://mmbiz.qpic.cn/mmbiz_png/xFdrnNIc2wgVVLo1RujBH0eNnkpSgdZfVSQhN2tFiaRKZHV1wWlmfbd1qjwYxoN66J8o2C90uMXYS23dsFPeaSA/640?wx_fmt=png", + "excerpt": "小 腊月二十三 祭灶/扫尘", + "category": "节日来信", + "fileName": "小年快乐.md" + }, + { + "title": "元旦快乐", + "date": "2026-01-01", + "displayDate": "2026.01.01", + "sourceUrl": "https://mp.weixin.qq.com/s/i7PBynC3kMhMYFuwaOTdKA", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_png/Df2cT47VNicIq2TTbGg1x7UNibu4l8NOc8gnMgRVv4K5OQatrFxDPHpPoTwTvX3BfCchOCuScuLmgC10VpU5jcew/640?wx_fmt=png", + "excerpt": "恭 新 贺", + "category": "节日来信", + "fileName": "元旦快乐.md" + }, + { + "title": "圣诞节快乐", + "date": "2025-12-25", + "displayDate": "2025.12.25", + "sourceUrl": "https://mp.weixin.qq.com/s/GHVFtPTWcF88VzSNYRMeag", + "cover": "https://mmbiz.qpic.cn/mmbiz_gif/52M3CZL3ziabymlTX37cu6iaRb5aZCrib2l1LXoU68l1m3fWXkdibUqwibkJj4aXYnxbsdVpO6Kmwh3TZ09rDFBsmkg/640?wx_fmt=gif", + "excerpt": "CHRISTMAS HEY CHRISTMAS 圣", + "category": "节日来信", + "fileName": "圣诞节快乐.md" + }, + { + "title": "大学英语四、六级考试答题卡样张", + "date": "2025-12-12", + "displayDate": "2025.12.12", + "sourceUrl": "https://mp.weixin.qq.com/s/8WgV6bQHT5f8vfT1q2DQ2g", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "一页从公众号找回的班级记录。", + "category": "考试升学", + "fileName": "大学英语四_六级考试答题卡样张.md" + }, + { + "title": "大学英语四、六级考试流程及注意事项", + "date": "2025-12-12", + "displayDate": "2025.12.12", + "sourceUrl": "https://mp.weixin.qq.com/s/jo4kbH6hI7eXAQGeqmBaZw", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakqib6HfUU50Wkka9BkDn6AQW2CKn70ETmW2fMAPxH9yolycPdBbibPvrGQb95WibHNA1cfC6pw14VuQ/640?from=appmsg&wx_fmt=png", + "excerpt": "考试流程& 注意事项 事项", + "category": "考试升学", + "fileName": "大学英语四_六级考试流程及注意事项.md" + }, + { + "title": "2025年12月5日上午9时起开始打印2", + "date": "2025-12-04", + "displayDate": "2025.12.04", + "sourceUrl": "https://mp.weixin.qq.com/s/Hnr4oaMvpIaygiIK08MSJg", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "2025年12月5日上午9时起开始打印2025年下半年大学英语四、六级考试笔试环节准考证", + "category": "班级记忆", + "fileName": "2025年12月5日上午9时起开始打印2025年下半年大学英语四_六级考试笔试环节准考证.md" + }, + { + "title": "2022.11.18", + "date": "2025-11-18", + "displayDate": "2025.11.18", + "sourceUrl": "https://mp.weixin.qq.com/s/nPh8fxdlz-ccP5wD1xlY9g", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/RKNa5pic8piakgzDGla73scShaXzwBjMGib2ibFd6GEZJ5u87cRQ4EGVVvzvlvSCSbicJC4gzPwjk4DUjQicI1xp4zow/0?wx_fmt=jpeg", + "excerpt": "班级日志记录 这是2022年11月18日班级日志 次日放假、停课", + "category": "班级记忆", + "fileName": "2022_11_18.md" + }, + { + "title": "2022.11.17", + "date": "2025-11-17", + "displayDate": "2025.11.17", + "sourceUrl": "https://mp.weixin.qq.com/s/Lfb7Ecvc9RitH7FBvQix8g", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/RKNa5pic8piakgzDGla73scShaXzwBjMGibCzMdXFxWGly5VibpkdYWUjzbSYw2gBUf2fGg5Fu6fRItLtR09RFZiaYg/0?wx_fmt=jpeg", + "excerpt": "班级日志记录 这是2022年11月17日班级日志", + "category": "班级记忆", + "fileName": "2022_11_17.md" + }, + { + "title": "2022.11.16", + "date": "2025-11-16", + "displayDate": "2025.11.16", + "sourceUrl": "https://mp.weixin.qq.com/s/JoUaAQw2SMqSa4ZOpwsxQQ", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/RKNa5pic8piakgzDGla73scShaXzwBjMGibjo9A2cbWAWJKs9x9XHqQWUaOZrB72ExicsQZVM52RRQoicxj7jJZQ8Wg/0?wx_fmt=jpeg", + "excerpt": "班级日志记录 这是2022年11月16日的班级日志。", + "category": "班级记忆", + "fileName": "2022_11_16.md" + }, + { + "title": "班主任牛坤霖老师的寄语", + "date": "2025-11-16", + "displayDate": "2025.11.16", + "sourceUrl": "https://mp.weixin.qq.com/s/stYFfRcgppzwKWGZSZaqeA", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/RKNa5pic8piakgzDGla73scShaXzwBjMGibVB5HTZDfdwwicicBCZGU95KQICgxJkySu7nRdPZfhjDibWxQRuprz1fLA/640?wx_fmt=jpeg", + "excerpt": "Class 612 专 题", + "category": "班级记忆", + "fileName": "班主任牛坤霖老师的寄语.md" + }, + { + "title": "2022.11.14", + "date": "2025-11-14", + "displayDate": "2025.11.14", + "sourceUrl": "https://mp.weixin.qq.com/s/pZKJOMDGVf4R0lhdqkwCYA", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/RKNa5pic8piakgzDGla73scShaXzwBjMGibmMtsPAg6I2g3hZbdibNhQy3lBqIBZMg7P8LJDibP7N19nBiaL5NJKzn8Q/0?wx_fmt=jpeg", + "excerpt": "班级日志记录 这是2022年11月14日班级日志", + "category": "班级记忆", + "fileName": "2022_11_14.md" + }, + { + "title": "假如人生是一张A4纸", + "date": "2025-11-12", + "displayDate": "2025.11.12", + "sourceUrl": "https://mp.weixin.qq.com/s/HZ8-NGIZMIXThfauIiPEVg", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8pialtZn3Jia05y3drVicibCibksU1DytXAOWXlDWyEmZpCZGrpaDBJ6fficU79Eyhc1uwqWM0xSFH47rgwVA/640?wx_fmt=png", + "excerpt": "有一句话说世界上有两样东西无法直视:一个是太阳,一个是人心。 但如果有一天,你发现自己的人生完全被量化,你敢直视吗? 人生不过短短的900个月。", + "category": "班级记忆", + "fileName": "假如人生是一张A4纸.md" + }, + { + "title": "2022.11.11", + "date": "2025-11-11", + "displayDate": "2025.11.11", + "sourceUrl": "https://mp.weixin.qq.com/s/7GQ4esxFqYTcbdbll0IV2w", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/RKNa5pic8piakgzDGla73scShaXzwBjMGibzm8PBOm3iaUbgO0m65ibnvGnN16Uib98qBCM8dWicAAp3rzAjFeZSDg9uw/0?wx_fmt=jpeg", + "excerpt": "班级日志记录 这是2022年11月11日的班级日志", + "category": "班级记忆", + "fileName": "2022_11_11.md" + }, + { + "title": "2022.11.8", + "date": "2025-11-08", + "displayDate": "2025.11.08", + "sourceUrl": "https://mp.weixin.qq.com/s/ptuShBJQHshnAmb192nEXQ", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/RKNa5pic8piakgzDGla73scShaXzwBjMGibdkE0UhBLmHw6lib5uIwmMPnbcCCYTzHfylibTJeXh5WbgMC5cVUaFsTQ/0?wx_fmt=jpeg", + "excerpt": "班级日志记录 这是2022年11月8日班级日志", + "category": "班级记忆", + "fileName": "2022_11_8.md" + }, + { + "title": "2022.11.7", + "date": "2025-11-07", + "displayDate": "2025.11.07", + "sourceUrl": "https://mp.weixin.qq.com/s/D32YisVAQB9PdkfplWvegA", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/RKNa5pic8piakgzDGla73scShaXzwBjMGibc7TGrn6gzMFQMoOF8hFFpBZGKp3m3Ff9Ft0qcY9qgnVvs5Y0za8ib5Q/0?wx_fmt=jpeg", + "excerpt": "班级日志记录 这是2022年11月7日班级日志", + "category": "班级记忆", + "fileName": "2022_11_7.md" + }, + { + "title": "2022.11.4", + "date": "2025-11-04", + "displayDate": "2025.11.04", + "sourceUrl": "https://mp.weixin.qq.com/s/_E2Z6HOe8cyrYbZxHT2OlQ", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/RKNa5pic8piakgzDGla73scShaXzwBjMGibjJhBwibeIQ6TYqOaibicZVeSB4JOmCjhBuC12r1BgsFvPAmKrrEkp70HQ/0?wx_fmt=jpeg", + "excerpt": "班级日志记录 这是2022年11月4日的班级日志", + "category": "班级记忆", + "fileName": "2022_11_4.md" + }, + { + "title": "2022.11.1-11.3", + "date": "2025-11-03", + "displayDate": "2025.11.03", + "sourceUrl": "https://mp.weixin.qq.com/s/Ejm3s1Alw26z5jwsF67d8g", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/RKNa5pic8piakgzDGla73scShaXzwBjMGibsWPXtKl40pY9JLIWHIAdicF7ksWTeZiaOK5K8uDUUiaey7tJQaW6Fiac9g/0?wx_fmt=jpeg", + "excerpt": "这是2022年11月1日至3日的班级日志 班级日志记录 学生日常点滴", + "category": "班级记忆", + "fileName": "2022_11_1_11_3.md" + }, + { + "title": "近况如何?过得还好吗?", + "date": "2025-11-02", + "displayDate": "2025.11.02", + "sourceUrl": "https://mp.weixin.qq.com/s/Ca8jVOzpxrp2w8B2y1-hKg", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "一页从公众号找回的班级记录。", + "category": "班级记忆", + "fileName": "近况如何_过得还好吗_.md" + }, + { + "title": "2025年上半年全国大学英语四、六级考试(CET)成绩查询有关安排", + "date": "2025-08-14", + "displayDate": "2025.08.14", + "sourceUrl": "https://mp.weixin.qq.com/s/Bqq05whCBaLMyc5gTwxxKQ", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/RKNa5pic8piamrpr1STZp4icBFhME55YNT0h1muDU2Z0Isy7OEVYThDwmkjib6WibiczmMbABQdjibORjV5lFfxgkJ0lg/640?wx_fmt=jpeg&from=appmsg", + "excerpt": "公告 2025年上半年全国大学英语四、六级考试(CET)成绩查询服务将于2025年8月16日开通,有关安排如下: 一、开通时间", + "category": "考试升学", + "fileName": "2025年上半年全国大学英语四_六级考试(CET)成绩查询有关安排.md" + }, + { + "title": "高二下学期晚会", + "date": "2025-07-16", + "displayDate": "2025.07.16", + "sourceUrl": "https://mp.weixin.qq.com/s/ZdLjQX_BbELbiu3_pRcHAQ", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/RKNa5pic8piaktqO7mnXmdAC9EUs9HN7bSibagVaicmq0aOiadwraHn2JOgPhfgbRQ2x1TibwM5GSxlXwa8pUtlBsCbw/640?wx_fmt=jpeg&from=appmsg", + "excerpt": "在牛坤霖老师的领导与全班同学的大力支持下,我班于2023年7月16日晚组织了一场班级晚会。", + "category": "班级记忆", + "fileName": "高二下学期晚会.md" + }, + { + "title": "24-25喜报", + "date": "2025-06-17", + "displayDate": "2025.06.17", + "sourceUrl": "https://mp.weixin.qq.com/s/AhxbxbX2xUdPH6dH1iDNPw", + "cover": "https://mmbiz.qpic.cn/mmbiz_gif/Zrrl8Gm7esj3RDm6K4LqaU6ib1m9AHMPKW8j5MOPYBd2RTyIfGKSLzMF5kia2Ym3SbBiaibBQubtFFGEjv0HapPiahA/640?wx_fmt=gif", + "excerpt": "2024-2025学年 “喜报” \\- 其实是悲报 -", + "category": "班级记忆", + "fileName": "24_25喜报.md" + }, + { + "title": "父亲节", + "date": "2025-06-15", + "displayDate": "2025.06.15", + "sourceUrl": "https://mp.weixin.qq.com/s/qtQY8TzGCEB179zOFzXM6A", + "cover": "https://mmbiz.qpic.cn/mmbiz_png/bEe6LSRLqmQnicIND8SHc0wKJonoemyfEn9Q8ny519mbjaiazfd7VO1h5JecBJpVLeEmfKLd9EibAnpBy2Ehicb3xQ/640?from=appmsg", + "excerpt": "gan 感 en", + "category": "节日来信", + "fileName": "父亲节.md" + }, + { + "title": "考生考试流程(四级/六级)及注意事项", + "date": "2025-06-13", + "displayDate": "2025.06.13", + "sourceUrl": "https://mp.weixin.qq.com/s/LCxYtNNnBYXp2xLRHmncFA", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "【考生入场】8:00-9:00 /14:00-15:00 【考前准备】9:00-9:10 /15:00-15:10 【作文考试】9:10-9:40 /15:10-15:40", + "category": "考试升学", + "fileName": "考生考试流程(四级_六级)及注意事项.md" + }, + { + "title": "成人礼", + "date": "2025-06-11", + "displayDate": "2025.06.11", + "sourceUrl": "https://mp.weixin.qq.com/s/UL4hfswhk3HdWPNnKoj5jA", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8pianujsTtOnl8xgvGU0hML1GngCP7OX7ksfGTdflZSVqJOJQeIuSQsAWezE74AuLAuZKBIOlanR2xhA/640?wx_fmt=png", + "excerpt": "岁不淹兮,十七又一;十八已至,步履不停。在学生正式迈入高三之际,为了鼓励学生感恩父母养育之恩,明确自身成长责任,肩负青春奋斗使命,6月11日上午,高平一中十八岁成人礼暨2024…", + "category": "毕业时刻", + "fileName": "成人礼.md" + }, + { + "title": "2024届高平一中毕业典礼", + "date": "2025-06-09", + "displayDate": "2025.06.09", + "sourceUrl": "https://mp.weixin.qq.com/s/cog8JJqbaeuun93YrXDRlg", + "cover": "https://mmbiz.qpic.cn/mmbiz_png/StKxwuEjxqFkOibTSl4e41xnibr3KcLVgRD8wGGxUXIMC4aZzsEjXLNYoCGib2aWeCibJ6lYSNIeW18zhwytj3uE4A/640?wx_fmt=png", + "excerpt": "2024届 高平一中 毕业典礼", + "category": "毕业时刻", + "fileName": "2024届高平一中毕业典礼.md" + }, + { + "title": "612 毕业季", + "date": "2025-06-09", + "displayDate": "2025.06.09", + "sourceUrl": "https://mp.weixin.qq.com/s/IPcCjyAp7UFhz7RYnSFDAA", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "一页从公众号找回的班级记录。", + "category": "毕业时刻", + "fileName": "612_毕业季.md" + }, + { + "title": "毕业一周年", + "date": "2025-06-09", + "displayDate": "2025.06.09", + "sourceUrl": "https://mp.weixin.qq.com/s/cKv6VYVhI5MAFV0uS0fIfA", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8pianEtRyEXkp2ed5fwhQmxoVIE7ug4dkic5ozk5j1R6YkxKWPgJbm3svLvGpX7PdKDK1aY5iasiaXqJ1yQ/0?wx_fmt=png&from=appmsg", + "excerpt": "天下没有不散的筵席,或许我们早已见过了最后一面,大家后会有期! 再见。", + "category": "毕业时刻", + "fileName": "毕业一周年.md" + }, + { + "title": "我们解放了 ", + "date": "2025-06-09", + "displayDate": "2025.06.09", + "sourceUrl": "https://mp.weixin.qq.com/s/mKwnWXqf4_CDiAAibXJtng", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "一页从公众号找回的班级记录。", + "category": "班级记忆", + "fileName": "我们解放了_.md" + }, + { + "title": "2024年6月8日下午,高考最后一科英语", + "date": "2025-06-08", + "displayDate": "2025.06.08", + "sourceUrl": "https://mp.weixin.qq.com/s/SbEwg7qcu9icFtBp1W8GUA", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "2024年6月8日下午,高考最后一科英语结束了,英语试题写完之后,你在想什么?", + "category": "毕业时刻", + "fileName": "2024年6月8日下午_高考最后一科英语结束了_英语试题写完之后_你在想什么_.md" + }, + { + "title": "2024年高考已过去365天", + "date": "2025-06-07", + "displayDate": "2025.06.07", + "sourceUrl": "https://mp.weixin.qq.com/s/AbIMZH2zGGVVS0vSYdRlUA", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8pianEtRyEXkp2ed5fwhQmxoVIXy8l9vybQjH4tIafco3Wo25kx5AdzkjBzlesVCoVOl2w5g3mzmcYCw/0?wx_fmt=png&from=appmsg", + "excerpt": "一页从公众号找回的班级记录。", + "category": "毕业时刻", + "fileName": "2024年高考已过去365天.md" + }, + { + "title": "今日上午9时起开始打印全国大学英语四、六", + "date": "2025-06-06", + "displayDate": "2025.06.06", + "sourceUrl": "https://mp.weixin.qq.com/s/3Zd-87F1tf4DjN6uMY_iuw", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "今日上午9时起开始打印全国大学英语四、六级考试笔试准考证!", + "category": "班级记忆", + "fileName": "今日上午9时起开始打印全国大学英语四_六级考试笔试准考证_.md" + }, + { + "title": "2024年高考壮行仪式", + "date": "2025-06-05", + "displayDate": "2025.06.05", + "sourceUrl": "https://mp.weixin.qq.com/s/V4LS1pdNGdfGPtde4gE2BQ", + "cover": "https://mmbiz.qpic.cn/mmbiz_png/kq0mQ0X5YysvGqHYl221mJpqEu7XWXxUqfxmkEeUNJuunOoUQZdFpXKicFU0VEibJxOFP232DO5sV34icxjnHjLHQ/640?wx_fmt=png", + "excerpt": "2024 高考壮行仪式 2024 高考", + "category": "毕业时刻", + "fileName": "2024年高考壮行仪式.md" + }, + { + "title": "高考壮行", + "date": "2025-06-05", + "displayDate": "2025.06.05", + "sourceUrl": "https://mp.weixin.qq.com/s/UK5GFucy18T5rhkluK1hZA", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "一页从公众号找回的班级记录。", + "category": "毕业时刻", + "fileName": "高考壮行.md" + }, + { + "title": "考前最后一天(二)", + "date": "2025-06-05", + "displayDate": "2025.06.05", + "sourceUrl": "https://mp.weixin.qq.com/s/6LLeXm2y2JTei1i1cjsXpg", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/RKNa5pic8piamSTZeqTGDHichJWGj1aO9Wy8zapMFlonLepVhJGxaVIfpgUw41mGElXqElgMjlI5YQA6rDDokAY8w/0?wx_fmt=jpeg&from=appmsg", + "excerpt": "一页从公众号找回的班级记录。", + "category": "班级记忆", + "fileName": "考前最后一天(二).md" + }, + { + "title": "考前最后一天(一)", + "date": "2025-06-05", + "displayDate": "2025.06.05", + "sourceUrl": "https://mp.weixin.qq.com/s/js3GGVaZVsolMsHuoHPiUA", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/RKNa5pic8pialkI0GQaEpMHjuyhiaAMwYtAd12PpMQnJiaegAUWM1vRm3CQib9uiadlsUxay52IqdkJZ1sicUjUiavsGfA/0?wx_fmt=jpeg", + "excerpt": "一页从公众号找回的班级记录。", + "category": "班级记忆", + "fileName": "考前最后一天(一).md" + }, + { + "title": "大学生数学建模大赛", + "date": "2025-06-02", + "displayDate": "2025.06.02", + "sourceUrl": "https://mp.weixin.qq.com/s/jjtU91xPN2G2Av2wJmkFJA", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "全国大学生数学建模竞赛(CUMCM)是全国高校规模最大的基础性学科竞赛之一,也是世界上规模最大的数学建模竞赛。竞赛要求三人(本科生)为一组,在三天时间内,就指定的问题完成从建立…", + "category": "考试升学", + "fileName": "大学生数学建模大赛.md" + }, + { + "title": "大学生英语竞赛", + "date": "2025-06-02", + "displayDate": "2025.06.02", + "sourceUrl": "https://mp.weixin.qq.com/s/Rsh7yCmJA6tl98PzuYAzqA", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8pialvNPHOpYBaQGQmxAVRbxFOVcosiaibRR3TEG0B46ib9Os46micr2nNuASVmSptfkRxLnBStrXrAKoLMg/640?wx_fmt=png&from=appmsg", + "excerpt": "全国大学生英语竞赛每年一届,自1999年创办以来至今已连续举办二十六届,得到了各省、自治区、直辖市大学外语教学研究会和各高校师生的大力支持,每年全国共有31个省(自治区、直辖市…", + "category": "考试升学", + "fileName": "大学生英语竞赛.md" + }, + { + "title": "大学英语四、六级分数解释", + "date": "2025-06-02", + "displayDate": "2025.06.02", + "sourceUrl": "https://mp.weixin.qq.com/s/QZjEd01nqUQYThhGo0a5Sw", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8pialvNPHOpYBaQGQmxAVRbxFOWIptnKecmibKBaX0Xox9ejATgJOzjyVJh9pC5wgbs52MkCibo33UMzOw/640?wx_fmt=png&from=appmsg", + "excerpt": "分数解释 全国大学英语四、六级考试(CET)分为四级(CET-4)和六级(CET-6)两个级别。全国大学英语四、六级考试的设计参照了《大学英语课程教学要求》(以下简称教学要求)…", + "category": "考试升学", + "fileName": "大学英语四_六级分数解释.md" + }, + { + "title": "普通话水平测试", + "date": "2025-06-02", + "displayDate": "2025.06.02", + "sourceUrl": "https://mp.weixin.qq.com/s/DVobBQvhVc9WiR7WyzgRUw", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/RKNa5pic8pialvNPHOpYBaQGQmxAVRbxFOtiaCg2pKEbrJlflW7AI3az1UrcF7zoL3hIP2Tn1kFckqOeibcHuiapNDw/640?wx_fmt=jpeg&from=appmsg", + "excerpt": "普通话水平测试(Putonghua Shuiping Ceshi;PSC)是对应试人运用普通话的规范程度、熟练程度的口语考试。考试形式为口试。普通话水平等级分为三级六等,即一、…", + "category": "考试升学", + "fileName": "普通话水平测试.md" + }, + { + "title": "全国计算机等级考试", + "date": "2025-06-02", + "displayDate": "2025.06.02", + "sourceUrl": "https://mp.weixin.qq.com/s/bzChpSNq2pxMKykbrpt16A", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/RKNa5pic8pialvNPHOpYBaQGQmxAVRbxFO87Ww0XhEBA0L7yOGTiaqcekP2BJLVbpEJedngAlFeHqSic9v8mhBfzHg/640?wx_fmt=jpeg&from=appmsg", + "excerpt": "全国计算机等级考试(National Computer Rank Examination,简称NCRE),是经原国家教育委员会(现教育部)批准,由教育部教育考试院(原教育部考试…", + "category": "考试升学", + "fileName": "全国计算机等级考试.md" + }, + { + "title": "通告", + "date": "2025-06-02", + "displayDate": "2025.06.02", + "sourceUrl": "https://mp.weixin.qq.com/s/KYdZdPyxMvcSI83CQ_N49w", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piaktqO7mnXmdAC9EUs9HN7bS8QSMPcLj1icheDlcz3wytUjAkNHoDpMH0ttXcETIciaGH6L2BmtvmXPQ/0?wx_fmt=png&from=appmsg", + "excerpt": "鉴于期末考试临近,2024届普通高中毕业班综合测试延期至2025年9月15日。删除作业内容,改为平时分30分(你懂的\\[旺柴\\]\\[呲牙\\]),考试原始分200分,折合为70分…", + "category": "校园通知", + "fileName": "通告.md" + }, + { + "title": "六一儿童节快乐!", + "date": "2025-06-01", + "displayDate": "2025.06.01", + "sourceUrl": "https://mp.weixin.qq.com/s/QFK6Q_boK5GoPyvpx-YQng", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_png/p2sYicUuDu3ljDvkf5khMCku7J2qRmgT7ogxgrwzOcCVnfq3QZZXPMfAqgjQQvtPopibWeSuNOo8YGT03hUImiahw/640?wx_fmt=png", + "excerpt": "或许每一个坚强勇敢的大人 心中都住着一个单纯的孩子 在充满糖果香气的时光里", + "category": "节日来信", + "fileName": "六一儿童节快乐_.md" + }, + { + "title": "2024.5.31(班级之星)", + "date": "2025-05-31", + "displayDate": "2025.05.31", + "sourceUrl": "https://mp.weixin.qq.com/s/337m-Ue55JDOf13i8JLG2g", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/RKNa5pic8pianEtRyEXkp2ed5fwhQmxoVIYDUR1woU4icvYwBoXiamzqUPkibLdmYN7yHSbYpVvGQJXK2nN73l5PgRg/0?wx_fmt=jpeg", + "excerpt": "高平市第一中学", + "category": "班级记忆", + "fileName": "2024_5_31(班级之星).md" + }, + { + "title": "挂科、重修预警通知", + "date": "2025-05-30", + "displayDate": "2025.05.30", + "sourceUrl": "https://mp.weixin.qq.com/s/jAEj0wkhvywcwPAMKE_cZg", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "距离全国大学生英语四、六级考试仅有14天! 请未开始预习的同学注意: 四六级考试无平时分,无补考,挂科即重修!", + "category": "考试升学", + "fileName": "挂科_重修预警通知.md" + }, + { + "title": "2024.5.29", + "date": "2025-05-29", + "displayDate": "2025.05.29", + "sourceUrl": "https://mp.weixin.qq.com/s/eD97zaiPmTE06tH8FWTb_A", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/RKNa5pic8pianEtRyEXkp2ed5fwhQmxoVIJrwp07epCsHkG2p2y7NXwRWJXQGoCNlwpLGUBd77iaPXswmktuvQlicQ/0?wx_fmt=jpeg", + "excerpt": "2024年5月29日班级日志", + "category": "班级记忆", + "fileName": "2024_5_29.md" + }, + { + "title": "2024届普通高中毕业班综合测试补充说明", + "date": "2025-05-28", + "displayDate": "2025.05.28", + "sourceUrl": "https://mp.weixin.qq.com/s/SN-ZN2t9iPKYUs68GKdtgA", + "cover": "https://mmbiz.qpic.cn/mmbiz_gif/myn9ibmy2AnPj8gYQ316BQvXDP2iaIqDr9uQNqwEactJ1icCNru4Lyd3R3Cwm48z1IiaibSqWLNibeBsKekMXcboFyTw/640?wx_fmt=gif", + "excerpt": "毕业班综合测试 2024届普通高中 补充说明", + "category": "毕业时刻", + "fileName": "2024届普通高中毕业班综合测试补充说明.md" + }, + { + "title": "网站群上线通知", + "date": "2025-05-28", + "displayDate": "2025.05.28", + "sourceUrl": "https://mp.weixin.qq.com/s/BzwaFT3_-lTwkz1keEexZg", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/RKNa5pic8piampaibDJNlrCiawqhia3LzibyNa3MNNlEAUAOqz6Fxyurqr4ic3YokNjqMPazGibr1vl2lQX67PLwVWWFlg/640?wx_fmt=jpeg", + "excerpt": "网站群于今日起上线试运营。 共三个站点: 主站点:https://class612.bond", + "category": "校园通知", + "fileName": "网站群上线通知.md" + }, + { + "title": "AI功能全面更新", + "date": "2025-05-18", + "displayDate": "2025.05.18", + "sourceUrl": "https://mp.weixin.qq.com/s/HnojqhAA1PipgcFXq0AJnw", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "AI文本库已更新大部分文章,支持对已有文章的智能分析; 查询能力增强,但胡说八道的能力也相应增强; 添加了参考功能,可依据参考文章自行判断;", + "category": "校园通知", + "fileName": "AI功能全面更新.md" + }, + { + "title": "5.12", + "date": "2025-05-12", + "displayDate": "2025.05.12", + "sourceUrl": "https://mp.weixin.qq.com/s/1h4NxYH9MjVqQDWP_vWXDw", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/RKNa5pic8pianpp1YgOA2pmASS69Vb9HYr1ByO0Spiarmlic0Na4ILOLf7ZQLzj77xcX5FwRaHafvxUO8DnWibf5DUQ/0?wx_fmt=jpeg", + "excerpt": "512汶川地震十七周年祭", + "category": "班级记忆", + "fileName": "5_12.md" + }, + { + "title": "2024年考前减压活动", + "date": "2025-05-10", + "displayDate": "2025.05.10", + "sourceUrl": "https://mp.weixin.qq.com/s/d5RCxug4FCHeHNq2EFRr0A", + "cover": "https://mmbiz.qpic.cn/mmbiz_png/9YnpzT3L9xJdYZMPCPZmA2nTibqcktgrOG4SdI9O7Tg9lXfU5HXuzf1sMmAhx3FhhYYKbIcBibjPclAOxAupzrkw/640?wx_fmt=png", + "excerpt": "2024年 考前减压活动 活动", + "category": "班级记忆", + "fileName": "2024年考前减压活动.md" + }, + { + "title": "五四青年节", + "date": "2025-05-04", + "displayDate": "2025.05.04", + "sourceUrl": "https://mp.weixin.qq.com/s/_whJ2p3fLcW8_R8QII3J6g", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_png/NJhtQ6dzDgkyVRibBeXESL2802EVtAFAzXob96eyNticY0XBibZbribzf0EMdDxwsBERcLVMvibqczJT7WSoGQmO1CA/640?wx_fmt=png", + "excerpt": "五 四 青 年 节 International Workers' Day 01", + "category": "节日来信", + "fileName": "五四青年节.md" + }, + { + "title": "湘西风情 纯爱悲歌", + "date": "2025-04-27", + "displayDate": "2025.04.27", + "sourceUrl": "https://mp.weixin.qq.com/s/X32zL4wuE3hQGB8pYQ0tCw", + "cover": "https://mmbiz.qpic.cn/mmbiz_png/4Urc9MU6f7WjVjicZOWj4ZAU1Dt00zxUO162Sria5Jglfmv6m6CRVRiacRFefxK2bBbr2clib09eMc4JaVslziaZ0XA/640?wx_fmt=png&wxfrom=13&tp=wxpic", + "excerpt": "世界读书日 BOOKS 边", + "category": "班级记忆", + "fileName": "湘西风情_纯爱悲歌.md" + }, + { + "title": "2021年山西省初中学业水平考试纪实", + "date": "2025-04-05", + "displayDate": "2025.04.05", + "sourceUrl": "https://mp.weixin.qq.com/s/5gGmJPmGUfzIVOwg36WvBg", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/RKNa5pic8piakVDFnPrsIMpPDwGGzx6eicYibiaUHTkgyLGfeCnvyzWNlXoqQaQ3F0OWBHgUxRvEoGgIGHIn5O5rMdQ/640?wx_fmt=jpeg", + "excerpt": "2021山西中考 2021山西中考已经过去4年。", + "category": "考试升学", + "fileName": "2021年山西省初中学业水平考试纪实.md" + }, + { + "title": "2023年高平市第一中学校六一特别活动", + "date": "2025-04-05", + "displayDate": "2025.04.05", + "sourceUrl": "https://mp.weixin.qq.com/s/bD-RIQcFN0xNwKvqTVU15w", + "cover": "https://mmbiz.qpic.cn/mmbiz_gif/QicfVv4d3MZdUzRJ7A90oy9m6F5Kyms2ibdWT7CuH60NkkcjKZF5bO6NJC7fWJheK9JhDsWCZfWytj0fnb2XFHWQ/640?wx_fmt=gif", + "excerpt": "2023年六一特别活动 高平市第一中学校 简介", + "category": "节日来信", + "fileName": "2023年高平市第一中学校六一特别活动.md" + }, + { + "title": "2024届班级之星公示", + "date": "2025-04-05", + "displayDate": "2025.04.05", + "sourceUrl": "https://mp.weixin.qq.com/s/bzECMbcunjLE_afXzKK33g", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "班级之星 公告 NOTICE", + "category": "班级记忆", + "fileName": "2024届班级之星公示.md" + }, + { + "title": "2024年普通高等学校招生全国统一考试", + "date": "2025-04-05", + "displayDate": "2025.04.05", + "sourceUrl": "https://mp.weixin.qq.com/s/34cDLtrdz-ArItAN0ZPLrQ", + "cover": "https://mmbiz.qpic.cn/mmbiz_gif/dzYH3ibFYEvhcYLYaV7SGawibm0QAmdyyiaPbFIKmJvTOdmIqpdccKJ8f3QDQoiaKIuAAl4t3RTpfpWYiaUbqpDV8sw/640?wx_fmt=gif", + "excerpt": "已过去一年", + "category": "考试升学", + "fileName": "2024年普通高等学校招生全国统一考试.md" + }, + { + "title": "关于做好2024届毕业生“班级之星”评选及复审工作的通知", + "date": "2025-04-05", + "displayDate": "2025.04.05", + "sourceUrl": "https://mp.weixin.qq.com/s/RE6t5fUJXs7GDZAHWYKavQ", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_png/MWXgibBjIO8xtOYZW6pdLrJu0x2hx0wQ3zmRmHA8kLWZopBuxZqbplwV2qEZibBVgdMAR9lqKiayNL1e3CxibVJXug/640?wx_fmt=png", + "excerpt": "关于做好 2024届毕业生“班级之星”评选 及复审工作的通知", + "category": "毕业时刻", + "fileName": "关于做好2024届毕业生_班级之星_评选及复审工作的通知.md" + }, + { + "title": "关于做好2024届普通高中毕业班综合测试的通知", + "date": "2025-04-05", + "displayDate": "2025.04.05", + "sourceUrl": "https://mp.weixin.qq.com/s/l36YVPdFaUd-4gKwy7NnzA", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_png/MWXgibBjIO8xtOYZW6pdLrJu0x2hx0wQ3zmRmHA8kLWZopBuxZqbplwV2qEZibBVgdMAR9lqKiayNL1e3CxibVJXug/640?wx_fmt=png", + "excerpt": "2024届普通高中 毕业班综合测试 公告", + "category": "毕业时刻", + "fileName": "关于做好2024届普通高中毕业班综合测试的通知.md" + }, + { + "title": "停更通知", + "date": "2025-04-05", + "displayDate": "2025.04.05", + "sourceUrl": "https://mp.weixin.qq.com/s/Ym_Xn4BmXiYZMNEmSYalsw", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "公众号自即日起正式永久性停更,感谢大家的支持!", + "category": "校园通知", + "fileName": "停更通知.md" + }, + { + "title": "陆壹贰序(更正与译文)", + "date": "2025-03-02", + "displayDate": "2025.03.02", + "sourceUrl": "https://mp.weixin.qq.com/s/p4-5gXFpoTsCpkB9NtKwDg", + "cover": "https://mmbiz.qpic.cn/mmbiz_png/zq7RF6JUdkSouPQHV6QBRicQicm2Ten8fEBzsParhd905cHmiae0IFhXSMk9xpQVOfJibL9JmMsBHDX6PqrZVLFSuw/640?wx_fmt=png", + "excerpt": "陆壹贰序 THE PREFACE OF CLASS 612 \\ 612序及译文", + "category": "班级记忆", + "fileName": "陆壹贰序(更正与译文).md" + }, + { + "title": "往年今日:百日誓师", + "date": "2025-02-28", + "displayDate": "2025.02.28", + "sourceUrl": "https://mp.weixin.qq.com/s/zo1-aEVsyXWvly0oFOZUGQ", + "cover": "https://mmbiz.qpic.cn/mmbiz_png/gpez6vbZEnG0FAkFRBKkohm3wiaMPIE5tQuC7UL5drz5MNabL53Ws5KD1oPRCS58YbcVriaIyj6EiaYlkH1cY8k5w/640?wx_fmt=png", + "excerpt": "往年今日系列 百日誓师 那时情景", + "category": "班级记忆", + "fileName": "往年今日_百日誓师.md" + }, + { + "title": "2024年下半年全国大学英语四、六级考试(CET)成绩查询有关安排", + "date": "2025-02-24", + "displayDate": "2025.02.24", + "sourceUrl": "https://mp.weixin.qq.com/s/ktE2KOzu28Lki2HUMBGG0Q", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/RKNa5pic8piam8UuvEzySLjO82cK89HZTPgeGumK9vOoHt5U4cAbEv225icwyOicibvjqhbyFoMeS4SzyHtEnDuI67w/640?wx_fmt=jpeg&from=appmsg", + "excerpt": "2024年下半年全国大学英语四、六级考试(CET)成绩查询服务将于2025年2月26日开通,有关安排如下:", + "category": "考试升学", + "fileName": "2024年下半年全国大学英语四_六级考试(CET)成绩查询有关安排.md" + }, + { + "title": "612班教师风采", + "date": "2025-02-21", + "displayDate": "2025.02.21", + "sourceUrl": "https://mp.weixin.qq.com/s/008_YZqWyQG2JMJqQpDDqQ", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/RKNa5pic8pialNCP6Mng81CyJHn22sEC7qzJj0UWHag5TZicqFMNkYFNGeKmYXwG5NzNXcJtt4E9Co5qRnT8U6KHA/640?wx_fmt=jpeg", + "excerpt": "点击蓝字 关注我们 612 一份师恩", + "category": "班级记忆", + "fileName": "612班教师风采.md" + }, + { + "title": "班级风采(旧)", + "date": "2025-02-20", + "displayDate": "2025.02.20", + "sourceUrl": "https://mp.weixin.qq.com/s/Obsau9rINETeDso5WDO0Gg", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/RKNa5pic8pialNCP6Mng81CyJHn22sEC7qYUsnPeia4g2QAiaNicliapK8U3SsDddic1ibSDPkRGWfHCGIicOocwQSjNgCw/640?wx_fmt=jpeg", + "excerpt": "致我的612班 “金鳞岂是池中物,一遇风雨便化龙” 这,是我的612班,冥冥之中我们因为某种缘分相识相聚在一起,30个大男孩,28个姑娘组成的大家庭(现56人,男39,女17)…", + "category": "班级记忆", + "fileName": "班级风采(旧).md" + }, + { + "title": "公众号介绍", + "date": "2025-02-20", + "displayDate": "2025.02.20", + "sourceUrl": "https://mp.weixin.qq.com/s/vrf267vBisy1A7GEmRpJGA", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "一页从公众号找回的班级记录。", + "category": "校园通知", + "fileName": "公众号介绍.md" + }, + { + "title": "公众号建设邀请函", + "date": "2025-02-18", + "displayDate": "2025.02.18", + "sourceUrl": "https://mp.weixin.qq.com/s/kmmg7ZgvLSLDLyCSfYhj9Q", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "公众号建设 邀请函 INVITATION", + "category": "校园通知", + "fileName": "公众号建设邀请函.md" + }, + { + "title": "陆壹贰序", + "date": "2025-02-18", + "displayDate": "2025.02.18", + "sourceUrl": "https://mp.weixin.qq.com/s/iu6sY4wFi4haiYFE_bwCSQ", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8pial9icLxsRQzGsWxt9dF6klVnAgYIBxGnMFHpgd7QmWYdmt1ZDLZYMXnD9GLKWib1vT44EgFcEvG2xrA/640?wx_fmt=png&from=appmsg", + "excerpt": "THE PREFACE OF CLASS 612 \\ 612序 三载韶光织锦,聚星芒于庠序;一室肝胆同辉,化春雨润青衿。望流云而思俊采,抚书卷以慕长风。敢竭鄙怀,恭疏短引:", + "category": "班级记忆", + "fileName": "陆壹贰序.md" + }, + { + "title": "陆壹贰序(更正稿)", + "date": "2025-02-18", + "displayDate": "2025.02.18", + "sourceUrl": "https://mp.weixin.qq.com/s/y1dWAfi4HnfsvMnPCYBPbg", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8pial9icLxsRQzGsWxt9dF6klVnAgYIBxGnMFHpgd7QmWYdmt1ZDLZYMXnD9GLKWib1vT44EgFcEvG2xrA/640?wx_fmt=png&from=appmsg", + "excerpt": "陆壹贰序 THE PREFACE OF CLASS 612 \\ 612序", + "category": "班级记忆", + "fileName": "陆壹贰序(更正稿).md" + }, + { + "title": "我对恩师说句话", + "date": "2025-02-18", + "displayDate": "2025.02.18", + "sourceUrl": "https://mp.weixin.qq.com/s/P1nEdt-e_A2MgVbRb_008Q", + "cover": "http://mmbiz.qpic.cn/sz_mmbiz_png/RKNa5pic8piakUUv7qYYW4jQK5CX1opY1bicPmJJgWI0YwaMJa7R9k0ONsY4sdic83BP488XhicT5XNTZfHibs4o2Izw/0?wx_fmt=png", + "excerpt": "桃李满天下,春晖遍四方。我们正在征集大家对老师想说的话,希望同学们积极参与。点击参与", + "category": "班级记忆", + "fileName": "我对恩师说句话.md" + }, + { + "title": "2025寒假返校", + "date": "2025-02-17", + "displayDate": "2025.02.17", + "sourceUrl": "https://mp.weixin.qq.com/s/ACXjjfReEpAdC8sH_BQWVw", + "cover": "https://mmbiz.qpic.cn/sz_mmbiz_gif/RKNa5pic8piamJqHgXU24UzYTAmtU9RL0Kj2CIVm9JOzcZFopVPuwmqcL380OpKdVdpk9IBRpFVGiauDBib2VzbHrA/640?wx_fmt=gif&from=appmsg", + "excerpt": "返校慰问教师 2025年寒假 返校慰问计划", + "category": "校园通知", + "fileName": "2025寒假返校.md" + } +] diff --git a/src/data/articles.ts b/src/data/articles.ts new file mode 100644 index 0000000..d894bef --- /dev/null +++ b/src/data/articles.ts @@ -0,0 +1,26 @@ +export type ArticleCategory = "班级记忆" | "毕业时刻" | "节日来信" | "考试升学" | "校园通知"; + +export interface WechatArticle { + title: string; + date: string; + displayDate: string; + sourceUrl: string; + cover: string; + excerpt: string; + category: ArticleCategory; + fileName: string; +} + +import articleData from "./articles.generated.json"; + +export const articles = articleData as WechatArticle[]; + +export const articleCategories: ArticleCategory[] = [ + "班级记忆", + "毕业时刻", + "节日来信", + "考试升学", + "校园通知" +]; + +export const featuredArticles = articles.slice(0, 3); diff --git a/src/data/photo-topics/candid.ts b/src/data/photo-topics/candid.ts index 8ac58e6..9f540b4 100644 --- a/src/data/photo-topics/candid.ts +++ b/src/data/photo-topics/candid.ts @@ -1,10 +1,11 @@ import type { PhotoTopic } from "../photo-types"; +import { wechatPhoto } from "./wechat-photo"; export const candidTopic: PhotoTopic = { slug: "candid", title: "没被摆拍的瞬间", text: "走廊、食堂、晚霞和笑场。真正会让人停下来的,常常是不太整齐的照片。", - cover: "", + cover: "/assets/wechat-archive/wechat-499.webp", photos: [ { title: "走廊偶遇", @@ -25,6 +26,8 @@ export const candidTopic: PhotoTopic = { title: "笑场", caption: "最不端正的照片,往往最像我们。", image: "" - } + }, + wechatPhoto(490, "恶魔角合照", "没有正式站姿,反而最像我们真实的青春。"), + wechatPhoto(499, "草地上的伙伴", "坐下来聊聊天,晚风把时间吹得很慢。") ] }; diff --git a/src/data/photo-topics/classroom.ts b/src/data/photo-topics/classroom.ts index bf8c3cc..c21dab5 100644 --- a/src/data/photo-topics/classroom.ts +++ b/src/data/photo-topics/classroom.ts @@ -1,10 +1,11 @@ import type { PhotoTopic } from "../photo-types"; +import { wechatPhoto } from "./wechat-photo"; export const classroomTopic: PhotoTopic = { slug: "classroom", title: "教室日常", text: "黑板、课桌、窗边、试卷,还有那些写在草稿纸边角的小情绪。", - cover: "", + cover: "/assets/wechat-archive/wechat-373.webp", photos: [ { title: "窗边", @@ -30,6 +31,15 @@ export const classroomTopic: PhotoTopic = { title: "询问老师", caption: "课后向老师请教问题", image: "https://pic.biss.click/image/95c03bd4-d0d3-4c38-9855-3342fd582080.jpg" - } + }, + wechatPhoto(159, "清晨校园", "天还没完全亮,教学楼已经开始新的一天。"), + wechatPhoto(160, "空走廊", "下课铃没有响起时,走廊安静得像一张旧照片。"), + wechatPhoto(161, "教室一角", "寒冷的早晨、厚厚的毯子和靠窗的位置。"), + wechatPhoto(162, "雪天课间", "楼下有人追着雪跑,楼上的人隔窗看热闹。"), + wechatPhoto(193, "黑板前", "老师写下的每一行,都曾是我们共同的日常。"), + wechatPhoto(196, "忙碌的教室", "有人整理桌面,有人继续写题,生活没有暂停。"), + wechatPhoto(197, "围在桌边", "讲一道题的时间,也能成为多年后的回忆。"), + wechatPhoto(373, "夕阳自习", "光从窗边落进来,照亮高中的普通一天。"), + wechatPhoto(375, "教室合照", "镜头前挤成一团,是班级最真实的样子。") ] }; diff --git a/src/data/photo-topics/events.ts b/src/data/photo-topics/events.ts index 9ba4be6..840cf1e 100644 --- a/src/data/photo-topics/events.ts +++ b/src/data/photo-topics/events.ts @@ -1,10 +1,11 @@ import type { PhotoTopic } from "../photo-types"; +import { wechatPhoto } from "./wechat-photo"; export const eventsTopic: PhotoTopic = { slug: "events", title: "班级活动", text: "运动会、晚会、春游、比赛,所有离开课桌之后还在一起发光的时刻。", - cover: "", + cover: "/assets/wechat-archive/wechat-455.webp", photos: [ { title: "高一下学期表彰大会", @@ -20,6 +21,21 @@ export const eventsTopic: PhotoTopic = { title: "百日誓师大会", caption: "高三的第一次全体活动,大家都很随意地在听讲,虽然最后还是没能坚持到最后。", image: "https://pic.biss.click/image/45bfbe79-bd7b-40f3-9670-1b34cc0957b2.png" - } + }, + wechatPhoto(117, "考前舞台", "紧张的日子里,也需要一次大声唱出来。"), + wechatPhoto(121, "看台上的我们", "一片红色校服,聚成高三最后的集体活动。"), + wechatPhoto(129, "操场热身", "阳光很好,口号和动作都比平时更有力量。"), + wechatPhoto(132, "坐在一起", "台上发生什么已经模糊,身边的人还记得。"), + wechatPhoto(176, "元旦歌咏", "整齐站上舞台,是青春里难得的郑重。"), + wechatPhoto(178, "领奖时刻", "证书会褪色,但被认可的那一刻不会。"), + wechatPhoto(180, "操场挑战", "跨过栏架,也跨过一个个觉得做不到的瞬间。"), + wechatPhoto(181, "百日倒计时", "数字揭开的那一刻,高考忽然变得很近。"), + wechatPhoto(368, "军训合影", "刚认识不久的我们,第一次以班级的名字站在一起。"), + wechatPhoto(370, "方阵出发", "步子未必完全整齐,方向却是一致的。"), + wechatPhoto(446, "远足路上的笑脸", "路很长,但和同学一起走就没有那么累。"), + wechatPhoto(455, "山脚合影", "走过很远的路,当然要认真留下一张合照。"), + wechatPhoto(459, "班旗与伙伴", "把班级的名字举进镜头,也举进三年的记忆。"), + wechatPhoto(470, "操场晚会", "天黑之后,灯光和欢呼把操场变成了舞台。"), + wechatPhoto(480, "荧光人群", "挥动的光棒让普通夜晚有了节日的颜色。") ] }; diff --git a/src/data/photo-topics/graduation-day.ts b/src/data/photo-topics/graduation-day.ts index 6972ab9..1817493 100644 --- a/src/data/photo-topics/graduation-day.ts +++ b/src/data/photo-topics/graduation-day.ts @@ -1,10 +1,11 @@ import type { PhotoTopic } from "../photo-types"; +import { wechatPhoto } from "./wechat-photo"; export const graduationDayTopic: PhotoTopic = { slug: "graduation-day", title: "毕业那天", text: "合照、签名、花束、校门和没说完的话,都放在这个专题里。", - cover: "https://pic.biss.click/image/c1528af5-62da-47c3-8309-cd809f779288.jpg", + cover: "/assets/wechat-archive/wechat-145.webp", photos: [ { title: "最后一张合照", @@ -30,6 +31,25 @@ export const graduationDayTopic: PhotoTopic = { title: "散场之前", caption: "那一刻大家都在笑,但心里都知道要分别了。", image: "https://pic.biss.click/image/f8d180c1-4827-4bfd-9550-4bfad4b97640.jpg" - } + }, + wechatPhoto(145, "壮行合影", "红色班服、彩色气球,和出发前最完整的一次站在一起。"), + wechatPhoto(146, "气球升起之前", "所有人挤进镜头,等一个一起松手的瞬间。"), + wechatPhoto(150, "飞向夏天", "气球越过教学楼,属于高中的倒计时也到了最后。"), + wechatPhoto(151, "人群里的告别", "欢呼、拥抱和一句句被现场声音盖住的话。"), + wechatPhoto(152, "穿过祝福", "从熟悉的人群中走过,前面就是新的路。"), + wechatPhoto(153, "鲜花与笑脸", "最后一程依然有人在身旁鼓掌。"), + wechatPhoto(81, "毕业典礼合影", "红色幕布前,老师和同学一起留下毕业的证据。"), + wechatPhoto(84, "典礼现场", "从看台望向舞台,礼堂装下了整届人的夏天。"), + wechatPhoto(85, "把花送给老师", "镜头拼在一起,也拼出那天的感谢。"), + wechatPhoto(88, "走过红毯", "熟悉的老师站在两侧,目送这一届学生离开。"), + wechatPhoto(89, "并肩入场", "毕业不是一个人的终点,是一群人的共同章节。"), + wechatPhoto(382, "最后一天的教室", "书本还摊在桌上,离别已经悄悄开始。"), + wechatPhoto(387, "签在衣服上", "名字、祝福和画得歪歪扭扭的小图案。"), + wechatPhoto(388, "气球装点的教室", "最后一次把教室布置得像节日。"), + wechatPhoto(391, "散场之后", "桌椅、书本和气球,保留着刚刚发生过的热闹。"), + wechatPhoto(396, "捧着花出发", "校门口的人群里,每个人都有自己的告别方式。"), + wechatPhoto(405, "校车旁的合照", "气球还在手里,下一段旅程已经在等候。"), + wechatPhoto(408, "放飞之前", "大家抬头看向同一个方向。"), + wechatPhoto(411, "毕业气球", "彩色气球升空,校门口只剩挥手的人群。") ] }; diff --git a/src/data/photo-topics/wechat-photo.ts b/src/data/photo-topics/wechat-photo.ts new file mode 100644 index 0000000..c4f4e98 --- /dev/null +++ b/src/data/photo-topics/wechat-photo.ts @@ -0,0 +1,7 @@ +import type { PhotoItem } from "../photo-types"; + +export const wechatPhoto = (id: number, title: string, caption: string): PhotoItem => ({ + title, + caption, + image: `/assets/wechat-archive/wechat-${String(id).padStart(3, "0")}.webp` +}); diff --git a/src/data/site.ts b/src/data/site.ts index 3fe9145..d33376d 100644 --- a/src/data/site.ts +++ b/src/data/site.ts @@ -31,6 +31,7 @@ export const navItems = [ { label: "首页", href: "/" }, { label: "三年时间线", href: "/timeline/" }, { label: "照片墙", href: "/gallery/" }, + { label: "青春刊物", href: "/articles/" }, { label: "如今的我们", href: "/people/" }, { label: "综合试卷", href: "/exam/" }, { label: "留言墙", href: "/messages/" } diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro index 77968e4..5307f48 100644 --- a/src/layouts/BaseLayout.astro +++ b/src/layouts/BaseLayout.astro @@ -25,6 +25,7 @@ const buildTime = new Intl.DateTimeFormat("zh-CN", { + {title} [category, articles.filter((article) => article.category === category).length]) +); +--- + + +
+
+
+ 返回首页 +

CLASS PUBLICATION · {articles.length} 篇

+

青春刊物

+

这里收录公众号里的班级日志、校园时刻与毕业后的来信。原文仍属于公众号,这里为它们做一份更容易寻找的目录。

+
+
+ +
+
+
+ +
+ + { + articleCategories.map((category) => ( + + )) + } +
+
+ +

正在展示 {articles.length} 篇文章

+ +
+ { + articles.map((article, index) => ( + +
+ {!article.cover && {String(index + 1).padStart(3, "0")}} +
+
+
+ {article.category} + +
+

{article.title}

+

{article.excerpt}

+ 公众号原文 +
+
+ )) + } +
+ + +
+
+
+ + +
diff --git a/src/pages/index.astro b/src/pages/index.astro index 94ce44e..44f26f9 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -5,6 +5,7 @@ import { featuredMessage, messages, messagesIntro } from "../data/messages"; import { people, peopleIntro } from "../data/people"; import { site, stats } from "../data/site"; import { timeline, timelineIntro } from "../data/timeline"; +import { articles, featuredArticles } from "../data/articles"; const previewTimeline = timeline.slice(0, 4); const previewPhotoTopics = photoTopics.slice(0, 4); @@ -136,6 +137,48 @@ const previewPeople = people.slice(0, 6); +
+
+
+
+

FROM WECHAT · 青春刊物

+

散落在公众号里的故事,也该被好好收藏

+
+

+ 已整理 {articles.length} 篇公众号文章。从班级日志、毕业典礼到节日来信,按下时间的书签,重新读一遍当时的我们。 +

+
+ + + + 翻阅全部 {articles.length} 篇 +
+
+