기본 콘텐츠로 건너뛰기

'Zend Framework 2'에서 RSS/Atom 피드 만들기



뉴스를 구독하는 방법으로 SNS 이용이 많아지면서 예전만큼의 위상은 아니지만 웹페이지의 업데이트 정보를 쉽게 받아보는 방법으로는 해당 사이트에서 제공하는 RSS/Atom 피드를 구독하는 방법이 있습니다. 이번 포스팅에서는 'Zend Framework 2'에서 이런 피드를 만드는 방법을 정리해보겠습니다. 제가 사용하는 'Zend Framework' 버전이 2.4여서 이 버전을 기준으로 작성하였습니다.

'Zend Framework'에서 피드를 생성하기 위해서는 설정에 먼저 추가를 해주어야 하는 것이 있습니다. 'Zend Framework'는 컨트롤러의 액션 메서드에서 최종값으로 데이터와 렌더링 방법을 담고 있는 ViewModel 객체를 리턴하게 되어 있는데 이 ViewModel에는 3가지 있습니다.

  • 첫번째는 기본 ViewModel입니다. 일반적인 웹페이지를 표시할때 사용합니다.
  • 두번째는 JsonModel입니다. JSON 데이터를 리턴할때 사용합니다.
  • 세번째는 FeedModel입니다. 이 포스팅에서 사용할 객체입니다.

이 세가지 객체중 기본값인 ViewModel은 별다른 설정없이 사용이 가능하나 다른 두가지는 다음과 같이 module.config.php에 추가를 해주어야 합니다.

'view_manager' => array(
    …
    'strategies' => array('ViewFeedStrategy'),
    …
),

그리고, 피드를 표시할 컨트롤러에 해당 클래스 사용을 선언합니다. ‘Zend\Feed\Writer\Feed’는 피드 데이터를 처리할 클래스입니다.


use Zend\Feed\Writer\Feed;
use Zend\View\Model\FeedModel;


이제 준비가 되었으니 피드를 생성해보겠습니다.

public function feedAction()
{
    $feed = new Feed();
    // 피드 타이틀.
    $feed->setTitle('...');
    // 피드 홈페이지 링크.
    $feed->setLink('...');
    // 피드 링크.
    $feed->setFeedLink('...', 'atom');
    // 피드 설명.
    $feed->setDescription('...');
   
    // 피드에 표시할 데이터
    $data = …;

    foreach ($data as $key => $value) {
        // 시간.
        $time = …;
        if ($key == 0) {
            // 피드의 변경 시간 설정.
            // 이 부분은 서비스에 따라 처리 방법이 달라집니다.
            $feed->setDateModified($time);
        }
           
        $entry = $feed->createEntry();
        // 엔트리 타이틀.
        $entry->setTitle($value->title);
        // 엔트리 링크.
        $entry->setLink('...');
        // 엔트리 생성시간 및 변경시간.
        $entry->setDateCreated($time);
        $entry->setDateModified($time);
        // 엔트리 내용.
        $entry->setDescription('...');
           
        $feed->addEntry($entry);
    }
       
    $viewModel = new FeedModel();
    $viewModel->setFeed($feed);
    $viewModel->setOption('feed_type', 'atom');
       
    return $viewModel;
}

간단하죠? 실제 서비스에 적용하기 위해 필요한 추가 기능에 대해서는 ‘Zend Framework’ 개발 문서의 ‘Zend\Feed’ 부분을 참고해주시면 됩니다.


===


Project just4fun : http://www.just4fun.kr/



이 블로그의 인기 게시물

구글 결제에서 결제 수단 등록 문제

얼마 전 카드를 새로 만들어서 구글 결제의 결제 수단을 교체하려고 하였는데 카드 번호가 잘못되었다라고 하면서 등록이 되지 않았습니다. 관련해서 검색을 해보니 이런 문제가 흔히 발생하고 있더군요. 저처럼 당황하실 분들을 위해 구글 고객센터와 통화해 해결하면서 알아낸 것들을 공유하겠습니다.

IFTTT의 새로운 앱 'Do'

IFTTT 는 간단하게 정의하면 온라인 자동화 서비스라고 할 수 있습니다. 예를 들면 블로그에 포스팅을 하고 이 글을 SNS에 공유하기 위해서는 일일이 각 SNS마다 직접 공유 포스팅을 하거나 Buffer와 같은 서비스를 사용해 공유 포스팅을 하는 과정을 거쳐야 합니다. IFTTT는 이런 과정없이 블로그에 새로운 글이 등록되면 이것을 IFTTT에서 감지해 자동으로 SNS에 공유 포스팅이 등록되게 해줄 수 있습니다. 블로그를 예로 들었지만 IFTTT는 온라인 서비스들을 사용할때 발생할 수 있는 다양한 상황들을 감지해 자동화해줄 수 있는 편리한 서비스입이다. 이런 IFTTT에서 기존 앱의 이름을 IF로 바꾸고 별도의 새로운 앱인 'Do' 시리즈 를 출시하였습니다.

안드로이드 N의 '프리폼 윈도우 모드(freeform window mode)'

안드로이드 N의 개발자 프리뷰에서 가장 큰 변화는 멀티 윈도우 지원이었습니다. 그런데, 프리뷰가 발표된 이후 숨겨진 옵션으로 단순 멀티 윈도우가 아닌 일반 PC OS들처럼 윈도우의 크기와 위치를 자유롭게 조절할 수 있는 '프리폼 윈도우 모드(freeform window mode)'가 존재한다라는 사실이 알려지게 되었습니다. 이 윈도우 모드는 개발자 프리뷰에서는 활성화되어 있지 않았지만 구글의 공식 문서에도 언급이 되어 있는 옵션이었습니다. 어떤 모습인지 궁금하였던 '프리폼 윈도우 모드'의 작동하는 모습이 담긴 영상이 인터넷에 올라왔습니다.