기본 콘텐츠로 건너뛰기

'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/



이 블로그의 인기 게시물

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

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

넥서스 4 : 레퍼런스 그 이상의 폰

LTE 버전을 기대했는데 3G 폰으로 나와 고민을 하게 한 넥서스4(넥포). 기존에 사용하던 넥서스S(넥스)가 이젠 성능의 한계를 확실하게 보여주고 있어 다음 넥서스폰은 LTE로 나올 것을 기대하면 1년 정도 사용할 생각으로 구입했습니다. 지난 주 월요일에 받아 일주일 정도 사용해본 느낌을 정리해보겠습니다. 넥포의 스펙을 정리해 보면 아래와 같습니다. 4.7인치 화면 1280 x 768 해상도 8백만 화소 후면 카메라, 1.3백만 화소 전면 카메라 3G 모바일 네트워크 (HSPA+ 지원) 무선 충전 SlimPort HDMI 내장 저장공간 8G/16G 2G 메모리 퀄컴 스냅드래곤 S4 프로 (쿼드코어) 폰의 스펙은 LG 옵티머스G를 베이스로 만들어진 폰이라 현재 기준으로 부족한 점이 없습니다. 충분히 빠르고 충분히 여유롭게 안드로이드 4.2를 구동할 수 있는 폰이죠. 스펙에서 흥미로운 것은 무선 충전과 SlimPort HDMI 입니다. 무선충전은 WCP Qi 규격이라 아직 발매가 되지 않은 전용 충전기 이외에도 호환되는 제품으로는 충전이 된다고 하는데 7만원 정도에 호환 제품을 구매할 수 있더군요. SlimPort HDMI는 넥포의 마이크로 USB 포트에 어댑터를 연결해 HDMI 출력을 지원하는 것입니다. 넥스를 사용하다 넥포를 사용하면서 느껴지는 것은 당연히 빠르다입니다. 안드로이드라는 플랫폼이 하드웨어 스펙은 'more and more' 불필요하다할 정도로 높은 것이 좋다라는 것을 다시 체감하는 순간이었습니다. 적어도 체감 성능면에서는 아이폰을 포함해 다른 폰에 밀릴 것이 없는 넥포입니다. 손에 잡히는 느낌은 처음에는 좋은 편이 아닙니다. 4.7인치라 화면이 큰 것도 있지만 뒷면까지 유리로 되어 있어 아이폰4를 처음 잡아보았을 때 느껴지는 손에 착 달라붙지 못하고 미끄러지는 듯한 느낌을 넥포에서도 느낄 수 있었습니다. 그나마 아이폰4와는 달리 테두리가 부드러운 재질이라 그립감에

Pop!_OS 18.04 : 청출어람

사용하고 있던 우분투 18.04가 절전 모드 전환이 한번에 안되는 문제가 있고 유니티의 망령에서 벗어나지 못하고 있는 우분투가 실망스러워 대안을 찾아보다가 설치한 Pop!_OS 입니다. 우분투 베이스의 배포판이지만 저의 경우는 우분투보다 마음에 들어서 간단 리뷰를 써보겠습니다.