Families.AutoWriter 1.0.0.0
Families 콘텐츠를 반복 작업 없이 작성·등록하도록 돕는 자동화 작성 도구입니다.
로딩중...
검색중...
일치하는것 없음
ResponseExtractor.cs
이 파일의 문서화 페이지로 가기
2
11public static class ResponseExtractor
12{
29 public static string BuildExtractScript() => """
30 (function() {
31 // 응답 영역에서 텍스트를 추출하는 함수
32 // completed: 마지막 섹션인 ===VIDEO=== 까지 나와야 완료
33 function makeResult(source, text) {
34 // 시작 마커(===TITLE=== 또는 ===DETAIL_*_TITLE===)와
35 // 종료 마커(===VIDEO===)가 모두 있어야 완료로 판정
36 // → 이전 대화 텍스트가 섞여 오탐되는 것 방지
37 const hasEnd = text.includes('===VIDEO===');
38 const hasStart = text.includes('===TITLE===') || /===DETAIL_\S+_TITLE===/.test(text);
39 const completed = hasEnd && hasStart;
40 return JSON.stringify({ source, text, completed });
41 }
42
43 // ── ChatGPT (다중 셀렉터 폴백) ────────────────────────────
44 const gptSelectors = [
45 '[data-message-author-role="assistant"]',
46 'article[data-testid*="conversation-turn"]:not([data-testid*="user"])',
47 '.agent-turn',
48 'div[class*="agent-turn"]',
49 '[data-role="assistant"]',
50 ];
51 for (const sel of gptSelectors) {
52 const msgs = document.querySelectorAll(sel);
53 if (msgs.length > 0) {
54 const last = msgs[msgs.length - 1];
55 const prose = last.querySelector('.prose')
56 ?? last.querySelector('[class*="markdown"]')
57 ?? last.querySelector('div[class*="prose"]')
58 ?? last;
59 const text = prose.innerText.trim();
60 if (text.length > 10) return makeResult('chatgpt', text);
61 }
62 }
63
64 // ── Claude.ai ──────────────────────────────────────────────
65 for (const sel of ['[data-testid="assistant-message"]', '.font-claude-message', '.prose']) {
66 const msgs = document.querySelectorAll(sel);
67 if (msgs.length > 0) {
68 const text = msgs[msgs.length - 1].innerText.trim();
69 if (text.length > 10) return makeResult('claude', text);
70 }
71 }
72
73 // ── Gemini ─────────────────────────────────────────────────
74 const geminiMsgs = document.querySelectorAll('model-response, .response-container, .model-response-text');
75 if (geminiMsgs.length > 0) {
76 const text = geminiMsgs[geminiMsgs.length - 1].innerText.trim();
77 if (text.length > 10) return makeResult('gemini', text);
78 }
79
80 // 아직 응답 없음
81 return JSON.stringify({ source: 'unknown', text: '', completed: false });
82 })()
83 """;
84}