내부 구조
작동 방식, 그리고 멈추는 지점
마법 같은 것은 없습니다. 추출 과정은 서버를 호출하지 않습니다. 확장 프로그램이 통신하는 유일한 주소는 저희 통계 엔드포인트입니다. 전체 과정은 보고 있는 페이지 안에서 수십 밀리초 만에 실행됩니다.
기사 찾기
먼저 기사가 흔히 들어 있는 뚜렷한 컨테이너를 찾습니다. 그런 컨테이너가 없으면(실제 사이트에는 없는 경우가 많습니다) 텍스트 밀도를 측정하는 방식으로 넘어갑니다. 링크 안에 있지 않은 문단 텍스트를 가장 많이 담은 블록이 어디인지 봅니다. 그 텍스트를 거의 전부 담은 블록 중 가장 좁은 블록이 선택됩니다.
텍스트의 대부분이 링크 텍스트인 블록은 기사가 아니라 메뉴나 피드이므로 제외됩니다. 다만 실제 텍스트가 약 1200자를 넘으면 예외입니다. 긴 기사에는 링크가 많은 것이 자연스럽기 때문입니다.
부가 요소 걷어 내기
다음으로 콘텐츠가 아닌 것으로 알려진 요소를 제거합니다. 내비게이션, 배너, 공유 버튼 줄, 쿠키 안내, 페이지네이션, “함께 읽을 기사” 피드, 로고 띠입니다. 반복되는 줄도 지웁니다. 섹션마다 반복되는 내비게이션이 클리핑한 페이지에서 가장 큰 잡음이기 때문입니다.
다른 클리퍼가 남기는 것
[본문 바로가기](#main) [로그인](/login) [회원가입](/register) [홈](/) [뉴스](/news) [스포츠](/sport) [문화](/culture) [더보기](/more) 사용자 경험을 개선하기 위해 쿠키 및 유사 기술을 사용합니다. [모두 허용] [설정 관리] # 읽으러 온 바로 그 기사 실제 본문의 첫 문단입니다. <div class="promo-inline"> ## 함께 읽을 기사 [다른 헤드라인](/a) [헤드라인 하나 더](/b) [세 번째 헤드라인](/c)
노트에 들어가는 것
# 읽으러 온 바로 그 기사 실제 본문의 첫 문단입니다.
변환
표는 범용 플러그인이 아니라 확장 프로그램이 직접 직렬화합니다. 범용 변환기는 셀에 목록이나 코드 블록이 있으면 깨지기 때문입니다. 코드 블록의 언어는 페이지 자체의 마크업에서 가져옵니다. 참조 링크는 새니타이저가 링크가 기대는 id를 지우기 전에 Markdown 각주로 모읍니다. 순서가 중요하며, 순서가 틀리면 각주가 모두 조용히 사라집니다.
멈추는 지점
쇼핑몰 진열 페이지, 피드, 검색 결과에는 기사가 없습니다. 확장 프로그램은 완성된 Markdown을 검사해서 4분의 1 이상이 링크 텍스트 안에 있으면 링크 300개를 넘기는 대신 “기사 없음”을 알립니다. 이 거절은 의도된 것이며, 항상 무언가를 돌려주는 도구보다 여기서 글자 수가 적게 나오는 이유이기도 합니다.
하지 않는 일
- 이미지, 동영상 등 바이너리 자산을 내려받지 않습니다. 이미지 링크는 원래 사이트를 가리킵니다
- 크롤링하지 않습니다. 지금 보고 있는 페이지 하나씩 처리합니다
- 요약하거나 다시 쓰지 않습니다. 기사 텍스트는 변환될 뿐 편집되지 않습니다
chrome://나 확장 프로그램 스토어처럼 브라우저가 보호하는 페이지에서는 실행되지 않습니다