@nahisaho/katashiro-collector 0.1.0

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 (61) hide show
  1. package/dist/api/api-client.d.ts +70 -0
  2. package/dist/api/api-client.d.ts.map +1 -0
  3. package/dist/api/api-client.js +132 -0
  4. package/dist/api/api-client.js.map +1 -0
  5. package/dist/api/index.d.ts +5 -0
  6. package/dist/api/index.d.ts.map +1 -0
  7. package/dist/api/index.js +5 -0
  8. package/dist/api/index.js.map +1 -0
  9. package/dist/feed/feed-reader.d.ts +70 -0
  10. package/dist/feed/feed-reader.d.ts.map +1 -0
  11. package/dist/feed/feed-reader.js +272 -0
  12. package/dist/feed/feed-reader.js.map +1 -0
  13. package/dist/feed/index.d.ts +5 -0
  14. package/dist/feed/index.d.ts.map +1 -0
  15. package/dist/feed/index.js +5 -0
  16. package/dist/feed/index.js.map +1 -0
  17. package/dist/index.d.ts +17 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +16 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/interfaces.d.ts +53 -0
  22. package/dist/interfaces.d.ts.map +1 -0
  23. package/dist/interfaces.js +9 -0
  24. package/dist/interfaces.js.map +1 -0
  25. package/dist/media/index.d.ts +5 -0
  26. package/dist/media/index.d.ts.map +1 -0
  27. package/dist/media/index.js +5 -0
  28. package/dist/media/index.js.map +1 -0
  29. package/dist/media/media-extractor.d.ts +74 -0
  30. package/dist/media/media-extractor.d.ts.map +1 -0
  31. package/dist/media/media-extractor.js +287 -0
  32. package/dist/media/media-extractor.js.map +1 -0
  33. package/dist/scraper/index.d.ts +5 -0
  34. package/dist/scraper/index.d.ts.map +1 -0
  35. package/dist/scraper/index.js +5 -0
  36. package/dist/scraper/index.js.map +1 -0
  37. package/dist/scraper/web-scraper.d.ts +48 -0
  38. package/dist/scraper/web-scraper.d.ts.map +1 -0
  39. package/dist/scraper/web-scraper.js +144 -0
  40. package/dist/scraper/web-scraper.js.map +1 -0
  41. package/dist/types.d.ts +82 -0
  42. package/dist/types.d.ts.map +1 -0
  43. package/dist/types.js +9 -0
  44. package/dist/types.js.map +1 -0
  45. package/dist/web-search/index.d.ts +8 -0
  46. package/dist/web-search/index.d.ts.map +1 -0
  47. package/dist/web-search/index.js +8 -0
  48. package/dist/web-search/index.js.map +1 -0
  49. package/dist/web-search/web-search-client.d.ts +44 -0
  50. package/dist/web-search/web-search-client.d.ts.map +1 -0
  51. package/dist/web-search/web-search-client.js +131 -0
  52. package/dist/web-search/web-search-client.js.map +1 -0
  53. package/dist/youtube/index.d.ts +5 -0
  54. package/dist/youtube/index.d.ts.map +1 -0
  55. package/dist/youtube/index.js +5 -0
  56. package/dist/youtube/index.js.map +1 -0
  57. package/dist/youtube/youtube-transcript.d.ts +57 -0
  58. package/dist/youtube/youtube-transcript.d.ts.map +1 -0
  59. package/dist/youtube/youtube-transcript.js +228 -0
  60. package/dist/youtube/youtube-transcript.js.map +1 -0
  61. package/package.json +44 -0
