@zonuexe/techbook-mcp 0.2.3 → 0.2.4

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.
Files changed (135) hide show
  1. package/CHANGELOG.md +15 -1
  2. package/README.md +39 -20
  3. package/dist/adapters/publishers/google-books.d.ts +4 -0
  4. package/dist/adapters/publishers/google-books.d.ts.map +1 -0
  5. package/dist/adapters/publishers/google-books.js +75 -0
  6. package/dist/adapters/publishers/google-books.js.map +1 -0
  7. package/dist/adapters/publishers/isbn-publisher-codes.d.ts +21 -0
  8. package/dist/adapters/publishers/isbn-publisher-codes.d.ts.map +1 -0
  9. package/dist/adapters/publishers/isbn-publisher-codes.js +49 -0
  10. package/dist/adapters/publishers/isbn-publisher-codes.js.map +1 -0
  11. package/dist/adapters/publishers/juse-p.d.ts +3 -0
  12. package/dist/adapters/publishers/juse-p.d.ts.map +1 -0
  13. package/dist/adapters/publishers/juse-p.js +110 -0
  14. package/dist/adapters/publishers/juse-p.js.map +1 -0
  15. package/dist/adapters/publishers/registry.d.ts.map +1 -1
  16. package/dist/adapters/publishers/registry.js +4 -0
  17. package/dist/adapters/publishers/registry.js.map +1 -1
  18. package/dist/application/get-book-by-isbn.d.ts +3 -2
  19. package/dist/application/get-book-by-isbn.d.ts.map +1 -1
  20. package/dist/application/get-book-by-isbn.js +22 -3
  21. package/dist/application/get-book-by-isbn.js.map +1 -1
  22. package/dist/config/credentials.d.ts +8 -0
  23. package/dist/config/credentials.d.ts.map +1 -0
  24. package/dist/config/credentials.js +32 -0
  25. package/dist/config/credentials.js.map +1 -0
  26. package/dist/main.js +15 -1
  27. package/dist/main.js.map +1 -1
  28. package/dist/setup.d.ts +2 -0
  29. package/dist/setup.d.ts.map +1 -0
  30. package/dist/setup.js +43 -0
  31. package/dist/setup.js.map +1 -0
  32. package/flake.lock +61 -0
  33. package/package.json +1 -1
  34. package/.claude/settings.local.json +0 -38
  35. package/.codex/skills/techbook-mcp-release-prep/SKILL.md +0 -105
  36. package/.github/workflows/test.yml +0 -72
  37. package/.oxlintrc.json +0 -12
  38. package/AGENTS.md +0 -100
  39. package/deno.json +0 -3
  40. package/src/adapters/cache/memory-cache.ts +0 -31
  41. package/src/adapters/cache/null-cache.ts +0 -8
  42. package/src/adapters/calil.ts +0 -57
  43. package/src/adapters/html/cheerio-parser.ts +0 -50
  44. package/src/adapters/http/fetch-client.ts +0 -47
  45. package/src/adapters/http/mock-client.ts +0 -77
  46. package/src/adapters/openbd.ts +0 -142
  47. package/src/adapters/publishers/base.ts +0 -279
  48. package/src/adapters/publishers/book-tech.ts +0 -117
  49. package/src/adapters/publishers/born-digital.ts +0 -143
  50. package/src/adapters/publishers/coronasha.ts +0 -139
  51. package/src/adapters/publishers/gihyo.ts +0 -120
  52. package/src/adapters/publishers/impress.ts +0 -103
  53. package/src/adapters/publishers/lambdanote.ts +0 -146
  54. package/src/adapters/publishers/manatee.ts +0 -113
  55. package/src/adapters/publishers/maruzen-publishing.ts +0 -129
  56. package/src/adapters/publishers/optronics.ts +0 -113
  57. package/src/adapters/publishers/oreilly-japan.ts +0 -133
  58. package/src/adapters/publishers/peaks.ts +0 -98
  59. package/src/adapters/publishers/personal-media.ts +0 -168
  60. package/src/adapters/publishers/registry.ts +0 -38
  61. package/src/adapters/publishers/rutles.ts +0 -149
  62. package/src/adapters/publishers/saiensu.ts +0 -136
  63. package/src/adapters/publishers/seshop.ts +0 -121
  64. package/src/adapters/publishers/tatsu-zine.ts +0 -142
  65. package/src/adapters/publishers/techbookfest.ts +0 -179
  66. package/src/application/get-book-by-isbn.ts +0 -50
  67. package/src/application/get-book-detail.ts +0 -40
  68. package/src/application/search-books.ts +0 -64
  69. package/src/domain/book.ts +0 -35
  70. package/src/domain/publisher.ts +0 -18
  71. package/src/main.ts +0 -14
  72. package/src/mcp/server.ts +0 -113
  73. package/src/mcp/tools.ts +0 -71
  74. package/src/ports/cache.ts +0 -5
  75. package/src/ports/html-parser.ts +0 -15
  76. package/src/ports/http.ts +0 -17
  77. package/tests/fixtures/book-tech-detail.html +0 -51
  78. package/tests/fixtures/book-tech-search.html +0 -91
  79. package/tests/fixtures/born-digital-detail.html +0 -62
  80. package/tests/fixtures/born-digital-search.html +0 -51
  81. package/tests/fixtures/calil-book.html +0 -987
  82. package/tests/fixtures/coronasha-detail.html +0 -41
  83. package/tests/fixtures/coronasha-search.html +0 -61
  84. package/tests/fixtures/gihyo-detail.html +0 -42
  85. package/tests/fixtures/gihyo-search.json +0 -54
  86. package/tests/fixtures/impress-detail-epub.html +0 -746
  87. package/tests/fixtures/impress-detail-social.html +0 -689
  88. package/tests/fixtures/lambdanote-search.html +0 -66
  89. package/tests/fixtures/manatee-detail.html +0 -53
  90. package/tests/fixtures/manatee-search.html +0 -59
  91. package/tests/fixtures/maruzen-detail.html +0 -51
  92. package/tests/fixtures/maruzen-search.html +0 -60
  93. package/tests/fixtures/openbd-response.json +0 -110
  94. package/tests/fixtures/optronics-detail.html +0 -30
  95. package/tests/fixtures/optronics-search.html +0 -75
  96. package/tests/fixtures/oreilly-detail.html +0 -52
  97. package/tests/fixtures/oreilly-ebook-list.html +0 -53
  98. package/tests/fixtures/peaks-detail.html +0 -39
  99. package/tests/fixtures/peaks-top.html +0 -50
  100. package/tests/fixtures/personal-media-detail.html +0 -32
  101. package/tests/fixtures/personal-media-search.html +0 -39
  102. package/tests/fixtures/rutles-detail.html +0 -32
  103. package/tests/fixtures/rutles-search.html +0 -62
  104. package/tests/fixtures/saiensu-detail.html +0 -41
  105. package/tests/fixtures/saiensu-search.html +0 -65
  106. package/tests/fixtures/seshop-detail.html +0 -45
  107. package/tests/fixtures/seshop-search.html +0 -58
  108. package/tests/fixtures/tatsu-zine-detail-free.html +0 -24
  109. package/tests/fixtures/tatsu-zine-search.html +0 -40
  110. package/tests/fixtures/techbookfest-search.json +0 -73
  111. package/tests/unit/adapters/base.test.ts +0 -441
  112. package/tests/unit/adapters/calil.test.ts +0 -69
  113. package/tests/unit/adapters/openbd.test.ts +0 -185
  114. package/tests/unit/adapters/publishers/book-tech.test.ts +0 -186
  115. package/tests/unit/adapters/publishers/born-digital.test.ts +0 -194
  116. package/tests/unit/adapters/publishers/coronasha.test.ts +0 -207
  117. package/tests/unit/adapters/publishers/gihyo.test.ts +0 -137
  118. package/tests/unit/adapters/publishers/impress.test.ts +0 -129
  119. package/tests/unit/adapters/publishers/lambdanote.test.ts +0 -85
  120. package/tests/unit/adapters/publishers/manatee.test.ts +0 -165
  121. package/tests/unit/adapters/publishers/maruzen-publishing.test.ts +0 -179
  122. package/tests/unit/adapters/publishers/optronics.test.ts +0 -208
  123. package/tests/unit/adapters/publishers/oreilly-japan.test.ts +0 -194
  124. package/tests/unit/adapters/publishers/peaks.test.ts +0 -177
  125. package/tests/unit/adapters/publishers/personal-media.test.ts +0 -199
  126. package/tests/unit/adapters/publishers/rutles.test.ts +0 -173
  127. package/tests/unit/adapters/publishers/saiensu.test.ts +0 -169
  128. package/tests/unit/adapters/publishers/seshop.test.ts +0 -174
  129. package/tests/unit/adapters/publishers/tatsu-zine.test.ts +0 -172
  130. package/tests/unit/adapters/publishers/techbookfest.test.ts +0 -94
  131. package/tests/unit/adapters/registry.test.ts +0 -37
  132. package/tests/unit/application/get-book-by-isbn.test.ts +0 -176
  133. package/tests/unit/application/get-book-detail.test.ts +0 -102
  134. package/tests/unit/application/search-books.test.ts +0 -137
  135. package/tsconfig.json +0 -17
