@s-hirano-ist/s-scripts 1.21.0 → 1.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=enrich-books.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enrich-books.d.ts","sourceRoot":"","sources":["../src/enrich-books.ts"],"names":[],"mappings":""}
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * markdown/book/*.md の frontmatter のうち google* が欠落しているものについて、
4
+ * Google Books API を呼び出して frontmatter を補完するスクリプト。
5
+ */
6
+ import { readFile, writeFile } from "node:fs/promises";
7
+ import { basename, join } from "node:path";
8
+ import { books as googleBooksApis } from "@googleapis/books";
9
+ import { glob } from "glob";
10
+ import matter from "gray-matter";
11
+ import yaml from "js-yaml";
12
+ const NO_IMG_SRC = "https://s-hirano.com/notFound.png";
13
+ const NOT_FOUND_HREF = "https://s-hirano.com/404";
14
+ const API_INTERVAL_MS = 600;
15
+ function dumpFrontmatter(data) {
16
+ return yaml.dump(data, {
17
+ lineWidth: -1,
18
+ forceQuotes: false,
19
+ noRefs: true,
20
+ });
21
+ }
22
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
23
+ async function main() {
24
+ const dryRun = process.argv.includes("--dry-run");
25
+ const contentsPath = process.env.S_CONTENTS_PATH ?? process.cwd();
26
+ const bookDir = join(contentsPath, "markdown", "book");
27
+ const apiKey = process.env.GOOGLE_BOOKS_API_KEY;
28
+ if (!apiKey) {
29
+ throw new Error("GOOGLE_BOOKS_API_KEY is not set");
30
+ }
31
+ const api = googleBooksApis({ version: "v1", auth: apiKey });
32
+ const files = await glob(`${bookDir}/*.md`);
33
+ console.log(`📁 ${files.length} 件の markdown を検出しました。${dryRun ? " (dry-run)" : ""}`);
34
+ let enrichedCount = 0;
35
+ let skippedCount = 0;
36
+ let errorCount = 0;
37
+ for (const filePath of files.sort()) {
38
+ const fileName = basename(filePath);
39
+ const isbn = basename(filePath, ".md");
40
+ try {
41
+ const raw = await readFile(filePath, "utf8");
42
+ const parsed = matter(raw);
43
+ const data = parsed.data;
44
+ // googleTitle が既に埋まっているならスキップ
45
+ if (data.googleTitle != null && data.googleTitle !== "") {
46
+ skippedCount++;
47
+ continue;
48
+ }
49
+ console.log(`🔍 ${fileName}: Google Books API 問い合わせ中...`);
50
+ const book = await api.volumes.list({ q: `isbn:${isbn}` });
51
+ await sleep(API_INTERVAL_MS);
52
+ if (book.status !== 200) {
53
+ throw new Error(`Google Books API status ${book.status}`);
54
+ }
55
+ const volume = book.data.items?.[0]?.volumeInfo;
56
+ const httpsImgSrc = (volume?.imageLinks?.thumbnail ?? NO_IMG_SRC).replace("http://", "https://");
57
+ const httpsHref = (volume?.infoLink ?? NOT_FOUND_HREF).replace("http://", "https://");
58
+ const next = {
59
+ ...data,
60
+ googleTitle: volume?.title ??
61
+ (typeof data.description === "string" ? data.description : isbn),
62
+ googleSubtitle: volume?.subtitle ?? "",
63
+ googleAuthors: volume?.authors ?? [],
64
+ googleDescription: volume?.description ?? "No description",
65
+ googleImgSrc: httpsImgSrc,
66
+ googleHref: httpsHref,
67
+ };
68
+ const body = parsed.content.replace(/^\n+/, "");
69
+ const newContent = `---\n${dumpFrontmatter(next)}---\n\n${body}`;
70
+ if (dryRun) {
71
+ console.log(" [dry-run] 書き込みスキップ");
72
+ }
73
+ else {
74
+ await writeFile(filePath, newContent, "utf8");
75
+ console.log(` ✅ ${volume?.title ?? "(title not found)"}`);
76
+ }
77
+ enrichedCount++;
78
+ }
79
+ catch (error) {
80
+ console.error(`❌ ${fileName}:`, error);
81
+ errorCount++;
82
+ }
83
+ }
84
+ console.log(`\n📊 結果: 補完 ${enrichedCount} 件, スキップ ${skippedCount} 件, エラー ${errorCount} 件${dryRun ? " (dry-run)" : ""}`);
85
+ }
86
+ main().catch((error) => {
87
+ console.error("❌ エラーが発生しました:", error);
88
+ process.exit(1);
89
+ });
90
+ //# sourceMappingURL=enrich-books.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enrich-books.js","sourceRoot":"","sources":["../src/enrich-books.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,15 @@ import path from "node:path";
4
4
  import { makeUnexportedStatus, makeUserId, } from "@s-hirano-ist/s-core/shared-kernel/entities/common-entity";
