개요
revolution/laravel-fullfeed는 피드 리더용으로 웹 페이지에서 본문을 추출하는 Laravel 패키지입니다.사이트별 룰(JSON)을 사용하여 각 기사에 필요한 콘텐츠를 추출합니다.
원래는 프라이빗한 피드 리더 앱에서 사용되던 기능이 분리되어 공개 패키지화되어 있습니다.
요구 사항
- PHP >= 8.4(
Dom\HTMLDocument를 이용) - Laravel >= 12.x
설치
설정 파일과 사이트 정의 공개
config/fullfeed.phpresources/fullfeed
정의 파일 자동 갱신(composer post-update-cmd)
composer update 시에 사이트 정의를 자동으로 재공개하려면 composer.json에 다음을 추가합니다.
기본적인 사용법
테스트
FullFeed::expects()로 Facade를 스텁할 수 있습니다.
사이트 룰 파일
items_all.json
items_all.json은 LDRFullFeed(wedata) 형식의 룰을 가져오기 위한 베이스입니다.Livedoor Reader는 일본에서 유명한 서비스였지만 서비스 자체는 종료되었으며, 현재는 룰 데이터가 주로 자산으로 남아 있습니다. FullFeed는 이 역사적인 데이터 형식을 활용합니다.
plus.json
plus.json은 자체 룰 추가용 샘플입니다.
룰 설정 필드
url: 대상 URL에 매칭시키는 정규 표현식selector: CSS 셀렉터(xpath보다 우선)xpath: XPath 지정enc: 문자 코드 변환이 필요한 경우의 인코딩 지정callable: 전처리로 실행할 자체 Extractor 클래스(단일/배열)after_callable: 후처리로 마지막에 실행할 Extractor 클래스
Pipeline 패턴으로서의 Extractor 실행 순서
FullFeed는 Laravel의 Pipeline 패턴으로, Extractor를 순서대로 흘려보냅니다.callable에서 지정한 클래스XPathExtractorSelectorExtractorafter_callable에서 지정한 클래스
내장 Extractor
RemoveElements
지정한 셀렉터의 요소를 삭제합니다.ReplaceMatches
정규 표현식으로 일치한 문자열을 치환합니다(HTML 문자열에 대해 처리).StripTags
strip_tags() 상당으로 태그를 제거합니다.
Squish
Str::squish()로 여분의 공백을 제거합니다.
자체 룰 추가
resources/fullfeed에 JSON 파일을 추가config/fullfeed.php의paths에 추가
data.url에 가장 먼저 매칭한 룰이 사용되므로, 추가 파일은 paths의 맨 앞에 두는 것을 권장합니다.