묻고답하기

위젯 RSS리더 #7을 사용하고 있습니다.

다름이 아니라 RSS리더는 설정창에서 RSS주소 한개만 선택할 수 있는데 이걸 여러개의 RSS주소를 등록할 수 있는 방법이 궁굼합니다.


먼저 info.xml에...

        <var id="rss_url1">
            <type>text</type>
            <name xml:lang="ko">피드(RSS/ATOM) 주소</name>
        </var>
        <var id="rss_url2">
            <type>text</type>
            <name xml:lang="ko">피드(RSS/ATOM) 주소</name>
        </var>
        <var id="rss_url3">
            <type>text</type>
            <name xml:lang="ko">피드(RSS/ATOM) 주소</name>
        </var>
        <var id="rss_url4">
            <type>text</type>
            <name xml:lang="ko">피드(RSS/ATOM) 주소</name>
        </var>

여러개의 피드주소 입력창을 등록했습니다.


문제는 rss_reader.class.php 파일입니다.

제가 php의 지식이 전무합니다. ㅠㅠ


아래의 소스중 어느곳을 고쳐야 여러개의 RSS주소를 등록할 수 있을까요?

꼴좀 알려주세요.ㅜㅜ

<?php
    /**
     * @class rss_reader
     * @author Simulz (k10206@naver.com)
     * @brief RSS Reader
     **/

    set_include_path("./libs/PEAR");
    require_once('PEAR.php');
    require_once('HTTP/Request.php');

    class rss_reader extends WidgetHandler {

       /**
         * @brief rss 주소로 부터 내용을 받아오는 함수
         *
         * tistory 의 경우 원본 주소가 location 헤더를 뿜는다.(내용은 없음) 이를 해결하기 위한 수정
         **/
        function rss_request($rss_url) {
            // request rss
            $rss_url = Context::convertEncodingStr($rss_url);
            $URL_parsed = parse_url($rss_url);
            if(strpos($URL_parsed["host"],'naver.com')) $rss_url = iconv('UTF-8', 'euc-kr', $rss_url);
            $rss_url = str_replace(array('+ '+ '%2F','%3F','%3A','%3D','%3B','%26'),array('/','?',':'+ ','=',';','&'),urlencode($rss_url));

            $URL_parsed = parse_url($rss_url);

            $host = $URL_parsed["host"];
            $port = $URL_parsed["port"];

            if ($port == 0) $port = 80;

            $path = $URL_parsed["path"];

            if ($URL_parsed["query"] != '') $path .= "?".$URL_parsed["query"];

            $oReqeust = new HTTP_Request($rss_url);
            $oReqeust->addHeader('Content-Type', 'application/xml');
            $oReqeust->addHeader('User-agent', '+ 'RSS Reader Widget (XE '.__ZBXE_VERSION__.' (http://www.xpressengine.com); PEAR HTTP_Request class (http://pear.php.net))');
            $oReqeust->setMethod('GET');

            $user = $URL_parsed["user"];
            $pass = $URL_parsed["pass"];

            if($user) $oReqeust->setBasicAuth($user, $pass);

            $oResponse = $oReqeust->sendRequest();
            if (PEAR::isError($oResponse)) {
                return;
            }
            $header = $oReqeust->getResponseHeader();
            if($header['location']) {
                return $this->rss_request(trim($header['location']));
            }
            else {
                return $oReqeust->getResponseBody();
            }
        }


        /**
         * @brief 위젯의 실행 부분
         *
         * ./widgets/위젯/conf/info.xml 에 선언한 extra_vars를 args로 받는다
         * 결과를 만든후 print가 아니라 return 해주어야 한다
         **/
        function proc($args) {
            // 위젯 자체적으로 설정한 변수들을 체크
            $title = $args->title;
            $PAGE_LIMIT = $args->page_limit ? $args->page_limit : 10;

            // 날짜 형태
            $DATE_FORMAT = $args->date_format ? $args->date_format : "m/d";

            $buff = $this->rss_request($args->rss_url1,$args->rss_url2,$args->rss_url3,$args->rss_url4);

            if(!is_string($buff) or !$buff) return Context::getLang('msg_fail_to_request_open');

            $encoding = preg_match("/<\?xml.*encoding=\"(.+)\".*\?>/i", $buff, $matches);
            if($encoding && !preg_match("/UTF-8/i", $matches[1])) $buff = trim(iconv($matches[1]=="ks_c_5601-1987"?"EUC-KR":$matches[1], "UTF-8", $buff));

            $buff = preg_replace("/<\?xml.*\?>/i", "", $buff);

            $oXmlParser = new XmlParser();
            $xml_doc = $oXmlParser->parse($buff);
            $rss->title = $xml_doc->rss->channel->title->body;
            $rss->link = $xml_doc->rss->channel->link->body;

            $items = $xml_doc->rss->channel->item;

            if(!$items) return Context::getLang('msg_invalid_format');
            if($items && !is_array($items)) $items = array($items);

            $rss_list = array();

            foreach ($items as $key => $value) {
                if($key >= $PAGE_LIMIT) break;
                unset($item);

                foreach($value as $key2 => $value2) {
                    if(is_array($value2)) $value2 = array_shift($value2);
                    $item->{$key2} = $value2->body;
                }

                $date = $item->pubdate;
                $item->date = $date ? date($DATE_FORMAT, strtotime($date)) : '';
                $array_date[$key] = strtotime($date);

                $item->description = preg_replace('!<a href=!is','<a onclick="window.open(this.href);return false" href=', $item->description);

                $rss_list[$key] = $item;
            }
            array_multisort($array_date, SORT_DESC, $rss_list);


            $widget_info->rss = $rss;
            $widget_info->rss_list = $rss_list;
            $widget_info->title = $title;
            $widget_info->rss_height = $args->rss_height ? $args->rss_height : 200;
            $widget_info->subject_cut_size = $args->subject_cut_size;

            Context::set('widget_info', $widget_info);

            // 템플릿의 스킨 경로를 지정 (skin, colorset에 따른 값을 설정)
            $tpl_path = sprintf('%sskins/%s', $this->widget_path, $args->skin);
            Context::set('colorset', $args->colorset);

            // 템플릿 컴파일
            $oTemplate = &TemplateHandler::getInstance();
            $output = $oTemplate->compile($tpl_path, 'list');
            return $output;
        }

    }
?>

글쓴이 제목 최종 글
XE 공지 글 쓰기,삭제 운영방식 변경 공지 [16] 2019.03.05 by 남기남
손경훈267 동영상 게시판은 없나요? [1] 2009.09.20 by SMaker
뉴클리어 제로보드XE 에서 이동.. [1] 2009.09.20 by SMaker
이록 이상한 "잘못된 요청" 현상  
dufltptkd01 오류가^^;; [1] 2009.09.20 by 난다날아
uridule 최신글 우측패딩이 안먹혀는데 어디서 해야하나요? [2] file 2009.09.20 by uridule
uridule xe 공식레이아웃v2의 lnb 우측메뉴에 대한 질문입니다. [1] file 2009.09.20 by ememo
울보아기 XE 1.1.5 아이피 차단방법 [3] 2009.09.20 by 최준규403
uridule xe_official 최신글 이미지 에서요. 파일첨부없이 타사이트에서 내용복사후에 썸네일 나오게 할 수 는 없나요?  
누나가출사건 CafeXe 레이아웃 사용시  
uridule bekme_images 이미지 최근게시물에 제목이 잘려지지 않고 그대로 출력이 됩니다. [2] file 2009.09.21 by uridule
영혼자 페이지생성후 [페이지수정]하기하고나서 [저장]을 누르면 [서버에저장중.....]하고 계속그상태이고 다음페이지로 넘어가지않습니다.뭐가잘못된건지.... [1] 2009.09.21
유제우722 게시판에서 첨부파일을 클릭하면 왜 아무반응도 없는걸까요 미치겠음 ㅠㅠ [2] 2009.09.21 by 티데이
마이콘 1.2.5 업데이트후 이미지 링크가 이상해지는 현상 file  
비밀얌 모바일 XE 애드온 켜도 안돼는 이유는? [1] 2009.09.21 by 비밀얌
비밀얌 1.2.5 버전에서 생일부분 달력이 제대로 안나옵니다. [1] 2009.09.21 by 찬이s
베르짱 게시판을 가로로 나누는 방법이 있을까요?  
CFSM 다운그레이드 어떻게하나요;; 지금 1.2,5버전 안되서 1.10으로 새로깔고있는데 그냥 파일 모두다 지우고 새로깔면 그게 다운그레이드 인가요;; [1] 2009.09.21 by 개돌
앙팡1 xe에서의 글쓰기 환경... [1] 2009.09.21 by 개돌
고딩어 메뉴연결시 네트워크 폴더로 바로 접속가능한가요?  
xe훌륭해 비회원 게시판 쓰기 [1] 2009.09.21 by 백성찬
비밀얌 Extra_val_value.html 없어진거 같은데 어떻게 수정? [1] 2009.09.21 by 비밀얌
고수군 최근추출 갱신 안되는 에러.............. file  
이동일636 사용자가 글 삭제하면, 영구로 지워지는데, 휴지통으로 가게끔 할 수 없나요?  
강남반지하 컨텐츠 위젯에서 게시글의 제목과 댓글을 동시에 표시하고싶습니다.  
Believer zb4>xe 마이그레이션 zb4한글아이디 로그인 불가 [1] 2009.09.21 by ememo
zartin 도메인 xe를 없애는 작업, 저는 왜 안나오죠? [3] 2009.09.21 by phiz
deathcrush css 기본적인거 질문요 [1] file 2009.09.21 by 리우 
지금부터 최근게시물 게시판 제목이 안붙어요...? [2] 2009.09.21 by 조현상518
impre wiki link 문의(IE 오류?)  
손선호 겔러리 썸네일을 플래시도 불러올수 있도록 하고 싶습니다.