5
5
  import { createPushoverService } from "@s-hirano-ist/s-notification";
6
6
  import { createMinioClient } from "@s-hirano-ist/s-storage";
7
+ import yaml from "js-yaml";
7
8
  const OUTPUT_DIR = "markdown/book/";
9
+ function dumpFrontmatter(data) {
10
+ return yaml.dump(data, {
11
+ lineWidth: -1,
12
+ forceQuotes: false,
13
+ noRefs: true,
14
+ });
15
+ }
8
16
  async function main() {
9
17
  const env = {
10
18
  DATABASE_URL: process.env.DATABASE_URL,
@@ -49,14 +57,20 @@ async function main() {
49
57
  catch {
50
58
  // ファイルが存在しない場合は書き出し
51
59
  }
52
- const frontmatter = [
53
- "---",
54
- `heading: ${item.isbn}`,
55
- `description: ${item.title}`,
56
- "draft: false",
57
- "---",
58
- ].join("\n");
59
- await writeFile(filePath, `${frontmatter}\n\n# ${item.title}\n`);
60
+ const frontmatter = dumpFrontmatter({
61
+ heading: item.isbn,
62
+ description: item.title,
63
+ draft: false,
64
+ rating: item.rating,
65
+ tags: item.tags,
66
+ googleTitle: item.googleTitle,
67
+ googleSubtitle: item.googleSubTitle,
68
+ googleAuthors: item.googleAuthors,
69
+ googleDescription: item.googleDescription,
70
+ googleImgSrc: item.googleImgSrc,
71
+ googleHref: item.googleHref,
72
+ });
73
+ await writeFile(filePath, `---\n${frontmatter}---\n\n# ${item.title}\n`);
60
74
  exportedCount++;
61
75
  }
62
76
  console.log(`💾 Markdown: ${exportedCount} 件書き出し, ${skippedCount} 件スキップ`);
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-books.js","sourceRoot":"","sources":["../src/fetch-books.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetch-books.js","sourceRoot":"","sources":["../src/fetch-books.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACN,oBAAoB,EACpB,UAAU,GAGV,MAAM,2DAA2D,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,IAAI,MAAM,SAAS,CAAC;AAiB3B,MAAM,UAAU,GAAG,gBAAgB,CAAC;AAEpC,SAAS,eAAe,CAAC,IAA6B;IACrD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QACtB,SAAS,EAAE,CAAC,CAAC;QACb,WAAW,EAAE,KAAK;QAClB,MAAM,EAAE,IAAI;KACZ,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI;IAClB,MAAM,GAAG,GAAG;QACX,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAChD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAClD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAClD,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;KACvC,CAAC;IAEX,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;QAC1C,IACC,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB;YAChC,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,EACnC,CAAC;YACF,MAAM,IAAI,KAAK,CACd,0FAA0F,CAC1F,CAAC;QACH,CAAC;IACF,CAAC;IAED,8CAA8C;IAC9C,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IAE1D,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;QACjD,GAAG,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;QAC3B,OAAO,EAAE,GAAG,CAAC,iBAAiB,IAAI,EAAE;QACpC,QAAQ,EAAE,GAAG,CAAC,kBAAkB,IAAI,EAAE;KACtC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC;IAExC,MAAM,MAAM,GAAW,UAAU,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,UAAU,GAAW,oBAAoB,EAAE,CAAC;IAElD,KAAK,UAAU,UAAU,CAAC,IAAY;QACrC,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,aAAa,GAAG,CAAC,CAAC;QAEtB,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE7C,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,GAAG,UAAU,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC;YAEhD,qBAAqB;YACrB,IAAI,CAAC;gBACJ,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACvB,YAAY,EAAE,CAAC;gBACf,SAAS;YACV,CAAC;YAAC,MAAM,CAAC;gBACR,oBAAoB;YACrB,CAAC;YAED,MAAM,WAAW,GAAG,eAAe,CAAC;gBACnC,OAAO,EAAE,IAAI,CAAC,IAAI;gBAClB,WAAW,EAAE,IAAI,CAAC,KAAK;gBACvB,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;aAC3B,CAAC,CAAC;YACH,MAAM,SAAS,CAAC,QAAQ,EAAE,QAAQ,WAAW,YAAY,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;YACzE,aAAa,EAAE,CAAC;QACjB,CAAC;QAED,OAAO,CAAC,GAAG,CACV,gBAAgB,aAAa,WAAW,YAAY,QAAQ,CAC5D,CAAC;IACH,CAAC;IAED,KAAK,UAAU,SAAS,CAAI,EAAoB,EAAE,OAAO,GAAG,CAAC;QAC5D,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC;YACpD,IAAI,CAAC;gBACJ,OAAO,MAAM,EAAE,EAAE,CAAC;YACnB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,OAAO,KAAK,OAAO,GAAG,CAAC;oBAAE,MAAM,KAAK,CAAC;gBACzC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,OAAO,CAAC;gBAClC,OAAO,CAAC,IAAI,CAAC,WAAW,OAAO,GAAG,CAAC,IAAI,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC;gBACnE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YAChD,CAAC;QACF,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,UAAU,kBAAkB,CAAC,KAAa;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;QACzD,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5C,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CACV,MAAM,eAAe,CAAC,MAAM,oBAAoB,CAChD,CAAC;QAEF,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,eAAe,GAAG,CAAC,CAAC;QAExB,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;YACpC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;YACjC,IAAI,CAAC,SAAS;gBAAE,SAAS;YAEzB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACpC,MAAM,QAAQ,GAAG,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAEhD,qBAAqB;YACrB,IAAI,CAAC;gBACJ,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACvB,YAAY,EAAE,CAAC;gBACf,SAAS;YACV,CAAC;YAAC,MAAM,CAAC;gBACR,sBAAsB;YACvB,CAAC;YAED,MAAM,SAAS,CAAC,GAAG,EAAE,CACpB,WAAW,CAAC,UAAU,CACrB,GAAG,CAAC,iBAAiB,IAAI,EAAE,EAC3B,kBAAkB,SAAS,EAAE,EAC7B,QAAQ,CACR,CACD,CAAC;YACF,eAAe,EAAE,CAAC;QACnB,CAAC;QACD,OAAO,CAAC,GAAG,CACV,YAAY,eAAe,aAAa,YAAY,QAAQ,CAC5D,CAAC;IACH,CAAC;IAED,KAAK,UAAU,UAAU;QACxB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;YACxC,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE;SACrC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,MAAM,gBAAgB,CAAC,CAAC;QAEhD,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC;QACxB,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,UAAU,EAAE,CAAC;QACnB,MAAM,mBAAmB,CAAC,UAAU,CAAC,uBAAuB,EAAE;YAC7D,MAAM,EAAE,aAAa;SACrB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,mBAAmB,CAAC,WAAW,CAAC,uBAAuB,KAAK,EAAE,EAAE;YACrE,MAAM,EAAE,aAAa;SACrB,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;YAAS,CAAC;QACV,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;AACF,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
@@ -2,22 +2,32 @@
2
2
  import { readFile, writeFile } from "node:fs/promises";
3
3
  import { basename, join } from "node:path";
4
4
  import { glob } from "glob";
5
- function hasFrontmatter(content) {
6
- return content.startsWith("---");
5
+ import matter from "gray-matter";
6
+ import yaml from "js-yaml";
7
+ const REQUIRED_KEYS = [
8
+ "heading",
9
+ "description",
10
+ "draft",
11
+ "rating",
12
+ "tags",
13
+ "googleTitle",
14
+ "googleSubtitle",
15
+ "googleAuthors",
16
+ "googleDescription",
17
+ "googleImgSrc",
18
+ "googleHref",
19
+ ];
20
+ function dumpFrontmatter(data) {
21
+ return yaml.dump(data, {
22
+ lineWidth: -1,
23
+ forceQuotes: false,
24
+ noRefs: true,
25
+ });
7
26
  }
8
- function extractTitleFromH1(content) {
27
+ function extractTitleFromContent(content) {
9
28
  const match = content.match(/^# (.+)$/m);
10
29
  return match ? match[1].trim() : null;
11
30
  }
12
- function generateFrontmatter(isbn, title) {
13
- return [
14
- "---",
15
- `heading: ${isbn}`,
16
- `description: ${title}`,
17
- "draft: false",
18
- "---",
19
- ].join("\n");
20
- }
21
31
  async function main() {
22
32
  const dryRun = process.argv.includes("--dry-run");
23
33
  const contentsPath = process.env.S_CONTENTS_PATH ?? process.cwd();
@@ -32,27 +42,47 @@ async function main() {
32
42
  const fileName = basename(filePath);
33
43
  const isbn = basename(filePath, ".md");
34
44
  try {
35
- const content = await readFile(filePath, "utf8");
36
- if (hasFrontmatter(content)) {
45
+ const raw = await readFile(filePath, "utf8");
46
+ const parsed = matter(raw);
47
+ const existing = parsed.data;
48
+ const hasAllKeys = REQUIRED_KEYS.every((k) => Object.hasOwn(existing, k));
49
+ if (hasAllKeys) {
37
50
  skippedCount++;
38
51
  continue;
39
52
  }
40
- const title = extractTitleFromH1(content);
41
- if (!title) {
42
- console.error(`⚠️ ${fileName}: H1タイトルが見つかりません。スキップします。`);
43
- errorCount++;
44
- continue;
53
+ let description = typeof existing.description === "string" ? existing.description : "";
54
+ if (!description) {
55
+ const h1 = extractTitleFromContent(parsed.content);
56
+ if (!h1) {
57
+ console.error(`⚠️ ${fileName}: description も H1 も見つかりません。スキップします。`);
58
+ errorCount++;
59
+ continue;
60
+ }
61
+ description = h1;
45
62
  }
46
- const frontmatter = generateFrontmatter(isbn, title);
47
- const newContent = `${frontmatter}\n\n${content}`;
63
+ const next = {
64
+ heading: existing.heading ?? isbn,
65
+ description,
66
+ draft: existing.draft ?? false,
67
+ rating: "rating" in existing ? existing.rating : null,
68
+ tags: Array.isArray(existing.tags) ? existing.tags : [],
69
+ googleTitle: "googleTitle" in existing ? existing.googleTitle : null,
70
+ googleSubtitle: "googleSubtitle" in existing ? existing.googleSubtitle : null,
71
+ googleAuthors: Array.isArray(existing.googleAuthors)
72
+ ? existing.googleAuthors
73
+ : [],
74
+ googleDescription: "googleDescription" in existing ? existing.googleDescription : null,
75
+ googleImgSrc: "googleImgSrc" in existing ? existing.googleImgSrc : null,
76
+ googleHref: "googleHref" in existing ? existing.googleHref : null,
77
+ };
78
+ const body = parsed.content.replace(/^\n+/, "");
79
+ const newContent = `---\n${dumpFrontmatter(next)}---\n\n${body}`;
48
80
  if (dryRun) {
49
81
  console.log(`🔍 [dry-run] 修正予定: ${fileName}`);
50
- console.log(` heading: ${isbn}`);
51
- console.log(` description: ${title}`);
52
82
  }
53
83
  else {
54
84
  await writeFile(filePath, newContent, "utf8");
55
- console.log(`✅ 修正完了: ${fileName} (${title})`);
85
+ console.log(`✅ 修正完了: ${fileName} (${description})`);
56
86
  }
57
87
  fixedCount++;
58
88
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fix-book-frontmatter.js","sourceRoot":"","sources":["../src/fix-book-frontmatter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fix-book-frontmatter.js","sourceRoot":"","sources":["../src/fix-book-frontmatter.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,MAAM,aAAa,GAAG;IACrB,SAAS;IACT,aAAa;IACb,OAAO;IACP,QAAQ;IACR,MAAM;IACN,aAAa;IACb,gBAAgB;IAChB,eAAe;IACf,mBAAmB;IACnB,cAAc;IACd,YAAY;CACH,CAAC;AAEX,SAAS,eAAe,CAAC,IAA6B;IACrD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QACtB,SAAS,EAAE,CAAC,CAAC;QACb,WAAW,EAAE,KAAK;QAClB,MAAM,EAAE,IAAI;KACZ,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAe;IAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACzC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,CAAC;AAED,KAAK,UAAU,IAAI;IAClB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAClE,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAEvD,OAAO,CAAC,GAAG,CACV,0CAA0C,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,CACxE,CAAC;IAEF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,GAAG,OAAO,OAAO,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;IAE1C,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAEvC,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,IAA+B,CAAC;YAExD,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1E,IAAI,UAAU,EAAE,CAAC;gBAChB,YAAY,EAAE,CAAC;gBACf,SAAS;YACV,CAAC;YAED,IAAI,WAAW,GACd,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,IAAI,CAAC,WAAW,EAAE,CAAC;gBAClB,MAAM,EAAE,GAAG,uBAAuB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACnD,IAAI,CAAC,EAAE,EAAE,CAAC;oBACT,OAAO,CAAC,KAAK,CACZ,MAAM,QAAQ,sCAAsC,CACpD,CAAC;oBACF,UAAU,EAAE,CAAC;oBACb,SAAS;gBACV,CAAC;gBACD,WAAW,GAAG,EAAE,CAAC;YAClB,CAAC;YAED,MAAM,IAAI,GAA4B;gBACrC,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,IAAI;gBACjC,WAAW;gBACX,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,KAAK;gBAC9B,MAAM,EAAE,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;gBACrD,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBACvD,WAAW,EAAE,aAAa,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI;gBACpE,cAAc,EACb,gBAAgB,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI;gBAC9D,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;oBACnD,CAAC,CAAC,QAAQ,CAAC,aAAa;oBACxB,CAAC,CAAC,EAAE;gBACL,iBAAiB,EAChB,mBAAmB,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI;gBACpE,YAAY,EAAE,cAAc,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;gBACvE,UAAU,EAAE,YAAY,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;aACjE,CAAC;YAEF,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAChD,MAAM,UAAU,GAAG,QAAQ,eAAe,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;YAEjE,IAAI,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,GAAG,CAAC,sBAAsB,QAAQ,EAAE,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACP,MAAM,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,WAAW,QAAQ,KAAK,WAAW,GAAG,CAAC,CAAC;YACrD,CAAC;YACD,UAAU,EAAE,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,KAAK,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC;YACzC,UAAU,EAAE,CAAC;QACd,CAAC;IACF,CAAC;IAED,OAAO,CAAC,GAAG,CACV,eAAe,UAAU,YAAY,YAAY,WAAW,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CACvG,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACtB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
@@ -1,10 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import { readFile } from "node:fs/promises";
3
3
  import { basename, extname } from "node:path";
4
+ import { makeISBN } from "@s-hirano-ist/s-core/books/entities/book-entity";
4
5
  import { makeExportedStatus, makeId, makeUserId, } from "@s-hirano-ist/s-core/shared-kernel/entities/common-entity";
5
6
  import { createPushoverService } from "@s-hirano-ist/s-notification";
6
7
  import { createMinioClient } from "@s-hirano-ist/s-storage";
7
8
  import { glob } from "glob";
9
+ import matter from "gray-matter";
8
10
  import sharp from "sharp";
9
11
  const SCRIPT_NAME = "ingest-books";
10
12
  const ORIGINAL_BOOK_IMAGE_PATH = "books/original";
@@ -27,19 +29,27 @@ function getContentType(filePath) {
27
29
  }
28
30
  }
29
31
  function parseBookFile(content) {
30
- const lines = content.split("\n");
31
- let title = "";
32
- let bodyStartIndex = 0;
33
- for (let i = 0; i < lines.length; i++) {
34
- const line = lines[i];
35
- if (line?.startsWith("# ")) {
36
- title = line.slice(2).trim();
37
- bodyStartIndex = i + 1;
38
- break;
39
- }
32
+ const parsed = matter(content);
33
+ const data = parsed.data;
34
+ // title: description を優先、無ければ本文の H1 からフォールバック
35
+ let title = data.description?.trim() ?? "";
36
+ if (!title) {
37
+ const h1Match = parsed.content.match(/^# (.+)$/m);
38
+ title = h1Match ? h1Match[1].trim() : "";
40
39
  }
41
- const body = lines.slice(bodyStartIndex).join("\n").trim();
42
- return { title, markdown: body || null };
40
+ const body = parsed.content.trim();
41
+ return {
42
+ title,
43
+ markdown: body || null,
44
+ rating: data.rating ?? null,
45
+ tags: data.tags ?? [],
46
+ googleTitle: data.googleTitle ?? null,
47
+ googleSubTitle: data.googleSubtitle ?? null,
48
+ googleAuthors: data.googleAuthors ?? [],
49
+ googleDescription: data.googleDescription ?? null,
50
+ googleImgSrc: data.googleImgSrc ?? null,
51
+ googleHref: data.googleHref ?? null,
52
+ };
43
53
  }
44
54
  async function main() {
45
55
  const dryRun = process.argv.includes("--dry-run");
@@ -100,8 +110,14 @@ async function main() {
100
110
  for (const f of imageFiles) {
101
111
  if (getContentType(f) === null)
102
112
  continue;
103
- const isbn = basename(f, extname(f));
104
- bookImageMap.set(isbn, f);
113
+ const rawIsbn = basename(f, extname(f));
114
+ try {
115
+ const isbn = makeISBN(rawIsbn);
116
+ bookImageMap.set(isbn, f);
117
+ }
118
+ catch {
119
+ console.error(`⚠️ 無効な画像ISBN: ${basename(f)}`);
120
+ }
105
121
  }
106
122
  console.log(`🖼️ ${bookImageMap.size} 件の書籍画像を検出しました。`);
107
123
  const existingBooks = await prisma.book.findMany({
@@ -112,22 +128,43 @@ async function main() {
112
128
  title: true,
113
129
  markdown: true,
114
130
  imagePath: true,
131
+ rating: true,
132
+ tags: true,
133
+ googleTitle: true,
134
+ googleSubTitle: true,
135
+ googleAuthors: true,
136
+ googleDescription: true,
137
+ googleImgSrc: true,
138
+ googleHref: true,
115
139
  },
116
140
  });
117
141
  const existingBooksMap = new Map(existingBooks.map((b) => [b.isbn, b]));
142
+ function arrayEquals(a, b) {
143
+ if (a.length !== b.length)
144
+ return false;
145
+ for (let i = 0; i < a.length; i++) {
146
+ if (a[i] !== b[i])
147
+ return false;
148
+ }
149
+ return true;
150
+ }
118
151
  console.log(`📊 DB に ${existingBooksMap.size} 件の既存書籍があります。`);
119
152
  let insertedCount = 0;
120
153
  let updatedCount = 0;
121
154
  let skippedCount = 0;
122
155
  let errorCount = 0;
123
156
  for (const filePath of files) {
124
- const isbn = basename(filePath, ".md");
157
+ const rawIsbn = basename(filePath, ".md");
158
+ let isbn = rawIsbn;
125
159
  let title = "";
126
160
  let markdown = null;
127
161
  try {
162
+ isbn = makeISBN(rawIsbn);
128
163
  fileIsbns.add(isbn);
129
164
  const content = await readFile(filePath, "utf-8");
130
- ({ title, markdown } = parseBookFile(content));
165
+ const parsed = parseBookFile(content);
166
+ title = parsed.title;
167
+ markdown = parsed.markdown;
131
168
  if (!title) {
132
169
  console.error(`⚠️ タイトルなし: ${basename(filePath)}`);
133
170
  errorCount++;
@@ -141,7 +178,15 @@ async function main() {
141
178
  : existing.imagePath;
142
179
  if (existing.title === title &&
143
180
  existing.markdown === markdown &&
144
- existing.imagePath === expectedImagePath) {
181
+ existing.imagePath === expectedImagePath &&
182
+ existing.rating === parsed.rating &&
183
+ arrayEquals(existing.tags, parsed.tags) &&
184
+ existing.googleTitle === parsed.googleTitle &&
185
+ existing.googleSubTitle === parsed.googleSubTitle &&
186
+ arrayEquals(existing.googleAuthors, parsed.googleAuthors) &&
187
+ existing.googleDescription === parsed.googleDescription &&
188
+ existing.googleImgSrc === parsed.googleImgSrc &&
189
+ existing.googleHref === parsed.googleHref) {
145
190
  skippedCount++;
146
191
  continue;
147
192
  }
@@ -160,7 +205,19 @@ async function main() {
160
205
  else {
161
206
  await prisma.book.update({
162
207
  where: { id: existing.id },
163
- data: { title, markdown, imagePath: newImagePath },
208
+ data: {
209
+ title,
210
+ markdown,
211
+ imagePath: newImagePath,
212
+ rating: parsed.rating,
213
+ tags: parsed.tags,
214
+ googleTitle: parsed.googleTitle,
215
+ googleSubTitle: parsed.googleSubTitle,
216
+ googleAuthors: parsed.googleAuthors,
217
+ googleDescription: parsed.googleDescription,
218
+ googleImgSrc: parsed.googleImgSrc,
219
+ googleHref: parsed.googleHref,
220
+ },
164
221
  });
165
222
  console.log(`🔄 更新: ${isbn} (${title})`);
166
223
  }
@@ -192,7 +249,14 @@ async function main() {
192
249
  exportedAt: exported.exportedAt,
193
250
  userId,
194
251
  createdAt: new Date(),
195
- tags: [],
252
+ rating: parsed.rating,
253
+ tags: parsed.tags,
254
+ googleTitle: parsed.googleTitle,
255
+ googleSubTitle: parsed.googleSubTitle,
256
+ googleAuthors: parsed.googleAuthors,
257
+ googleDescription: parsed.googleDescription,
258
+ googleImgSrc: parsed.googleImgSrc,
259
+ googleHref: parsed.googleHref,
196
260
  },
197
261
  });
198
262
  insertedCount++;
@@ -1 +1 @@
1
- {"version":3,"file":"ingest-books.js","sourceRoot":"","sources":["../src/ingest-books.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ingest-books.js","sourceRoot":"","sources":["../src/ingest-books.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@s-hirano-ist/s-scripts",
3
- "version": "1.21.0",
3
+ "version": "1.22.1",
4
4
  "description": "CLI scripts for s-private data operations",
5
5
  "type": "module",
6
6
  "bin": {
@@ -30,7 +30,8 @@
30
30
  "cleanup-minio-images": "./dist/cleanup-minio-images.js",
31
31
  "fix-image-formats": "./dist/fix-image-formats.js",
32
32
  "fix-book-frontmatter": "./dist/fix-book-frontmatter.js",
33
- "validate-json-articles": "./dist/validate-json-articles.js"
33
+ "validate-json-articles": "./dist/validate-json-articles.js",
34
+ "enrich-books": "./dist/enrich-books.js"
34
35
  },
35
36
  "files": [
36
37
  "dist",
@@ -48,19 +49,23 @@
48
49
  "access": "public"
49
50
  },
50
51
  "dependencies": {
52
+ "@googleapis/books": "8.0.1",
51
53
  "cheerio": "1.2.0",
52
54
  "dprint": "0.54.0",
53
55
  "glob": "13.0.6",
56
+ "gray-matter": "4.0.3",
54
57
  "iconv-lite": "0.7.2",
58
+ "js-yaml": "4.1.1",
55
59
  "sharp": "0.34.5",
56
60
  "turndown": "7.2.4",
57
- "@s-hirano-ist/s-core": "1.18.8",
58
- "@s-hirano-ist/s-notification": "1.18.3",
61
+ "@s-hirano-ist/s-core": "1.19.0",
59
62
  "@s-hirano-ist/s-database": "1.18.6",
63
+ "@s-hirano-ist/s-notification": "1.18.3",
60
64
  "@s-hirano-ist/s-search": "1.18.7",
61
65
  "@s-hirano-ist/s-storage": "1.18.4"
62
66
  },
63
67
  "devDependencies": {
68
+ "@types/js-yaml": "4.0.9",
64
69
  "@types/node": "24.12.2",
65
70
  "@types/turndown": "5.0.6",
66
71
  "tsx": "4.21.0",
@@ -96,6 +101,7 @@
96
101
  "cleanup-minio-images": "tsx src/cleanup-minio-images.ts",
97
102
  "fix-image-formats": "tsx src/fix-image-formats.ts",
98
103
  "fix-book-frontmatter": "tsx src/fix-book-frontmatter.ts",
99
- "validate-json-articles": "tsx src/validate-json-articles.ts"
104
+ "validate-json-articles": "tsx src/validate-json-articles.ts",
105
+ "enrich-books": "tsx src/enrich-books.ts"
100
106
  }
101
107
  }