에펨코리아(FMKorea) 추출 규칙
에펜코리아(fmkorea.com) 게시글의 본문을 Shorts 패널에서 볼 수 있는 블록 구조로 변환하는 규칙입니다.
게시글의 루트 컨테이너인 #bd_capture를 기준으로 이미지·동영상·텍스트를 분리 추출하고, 비디오 플레이어 컨트롤 같은 노이즈를 깔끔하게 걸러냅니다.
URL 매칭
아래 정규식으로 에펜코리아 사이트와 개별 게시글을 판별합니다.
| 항목 | 패턴 / 조건 |
|---|---|
| 사이트 매칭 | /https?:\/\/(www\.)?fmkorea\.com\//i |
| 게시글 매칭 | 베스트(/best/) 경로, 숫자 document_srl, 또는 쿼리에 document_srl= 포함 여부로 판단합니다 |
주요 선택자와 Root
본문 추출의 출발점이 되는 루트 컨테이너는 #bd_capture입니다.
#bd_capture .xe_content가 존재하면 이 요소를 본문 영역으로 우선 사용합니다.- 없으면
#bd_capture루트 자체를 본문으로 간주합니다. - 제목은
h1,h2,h3태그에서 추출하고, 찾지 못하면document.title을 폴백으로 사용합니다.
처리 순서
콘텐츠 추출은 비디오 유무에 따라 다른 파이프라인을 탕니다.
비디오가 있는 경우
- 본문 내 모든 비디오의 src를 수집하고 중복을 제거한 뒤, 순서대로
video블록을 먼저 추가합니다. - 마지막 비디오 이후에 있는 실제 텍스트만 추출합니다. 이때 플레이어 컨트롤에서 나오는 재생 시간(
00:12 / 01:34)이나 배속(1.00x) 같은 텍스트는 노이즈로 판단해 제거합니다.
비디오가 없는 경우
전통적인 DOM Walk 방식으로 처리합니다.
- 이미지, 비디오,
pre태그를 만나면 즉시 flush하고 블록으로 분리합니다. p태그 경계에서 문단을 나누고, 간격용<br>은 최대 2개까지만 허용합니다.- 중복 텍스트나 이미지는 Set으로 관리해서 제거합니다.
src 정규화
//로 시작하는 경로에는 프로토콜을, /로 시작하는 경로에는 origin을 붙여서 정상적인 절대 URL로 만듭니다.
노이즈 필터링
에펜코리아 특유의 비디오 플레이어 UI에서 발생하는 노이즈를 걸러내는 것이 이 규칙의 핵심 중 하나입니다.
- 비디오 컨트롤에서 추출되는 시간 표기(
00:12 / 01:34), 재생 속도(1.00x) 등의 텍스트를 패턴 매칭으로 제거합니다. - 빈 문단과 중복 문단을 제거하고, 연속 개행은 최대 2개로 축소합니다.
Hooks
에펜코리아 규칙에는 두 가지 Hook이 있습니다.
| Hook | 동작 |
|---|---|
prePrepare | 원본 페이지의 비디오 자동재생을 중지하고, 현재 볼륨 값을 스냅샷으로 저장합니다. 쇼츠 패널이 열릴 때 원본 비디오와 소리가 겨치는 것을 방지하기 위해서입니다. |
postShortsMounted | 쇼츠 패널의 비디오에 autoplay를 적용하고, 아까 저장해 둔 원본 볼륨을 복원합니다. 가능하면 음소거도 해제를 시도합니다. |
반환 예시
최종적으로 아래와 같은 구조의 데이터가 반환됩니다.
json
{
"title": "게시글 제목",
"blocks": [
{ "type": "video", "src": "https://...mp4", "poster": "" },
{ "type": "image", "src": "https://...jpg", "alt": "" },
{ "type": "html", "html": "문단1<br>문단2" }
]
}한계 / 주의
알아두세요
- 투표나 위젯 같은 복잡한 embed 콘텐츠는 현재 통째로 건너뜁니다.
- iframe 내부의 콘텐츠는 추출 대상이 아닙니다.
- 에펜코리아 측에서 레이아웃을 변경해
#bd_captureID 이름이 바뀌면 규칙 수정이 필요합니다.
개선 아이디어
- 코드 하이라이트: 코드블록(
pre > code)에 syntax highlighting을 적용하면 개발 관련 게시글의 가독성이 좋아질 것입니다. - ALT 정리 확대: 이미지 ALT 텍스트가 해시값이나 의미 없는 문자열일 때 걸러내는 heuristic을 더 넓히면 좋겠습니다.
- 비디오 썸네일 생성: poster 이미지가 없는 비디오에 대해 첫 프레임을 캐처해서 썸네일로 사용하는 기능도 고려해 볼 만합니다.