@@ -0,0 +1,228 @@
1
+ /**
2
+ * YouTubeTranscript - YouTube字幕・メタデータ取得
3
+ *
4
+ * @requirement REQ-COLLECT-003
5
+ * @design DES-KATASHIRO-001 §2.2 Collector Container
6
+ * @task TSK-012
7
+ */
8
+ import { ok, err, formatTimestamp, } from '@nahisaho/katashiro-core';
9
+ /**
10
+ * YouTube字幕・メタデータ取得実装
11
+ */
12
+ export class YouTubeTranscript {
13
+ userAgent = 'Mozilla/5.0 (compatible; KATASHIRO/0.1.0)';
14
+ /**
15
+ * YouTube URLから動画IDを抽出
16
+ */
17
+ extractVideoId(url) {
18
+ const patterns = [
19
+ // Standard: https://www.youtube.com/watch?v=VIDEO_ID
20
+ /[?&]v=([a-zA-Z0-9_-]{11})/,
21
+ // Short: https://youtu.be/VIDEO_ID
22
+ /youtu\.be\/([a-zA-Z0-9_-]{11})/,
23
+ // Embed: https://www.youtube.com/embed/VIDEO_ID
24
+ /youtube\.com\/embed\/([a-zA-Z0-9_-]{11})/,
25
+ // V format: https://www.youtube.com/v/VIDEO_ID
26
+ /youtube\.com\/v\/([a-zA-Z0-9_-]{11})/,
27
+ ];
28
+ for (const pattern of patterns) {
29
+ const match = url.match(pattern);
30
+ if (match?.[1]) {
31
+ return match[1];
32
+ }
33
+ }
34
+ return null;
35
+ }
36
+ /**
37
+ * 字幕を取得
38
+ */
39
+ async getTranscript(url, language) {
40
+ const videoId = this.extractVideoId(url);
41
+ if (!videoId) {
42
+ return err(new Error('Invalid YouTube URL: Could not extract video ID'));
43
+ }
44
+ try {
45
+ const segments = await this.fetchTranscript(videoId, language);
46
+ return ok(segments);
47
+ }
48
+ catch (error) {
49
+ const message = error instanceof Error ? error.message : 'Unknown error';
50
+ return err(new Error(`Transcript fetch error: ${message}`));
51
+ }
52
+ }
53
+ /**
54
+ * 動画メタデータを取得
55
+ */
56
+ async getVideoMetadata(url) {
57
+ const videoId = this.extractVideoId(url);
58
+ if (!videoId) {
59
+ return err(new Error('Invalid YouTube URL: Could not extract video ID'));
60
+ }
61
+ try {
62
+ const metadata = await this.fetchMetadata(videoId);
63
+ return ok(metadata);
64
+ }
65
+ catch (error) {
66
+ const message = error instanceof Error ? error.message : 'Unknown error';
67
+ return err(new Error(`Metadata fetch error: ${message}`));
68
+ }
69
+ }
70
+ /**
71
+ * 字幕セグメントをテキストにフォーマット
72
+ */
73
+ formatTranscript(segments) {
74
+ if (segments.length === 0) {
75
+ return '';
76
+ }
77
+ return segments
78
+ .map((segment) => {
79
+ const timestamp = this.formatTime(segment.startTime);
80
+ return `[${timestamp}] ${segment.text}`;
81
+ })
82
+ .join('\n');
83
+ }
84
+ /**
85
+ * 秒をMM:SS形式に変換
86
+ */
87
+ formatTime(seconds) {
88
+ const mins = Math.floor(seconds / 60);
89
+ const secs = Math.floor(seconds % 60);
90
+ return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
91
+ }
92
+ /**
93
+ * YouTube APIから字幕を取得
94
+ * Note: 本番環境ではyoutube-transcript等のライブラリ使用推奨
95
+ */
96
+ async fetchTranscript(videoId, language) {
97
+ // YouTube字幕取得のため、まず動画ページを取得
98
+ const videoPageUrl = `https://www.youtube.com/watch?v=${videoId}`;
99
+ const response = await fetch(videoPageUrl, {
100
+ headers: {
101
+ 'User-Agent': this.userAgent,
102
+ 'Accept-Language': language ?? 'en',
103
+ },
104
+ });
105
+ if (!response.ok) {
106
+ throw new Error(`HTTP error: ${response.status}`);
107
+ }
108
+ const html = await response.text();
109
+ // ytInitialPlayerResponse から字幕情報を抽出
110
+ const captionsMatch = html.match(/"captions":\s*({.*?"captionTracks".*?})\s*,\s*"videoDetails"/s);
111
+ if (!captionsMatch?.[1]) {
112
+ throw new Error('No captions available for this video');
113
+ }
114
+ try {
115
+ // 字幕トラックURLを取得
116
+ const captionsJson = captionsMatch[1].replace(/\\"/g, '"');
117
+ const captionUrlMatch = captionsJson.match(/"baseUrl":\s*"(https:[^"]+)"/);
118
+ if (!captionUrlMatch?.[1]) {
119
+ throw new Error('Could not find caption URL');
120
+ }
121
+ const captionUrl = captionUrlMatch[1].replace(/\\u0026/g, '&');
122
+ // 字幕XMLを取得
123
+ const captionResponse = await fetch(captionUrl);
124
+ if (!captionResponse.ok) {
125
+ throw new Error('Failed to fetch captions');
126
+ }
127
+ const captionXml = await captionResponse.text();
128
+ return this.parseTranscriptXml(captionXml);
129
+ }
130
+ catch (parseError) {
131
+ throw new Error(`Failed to parse captions: ${parseError instanceof Error ? parseError.message : 'Unknown error'}`);
132
+ }
133
+ }
134
+ /**
135
+ * 字幕XMLをパース
136
+ */
137
+ parseTranscriptXml(xml) {
138
+ const segments = [];
139
+ const textRegex = /<text start="([^"]+)" dur="([^"]+)"[^>]*>([^<]*)<\/text>/g;
140
+ let match;
141
+ while ((match = textRegex.exec(xml)) !== null) {
142
+ const startStr = match[1];
143
+ const durationStr = match[2];
144
+ const textStr = match[3];
145
+ if (startStr && durationStr && textStr !== undefined) {
146
+ const startTime = parseFloat(startStr);
147
+ const duration = parseFloat(durationStr);
148
+ const text = this.decodeHtmlEntities(textStr);
149
+ segments.push({
150
+ text,
151
+ startTime,
152
+ endTime: startTime + duration,
153
+ });
154
+ }
155
+ }
156
+ return segments;
157
+ }
158
+ /**
159
+ * HTMLエンティティをデコード
160
+ */
161
+ decodeHtmlEntities(text) {
162
+ return text
163
+ .replace(/&amp;/g, '&')
164
+ .replace(/&lt;/g, '<')
165
+ .replace(/&gt;/g, '>')
166
+ .replace(/&quot;/g, '"')
167
+ .replace(/&#39;/g, "'")
168
+ .replace(/&apos;/g, "'")
169
+ .replace(/\n/g, ' ')
170
+ .trim();
171
+ }
172
+ /**
173
+ * 動画メタデータを取得
174
+ */
175
+ async fetchMetadata(videoId) {
176
+ const videoPageUrl = `https://www.youtube.com/watch?v=${videoId}`;
177
+ const response = await fetch(videoPageUrl, {
178
+ headers: {
179
+ 'User-Agent': this.userAgent,
180
+ },
181
+ });
182
+ if (!response.ok) {
183
+ throw new Error(`HTTP error: ${response.status}`);
184
+ }
185
+ const html = await response.text();
186
+ // ytInitialPlayerResponse からメタデータを抽出
187
+ const title = this.extractMetaContent(html, 'title') ?? 'Unknown';
188
+ const description = this.extractMetaContent(html, 'description') ?? '';
189
+ const thumbnailUrl = this.extractMetaContent(html, 'thumbnailUrl');
190
+ // 再生時間を抽出
191
+ const durationMatch = html.match(/"lengthSeconds":\s*"(\d+)"/);
192
+ const duration = durationMatch?.[1] ? parseInt(durationMatch[1], 10) : undefined;
193
+ return {
194
+ type: 'video',
195
+ title,
196
+ description,
197
+ thumbnailUrl: thumbnailUrl ?? undefined,
198
+ duration,
199
+ sourceUrl: videoPageUrl,
200
+ fetchedAt: formatTimestamp(),
201
+ };
202
+ }
203
+ /**
204
+ * メタタグからコンテンツを抽出
205
+ */
206
+ extractMetaContent(html, property) {
207
+ const patterns = [
208
+ new RegExp(`<meta[^>]+property="og:${property}"[^>]+content="([^"]*)"`, 'i'),
209
+ new RegExp(`<meta[^>]+name="${property}"[^>]+content="([^"]*)"`, 'i'),
210
+ new RegExp(`<meta[^>]+itemprop="${property}"[^>]+content="([^"]*)"`, 'i'),
211
+ ];
212
+ for (const pattern of patterns) {
213
+ const match = html.match(pattern);
214
+ if (match?.[1]) {
215
+ return this.decodeHtmlEntities(match[1]);
216
+ }
217
+ }
218
+ // タイトルは<title>タグからも取得
219
+ if (property === 'title') {
220
+ const titleMatch = html.match(/<title[^>]*>([^<]+)<\/title>/i);
221
+ if (titleMatch?.[1]) {
222
+ return titleMatch[1].replace(/ - YouTube$/, '').trim();
223
+ }
224
+ }
225
+ return null;
226
+ }
227
+ }
228
+ //# sourceMappingURL=youtube-transcript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"youtube-transcript.js","sourceRoot":"","sources":["../../src/youtube/youtube-transcript.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@nahisaho/katashiro-collector",
3
+ "version": "0.1.0",
4
+ "description": "KATASHIRO Collector - 情報収集パッケージ",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "scripts": {
18
+ "build": "tsc",
19
+ "clean": "rm -rf dist",
20
+ "test": "vitest run",
21
+ "test:watch": "vitest"
22
+ },
23
+ "dependencies": {
24
+ "@nahisaho/katashiro-core": "*"
25
+ },
26
+ "keywords": [
27
+ "katashiro",
28
+ "collector"
29
+ ],
30
+ "author": "nahisaho",
31
+ "license": "MIT",
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "https://github.com/nahisaho/katashiro.git",
35
+ "directory": "packages/collector"
36
+ },
37
+ "publishConfig": {
38
+ "access": "public"
39
+ },
40
+ "homepage": "https://github.com/nahisaho/katashiro#readme",
41
+ "bugs": {
42
+ "url": "https://github.com/nahisaho/katashiro/issues"
43
+ }
44
+ }