묻고답하기

위젯 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 남기남
착한호랑이 1차 메뉴 클릭 안되게 하는 방법 좀 알려주세요  
아드레날린 페이지 내용을 다국어로 하기 [2] 2010.03.26 by 아드레날린
초딩보믄TG 레이아웃스킨 사용법은 없나요?? [1] 2010.03.26 by 착한호랑이
어쩌라고579 음식주문사이트 제작관련 질문입니다ㅠ  
바른샘 SSH 로그인이 안되는데 어떻게 해야하는지요.. [1] 2010.03.26 by Gekkou
싸나이김 홈페이지 서버 문제점 [2] 2010.03.26 by 카르마
최용완 아아프레임에 관해서 여쭤 볼게요 ㅜㅜ [1] 2010.03.26 by 현원
형기 관리자 메일 수신기능  
박알집 외부페이지에서 댓글 가져다 쓰기 [1] 2010.03.26 by 라르게덴
최혁필184 제로보드 사용중 문제 발생시 어떻게 하나요? [1] 2010.03.26 by 태양의눈물
김경의515 모듈 db 스키마 수정시 적용방법은 어떻게 하나요? [1] 2010.03.26 by 라르게덴
ギャル 테그에선 and검색이 안되는것 같은데 맞나요? [1] 2010.03.26 by 백성찬
무조건친절 한게시물에 덧글 하나 쓰면 또 못쓰게하는거 없나요?  
bleuhare 일부 컴퓨터에서 XE로 만든 홈페이지에 접속이 안되는 경우.. [1] 2010.03.26 by 마고
쉼터지기919 최근이미지 출력 위젯 설치시 모듈선택기에서 오류 [1] 2010.03.26 by 백성찬
innerman 모듈 선택하기에서 "선택"인 안되고 자바스크립트 오류가 나네요. [1] file 2010.03.26 by 백성찬
jmb5 게시판 연결이 안되고 로그인하라고 뜨네요! [1] 2010.03.26 by 백성찬
용돌 제로보드 4.1 다운로드 오류  
날마다좋은날 드레그 방지하는 법(글복사금지) 알고 싶어요  
Ed830 zb5 Core 프로그램 [1] 2010.03.26 by 마구
임대만 관리자 접속하면 메인페이지에 있는 메뉴부분의 이미지와 링크가 사라집니다.  
박민수668 위제 RSS리더 여러개의 RSS주소 등록하는법좀 ...  
강유리164 게시판 목록에서 카테고리를 선택하고 GO를 누르면 스타일이 깨져요. 어떻게 하면 될까요?  
럽양양 작성글 수정시 관리자 메일 전송 방법  
동네의사 syndication(신디케이션) 설정 관련 여쭤봅니다. [1] 2010.03.26 by 태양의눈물
브레인630 글저장시 특정페이지로 이동하기  
teuss 게시물 글을 글쓰기할떄 자동으로 2개의 게시판에 입력하기  
뷰티짱 뭐가 잘못되었는지 클릭만 하면 forbidden이 뜨네요 [1] file 2010.03.26 by 송상욱
He''s 설문조사 결과값 초기화 하는방법 좀..  
jayyang 필드에 소수점 넣으려면 어떻게해야 하나요? [1] file 2010.03.26 by 양효주869