외부에서 수집한 Feed를 특정 컨텐츠 타입으로 노드화하기 : FeedAPI 모듈

외부에서 수집한 블로그 Feed를 특정 컨텐츠 타입으로 노드화하기 : FeedAPI 모듈.

Aggregator 모듈은 RSS 등으로 수집한 블로그 피이드를, 카테고리별로 혹은 Feed별로 모아서 출력해 주는 기본 모듈이다.
이 모듈은 단순하면서도 강력하다. 하지만 몇몇 단점이 있다.
그냥 쓰기에는 이래저래 세팅할 것이나 커스터마이징할 게 너무 많다.
그래서 본 문서의 관련글로 Aggregator 모듈의 튜닝팁 ㅇㅇ탄 이런식으로 글도 몇 번 썼다.
또한 Aggregator를 대체하려는 여러 모듈들이 있는 형국이다.

그럼에도 불구하고, 드루지기들은 Aggregator를 좋아한다.
이 모듈이 기본으로 드루팔에 들어간 뭔가 이유가 필시 있을 것 같은데...
아직 확실한 이유는 모르지만, Aggregator 모듈만큼 RSS 피이드를 야무지게 다루는 모듈이 드물다는 점일지도... 사실 다른 여러 모듈들을 써 봤지만, 기능은 많아도 버그 또한 많아서 싫었다.

이런 와중에, 개발자들인 드루지기들에게 최대의 난관이 다가왔다.
블로그 피이드를 특정 노드(예:컨텐츠 타입 중의 하나)로 변환해야 하는 과제가 나타났다.
아시다시피 Aggregator 모듈은 심플한 만큼 부가적인 통제가 잘 안된다.
하다못해 최고의 모듈인 Views 조차도 아주 단순하게 피이드를 참조할 뿐이다.

블로그 피이드를 100% 통제할 수 있는 뭔가가 없을까 계속해서 찾아본 드루지기들은,
마침내 FeedAPI라는 멋진 놈을 찾아냈다.
http://drupal.org/project/feedapi

이 모듈은 우리가 찾고 있던 "피이드 아이템들의 노드화" 기능을 가지고 있었다. 더 자세한 설명은 차후에 추가하리라 약속드리며, 우선 외국의 드루팔러들이 만든 FeedAPI관련의 동영상을 소개한다.

http://www.screencast.com/users/alex_b/folders/Jing/media/1f7e2581-acd4-...

(위 동영상 주소가 나중에 사라질지도 모른다는 생각이 든다. 웹에서 이 동영상을 플레이하기 위해서는 QuickTime 플러그인 설치가 필요하다)

참고로, 이 모듈을 이용하면 단순히 피이드를 노드화하는 것 이외에도 각각의 카테고리(분류화, Taxonomy) 설정과 상속도 가능하다.

Your rating: None 평균 : 4.5 (2 votes)

댓글

Aggregator 모듈과

Aggregator 모듈과 충돌이 날 수 있으므로, FeedAPI를 활성화할 때, Aggregator 모듈은 비활성화한다.

* 위 댓글의 SafeHTML

* 위 댓글의 SafeHTML 이라는 모듈에 관한 설명은 제일 아래 쪽의 "이 글과 관련이 있나요?" 항목을 찾아보면 된다.

* (세월이 흘러) 위 문제 - 이 FeedAPI 모듈을 이용해서 노드화할 때의 단점은,
기본 입력형식이 Filtered HTML로 되어서 원격으로 불러오는 RSS 피이드 데이터가 엉망으로 보인다는 것 - 는 이렇게도 해결된다.

ㅁ admin/settings/feedapi 메뉴에서 불량스러운? HTML 태그를 삭제, 해당 태그를 빼고 피이드 내용을 접수하면 되겠다. 하지만 이는 원본을 심히 훼손하게 된다.

ㅁ 더 좋은 방법은 일단 다 접수하고 난 다음에, ConTemplate 모듈을 이용해서 노드화된 피이드 자료의 RSS 와 본문을 Rendering 하는 것이다. 이에 관한 자세한 내용은 본 사이트의 검색란에서 "ConTemplate"로 찾아보면 나온다.

leech 라는 모듈이

leech 라는 모듈이 피이드를 노드화할 수 있다.
하지만 이 모듈은 버전6에서부터 FeedAPI에 통합된다.

RSS를 노드화 할 때,

RSS를 노드화 할 때, RSS의 피드 종류에 따라 자동적으로
카테고리를 지정, 나중에 Taxonomy에 의한 태그 분류를
하고 싶다면, Feed Element Mapper 모듈을 사용하면 된다.

Feed Element Mapper 모듈
http://drupal.org/project/feedapi_mapper

위 모듈을 설치/활성화한 후, 해당 Feed 정보 편집에 가서
이미 설정돼 있는 카테고리 단어를 선택하면 된다.
카테고리 단어(Taxonomy)가 하나도 없다면 아래 주소에서 추가할 수 있다.

admin/content/taxonomy

* 이때 중요한 것은 Feed를 읽어서 노드화 된 것들은 또다른
컨텐츠 타입이므로 원래 Feed 아이템의 Taxonomy 속성을
하위의 노드화된 RSS items에도 전파하지 않으면 안된다!
그러므로, 해당 Feed 컨텐츠의 타입 설정에서 FeedAPI inherit ... 항목에도
체크표시를 클릭/활성화하자.
이미 예전부터 취득돼 있던 RSS 노드들은 뒤늦게 작성한 Taxonomy가 안먹는다.
이런 경우에는 기존 Feed items를 모두 삭제한 다음(RSS의 최신건수에 주의 바람!),
새로 Refresh를 하면 전에 없던 Taxonomy 카테고리 분류가 생성된다.

Feed Element Mapper

Feed Element Mapper 모듈은,
http://drupal.org/project/feedapi_mapper
외부로부터 입수되는 RSS 정보의 특정 부분을
노드화되는 컨텐츠의 특정 CCK Field에 배당하는 역할이다.

맵핑할 수 있는 항목으로는,
title:
options->original_url:
options->timestamp:
options->guid:
options->original_author->name:
options->original_author->link:
options->original_author->email
options->original_author:
options->domains:
options->tags:
options->raw->title:
options->raw->link:
options->raw->category:
options->raw->pubDate:
options->raw->guid:
options->raw->description:
options->raw:
options:
가 있다. 2009년 3월 기준의 6.x 버전대를 참고했다.

FeedAPI로 생성된

FeedAPI로 생성된 Feeds를 정기적으로 갱신(Refresh)하려면,
CRON을 이용해야 한다. 드루팔을 설치할 때 크론을 제대로 설정했다면
별다른 설정 없이도 Feeds가 정기적으로 갱신된다.

하지만 CRON설정이 불가능한 상황이라면,
poormanscron 모듈을 이용하기도 한다.

그런데 아쉽게도 이 모듈이 2008년말 기준으로
FeedAPI 모듈과 맞지 않아 Feeds 자동 갱신이 되지 않는다는 보고가 있다.

Poormanscron and FeedAPI don't work together | drupal.org
http://drupal.org/node/255852

다른 해결책으로는 webcron이나 cronjobs.org 사이트 등을 이용해서
드루팔설치주소/cron.php 를 정기적으로 원격 콜 하는 것인데 유료가 많고
보안상 좋지 않은 것 같다.

이래저래 FeedAPI와 PoormansCron은 궁합이 현재 좋지 않다.
개인적으로는 하루 한번씩 Selenium이라는 개발용 테스트툴로
Feeds를 갱신하는 사이트가 있다. 이 사이트 역시 이 문제를 겪고 있다.