package/src/mcp/tools.ts DELETED
@@ -1,71 +0,0 @@
1
- export const TOOLS = [
2
- {
3
- name: "search_books",
4
- description:
5
- "書名・著者名から日本語技術書を検索し、書誌情報の一覧を返します。" +
6
- "複数の出版社を横断して検索します。",
7
- inputSchema: {
8
- type: "object",
9
- properties: {
10
- title: {
11
- type: "string",
12
- description: "書名(部分一致)",
13
- },
14
- author: {
15
- type: "string",
16
- description: "著者名(部分一致)",
17
- },
18
- publisher: {
19
- type: "string",
20
- description:
21
- "出版社IDで検索対象を絞り込みます。指定しない場合は全出版社を検索します。" +
22
- "利用可能なIDは list_publishers で確認できます。",
23
- },
24
- limit: {
25
- type: "number",
26
- description: "1出版社あたりの最大取得件数(デフォルト: 10、最大: 50)",
27
- default: 10,
28
- },
29
- },
30
- },
31
- },
32
- {
33
- name: "get_book_detail",
34
- description: "書籍の公式ページURLから詳細な書誌情報を取得します。",
35
- inputSchema: {
36
- type: "object",
37
- required: ["url"],
38
- properties: {
39
- url: {
40
- type: "string",
41
- description: "書籍の公式ページURL(出版社サイトのURL)",
42
- },
43
- },
44
- },
45
- },
46
- {
47
- name: "list_publishers",
48
- description: "対応している出版社の一覧とIDを返します。",
49
- inputSchema: {
50
- type: "object",
51
- properties: {},
52
- },
53
- },
54
- {
55
- name: "get_book_by_isbn",
56
- description:
57
- "ISBNから書誌情報を取得します。" +
58
- "openBDで出版社を特定し、可能であれば出版社サイトから詳細情報を取得します。" +
59
- "出版社サイトから取得できない場合はopenBDのデータを返します。",
60
- inputSchema: {
61
- type: "object",
62
- required: ["isbn"],
63
- properties: {
64
- isbn: {
65
- type: "string",
66
- description: "ISBN-13(ハイフンあり・なし両対応、例: 978-4-908686-20-7)",
67
- },
68
- },
69
- },
70
- },
71
- ] as const;
@@ -1,5 +0,0 @@
1
- export interface CacheStore {
2
- get(key: string): Promise<string | null>;
3
- set(key: string, value: string, ttlSeconds?: number): Promise<void>;
4
- delete(key: string): Promise<void>;
5
- }
@@ -1,15 +0,0 @@
1
- export interface HtmlElement {
2
- text(): string;
3
- html(): string | null;
4
- attr(name: string): string | undefined;
5
- find(selector: string): HtmlElement[];
6
- }
7
-
8
- export interface HtmlDocument {
9
- select(selector: string): HtmlElement[];
10
- selectOne(selector: string): HtmlElement | null;
11
- }
12
-
13
- export interface HtmlParser {
14
- parse(html: string): HtmlDocument;
15
- }
package/src/ports/http.ts DELETED
@@ -1,17 +0,0 @@
1
- export interface RequestOptions {
2
- headers?: Record<string, string>;
3
- timeout?: number;
4
- }
5
-
6
- export interface HttpResponse {
7
- readonly status: number;
8
- readonly url: string;
9
- text(): Promise<string>;
10
- /** ヘッダー値を取得する。複数値は `, ` 結合。存在しない場合は null。 */
11
- header(name: string): string | null;
12
- }
13
-
14
- export interface HttpClient {
15
- get(url: string, options?: RequestOptions): Promise<HttpResponse>;
16
- post(url: string, body: string, options?: RequestOptions): Promise<HttpResponse>;
17
- }
@@ -1,51 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="ja">
3
- <head><meta charset="utf-8"><title>BOOK TECH | 次のステップへ!React実践開発 サクサク作って学ぶ UI/テスト/デプロイ</title></head>
4
- <body>
5
- <div class="contents-base">
6
- <div class="contents-book">
7
- <div class="contents-book-inner">
8
- <div class="contents-book-item">
9
- <div class="contents-book-item-detail-wrap">
10
- <div class="contents-book-item-detail-thumb">
11
- <img src="https://booktech-share.s3-ap-northeast-1.amazonaws.com/books/d80ffe3d.webp" class="thumb" alt="次のステップへ!React実践開発 サクサク作って学ぶ UI/テスト/デプロイ">
12
- </div>
13
- <div class="contents-book-item-detail-price_include_tax">
14
- 2,178円<span class="tax">(税込)</span>
15
- </div>
16
- </div>
17
- </div>
18
-
19
- <div class="contents-book-about">
20
- <div class="contents-book-about-title">
21
- <h1>次のステップへ!React実践開発 サクサク作って学ぶ UI/テスト/デプロイ</h1>
22
- </div>
23
-
24
- <div class="contents-book-about-publicationdate my-1" style="font-size: 0.85em;">
25
- 発売日:
26
- 2026/2/20
27
- </div>
28
-
29
- <div class="d-flex flex-wrap align-items-center gap-1">
30
- <a class="badge bg-light text-dark border" href="/books?q%5Bpublisher_relations_publisher_id_in%5D%5B%5D=4">
31
- <i class="fas fa-building me-1"></i>インプレス NextPublishing
32
- </a>
33
- <a class="badge bg-light text-dark border" href="/books?q%5Bauthor_relations_author_id_in%5D%5B%5D=2205">
34
- <i class="fas fa-user me-1"></i>philosophy (著)
35
- </a>
36
- </div>
37
-
38
- <div class="contents-book-about-id" style="font-size: 0.85em;">
39
- ISBN:
40
- 9784295604136
41
- </div>
42
-
43
- <div class="contents-book-about-description scroll">
44
- TypeScriptによる型安全な開発、各種ホスティングサービスへの公開方法などを解説します。
45
- </div>
46
- </div>
47
- </div>
48
- </div>
49
- </div>
50
- </body>
51
- </html>
@@ -1,91 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="ja">
3
- <head><meta charset="utf-8"><title>BOOK TECH | 「TypeScript」の検索結果</title></head>
4
- <body>
5
- <div class="contents-base">
6
- <div class="contents-index">
7
- <div class="contents-index-wrap">
8
-
9
- <div class="contents-index-item">
10
- <div class="contents-index-item-lang">
11
- <a class="contents-index-item-large-lang-wrap" href="/books?q%5Bbook_category_in%5D%5B%5D=%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BBIT">コンピュータ・IT</a>
12
- </div>
13
- <div class="contents-index-item-detail-wrap">
14
- <div class="contents-index-item-detail">
15
- <div class="contents-index-item-detail-thumb">
16
- <a class="book-ribbon-link" href="/books/d80ffe3d-f3fe-458b-95ee-b4dd3327fab2">
17
- <img src="https://booktech-share.s3-ap-northeast-1.amazonaws.com/books/d80ffe3d.webp" class="thumb" alt="次のステップへ!React実践開発 サクサク作って学ぶ UI/テスト/デプロイ">
18
- </a>
19
- </div>
20
- </div>
21
- <div class="contents-index-item-detail">
22
- <div class="contents-index-item-detail-title">
23
- 次のステップへ!React実践開発 サクサク作って学ぶ UI/テスト/デプロイ
24
- </div>
25
- <div class="my-1" style="font-size: 0.85em;">
26
- 発売日: 2026/2/20
27
- </div>
28
- <div class="d-none d-lg-block d-flex flex-wrap align-items-center gap-1">
29
- <a class="badge bg-light text-dark border" href="/books?q%5Bpublisher_relations_publisher_id_in%5D%5B%5D=4">
30
- <i class="fas fa-building me-1"></i>インプレス NextPublishing
31
- </a>
32
- <a class="badge bg-light text-dark border" href="/books?q%5Bauthor_relations_author_id_in%5D%5B%5D=2205">
33
- <i class="fas fa-user me-1"></i>philosophy (著)
34
- </a>
35
- </div>
36
- <div class="contents-index-item-detail-description scroll">
37
- TypeScriptによる型安全な開発を解説します。
38
- </div>
39
- <div class="contents-index-item-detail-price_include_tax">
40
- <div>
41
- 2,178円<span class="tax">(税込)</span>
42
- </div>
43
- </div>
44
- </div>
45
- </div>
46
- </div>
47
-
48
- <div class="contents-index-item">
49
- <div class="contents-index-item-lang">
50
- <a class="contents-index-item-large-lang-wrap" href="/books?q%5Bbook_category_in%5D%5B%5D=%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BBIT">コンピュータ・IT</a>
51
- </div>
52
- <div class="contents-index-item-detail-wrap">
53
- <div class="contents-index-item-detail">
54
- <div class="contents-index-item-detail-thumb">
55
- <a class="book-ribbon-link" href="/books/a52f6467-5d0c-4d76-9351-19a0ab76eb96">
56
- <img src="https://booktech-share.s3-ap-northeast-1.amazonaws.com/books/a52f6467.webp" class="thumb" alt="React環境構築の教科書">
57
- </a>
58
- </div>
59
- </div>
60
- <div class="contents-index-item-detail">
61
- <div class="contents-index-item-detail-title">
62
- React環境構築の教科書
63
- </div>
64
- <div class="my-1" style="font-size: 0.85em;">
65
- 発売日: 2020/8/21
66
- </div>
67
- <div class="d-none d-lg-block d-flex flex-wrap align-items-center gap-1">
68
- <a class="badge bg-light text-dark border" href="/books?q%5Bpublisher_relations_publisher_id_in%5D%5B%5D=4">
69
- <i class="fas fa-building me-1"></i>インプレス NextPublishing
70
- </a>
71
- <a class="badge bg-light text-dark border" href="/books?q%5Bauthor_relations_author_id_in%5D%5B%5D=107">
72
- <i class="fas fa-user me-1"></i>井手 優太 (著)
73
- </a>
74
- </div>
75
- <div class="contents-index-item-detail-description scroll">
76
- TypeScriptを使ったコンパイル環境を解説します。
77
- </div>
78
- <div class="contents-index-item-detail-price_include_tax">
79
- <div>
80
- 3,300円<span class="tax">(税込)</span>
81
- </div>
82
- </div>
83
- </div>
84
- </div>
85
- </div>
86
-
87
- </div>
88
- </div>
89
- </div>
90
- </body>
91
- </html>
@@ -1,62 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="ja">
3
- <head>
4
- <meta charset="euc-jp">
5
- <title>ボーンデジタルオンラインブックストア</title>
6
- <script>
7
- var Colorme = {"page":"product","shop":{"account_id":"PA01427945","title":"\u30dc\u30fc\u30f3\u30c7\u30b8\u30bf\u30eb\u30aa\u30f3\u30e9\u30a4\u30f3\u30d6\u30c3\u30af\u30b9\u30c8\u30a2","pixel_ids":[]},"basket":{"total_price":0,"items":[]},"customer":{"id":null},"inventory_control":"none","product":{"shop_uid":"PA01427945","id":167400957,"name":"\u3010PDF\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u7248\u3011HTML\u89e3\u4f53\u65b0\u66f8 \u30fc\u4ed5\u69d8\u304b\u3089\u7d10\u89e3\u304f\u672c\u683c\u5165\u9580","model_number":"20220061","stock_num":null,"sales_price":3200,"sales_price_including_tax":3520,"variants":[],"category":{"id_big":2520692,"id_small":0},"groups":[{"id":2072447}],"members_price":3200,"members_price_including_tax":3520}};
8
- </script>
9
- </head>
10
- <body>
11
- <div class="p-product-wrap">
12
- <div class="p-product-heading js-product-fix">
13
- <div class="theiaStickySidebar">
14
- <div class="p-product-heading__unit">
15
- <div class="p-large-image">
16
- <div class="p-large-image__image-wrap c-image-wrap">
17
- <div class="c-image-box js-thumbnail-set">
18
- <img src="https://img07.shop-pro.jp/PA01427/945/product/167400957.png?cmsp_timestamp=20220328140327" alt="" class="c-image-box__image js-lazyload" />
19
- </div>
20
- </div>
21
- </div>
22
- </div>
23
- <div id="cart-form" class="p-product-heading__unit">
24
- <div class="p-cart-form">
25
- <div class="p-cart-form__info">
26
- <div class="p-cart-form__name">
27
- 【PDFダウンロード版】HTML解体新書 ー仕様から紐解く本格入門
28
- </div>
29
- <div class="p-cart-form__price c-product-info__price">
30
- 販売価格&nbsp;3,520円(税込)
31
- </div>
32
- </div>
33
- </div>
34
- </div>
35
- </div>
36
- </div>
37
-
38
- <div class="p-product-body">
39
- <div class="p-product-body-inner">
40
- <div class="p-product-body__model">
41
- 20220061
42
- </div>
43
- <div class="p-product-body__name">
44
- 【PDFダウンロード版】HTML解体新書 ー仕様から紐解く本格入門
45
- </div>
46
- <div class="p-product-body__price">
47
- 販売価格&nbsp;3,520円(税込)
48
- </div>
49
- <div class="p-product-body__description">
50
- 判型:B5判、オール2C<br />
51
- 総ページ数:352ページ<br />
52
- 発売日:2022年4月7日<br />
53
- 著者:太田 良典、中村 直樹<br />
54
- 発行・発売:株式会社 ボーンデジタル<br />
55
- <br />
56
- HTMLによる、HTMLのための、HTMLだけの本。
57
- </div>
58
- </div>
59
- </div>
60
- </div>
61
- </body>
62
- </html>
@@ -1,51 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="ja">
3
- <head><meta charset="euc-jp"><title>ボーンデジタルオンラインブックストア</title></head>
4
- <body>
5
- <ul class="c-product-list">
6
-
7
- <li class="c-product-list__item">
8
- <a href="?pid=167400957" class="c-product-list__image-wrap c-image-wrap c-image-wrap--link">
9
- <div class="c-image-box">
10
- <img src="https://img07.shop-pro.jp/PA01427/945/product/167400957_th.png?cmsp_timestamp=20220328140327" alt="【PDFダウンロード版】HTML解体新書 ー仕様から紐解く本格入門" class="c-image-box__image js-lazyload" />
11
- </div>
12
- </a>
13
- <a href="?pid=167400957" class="c-product-list__name">
14
- 【PDFダウンロード版】HTML解体新書 ー仕様から紐解く本格入門
15
- </a>
16
- <div class="c-product-info__price c-product-list__price">
17
- 3,520円(税込)
18
- </div>
19
- </li>
20
-
21
- <li class="c-product-list__item">
22
- <a href="?pid=144269584" class="c-product-list__image-wrap c-image-wrap c-image-wrap--link">
23
- <div class="c-image-box">
24
- <img src="https://img07.shop-pro.jp/PA01427/945/product/144269584_th.jpg?cmsp_timestamp=20190920142519" alt="【電子書籍版】インクルーシブHTML+CSS &amp; JavaScript" class="c-image-box__image js-lazyload" />
25
- </div>
26
- </a>
27
- <a href="?pid=144269584" class="c-product-list__name">
28
- 【電子書籍版】インクルーシブHTML+CSS &amp; JavaScript
29
- </a>
30
- <div class="c-product-info__price c-product-list__price">
31
- 2,640円(税込)
32
- </div>
33
- </li>
34
-
35
- <li class="c-product-list__item">
36
- <a href="?pid=167401111" class="c-product-list__image-wrap c-image-wrap c-image-wrap--link">
37
- <div class="c-image-box">
38
- <img src="https://img07.shop-pro.jp/PA01427/945/product/167401111_th.png?cmsp_timestamp=20220328141320" alt="HTML解体新書 ー仕様から紐解く本格入門" class="c-image-box__image js-lazyload" />
39
- </div>
40
- </a>
41
- <a href="?pid=167401111" class="c-product-list__name">
42
- HTML解体新書 ー仕様から紐解く本格入門
43
- </a>
44
- <div class="c-product-info__price c-product-list__price">
45
- 3,520円(税込)
46
- </div>
47
- </li>
48
-
49
- </ul>
50
- </body>
51
- </html>