허접하게 만들었지만 소스를 공개하겠습니다.

각 캐스트 게시판에 있는 발행 정보([No1.어쩌고저쩌고…]발행했습니다.)만 읽어와서 RSS로 만들어 줍니다. 캐스트노트의 일부도 함께 가져옵니다.

RSS본문에 추가적으로 내용을 덧붙이시려면,

<description><?=$newnote[$i][1]?></description>

<description>태그 사이에 필요한 내용을 채워 넣으면 됩니다. 태그 입력시 < 는 &lt; , > 는 &gt; 로 넣으시면 됩니다.

만약 아래 파일을 opencast.php 라고 저장했다면 opencast.php?id=KK244 형태로 호출해야 합니다.

50여개 캐스트 정도를 테스트했는데, 특별한 경우를 제외하고는 대부분 잘 작동합니다.

(소스가 많이 허접하죠? ㅋㅋ 몇 년만에 PHP해보니 힘드네요… ^^)

 

<?php
    // -------- 정보 추출기 -----------

    // 게시판 파일을 불러옴
    $opencast_id = $_GET['id'];
    $opencast_url = "http://opencast.naver.com/" . $opencast_id;

    $fp = fopen($opencast_url,"r");
    $content = "";
    while( !feof($fp) ){
            $buffer = fgets($fp,4096);
            $content .= $buffer;
    }
    fclose($fp);

    // 캐스트 제목, 캐스터, 메시지 추출
    preg_match("/<a href=\"\/.....\">(.*)<\/a><\/h1>/", $content, $title);
    preg_match("/<div class=\"cast_message\">(.*)/", $content, $message);
    preg_match("/<a href=\"\/(.*)\" class=\"caster_id\"/", $content, $caster);
    $message[1] = str_replace("</div>", "", $message[1]);

    // 게시판 파일을 불러옴
    $bbs_url = "http://bbs.opencast.naver.com/nboard2/list.nhn?n2_boardId=1000003444&n2_templateObjectId=" . $opencast_id . "&n2_volume=0";

    $fp = fopen($bbs_url,"r");
    $content = "";
    while( !feof($fp) ){
            $buffer = fgets($fp,4096);
            $content .= $buffer;
    }
    fclose($fp);

    // 글 목록과 날짜 추출
    preg_match_all("/\".*\"[,\n]/", $content, $list);
    preg_match_all("/<em class=\"date\">(.*)<\/em>/", $content, $date);

    // 가장 하단의 제목 추출
    preg_match_all("/\"\[No.*\"/", $content, $first);
    preg_match("/\[No(.*)\]/",  $first[0][sizeof($first[0])-1], $first_subject);

    // 날짜 배열크기 구함
    $size = sizeof($date[0]);

    // 날짜 순서에 맞게 재배치
    for ($i=0; $i<$size; $i++) {
        $newdate[$i] = $date[1][$i];
        preg_match("/\[No(.*)\]/", $list[0][$i+$size+1], $newsubject[$i]);
        preg_match("/\"(.*)\"/", $list[0][$i+1], $newnote[$i]);
    }

    // 가장 하단 제목 적용
    $newsubject[$i-1] = $first_subject;

    // -------- RSS 생성기 -----------

    // 캐스트 제목 $title[1]
    // 캐스트 설명 $message[1]
    // 발행일 $newdate[..]
    // 글 제목 $newsubject[..][1]
    // 글 내용 $newnote[..][1]

    echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
?>

<rss version="2.0">
    <channel>
        <title><?=$title[1]?></title>
        <link><?=$opencast_url?></link>
        <description><?=$message[1]?></description>
        <language>ko</language>
        <pubDate><?php echo date("D, d M Y H:i:s O", time()); ?></pubDate>
        <generator>Webtools Beta1(http://webtools.kr/)</generator>
<?php
    $cast_index = 30000;
    for ($i = 0; $i <= sizeof($newsubject); $i++) {
        // 제목이 유효한 발행일 경우만
        if($newsubject[$i][1]) {
            // 발행일 계산
            $date_temp = explode(".", $newdate[$i]);
            $date_stamp = mktime(0, 0, 0, $date_temp[1], $date_temp[2], $date_temp[0]+2000);

            //발행번호 추출
            $no_temp = explode(" ", $newsubject[$i][1]);
            $cast_no = explode(".", $no_temp[0]);

            if($cast_index > $cast_no[1]) { // 캐스트 번호가 순차적으로 감소하는지 검사
                $cast_index = $cast_no[1]; // 캐스트 번호가 순차적으로 감소하는지 검사하기 위한 변수

                //본문내용 태그 문자 변환, 아래와 순서 조심
                $newnote[$i][1] = str_replace(array('&', '<', '>', '"', "'"), array('&amp;', '&lt;', '&gt;', '&quot;', '&apos;'), $newnote[$i][1]);

                //본문내용 \n문자를 <br />로 변환
                $newnote[$i][1] = str_replace('\\n', '&lt;br /&gt;', $newnote[$i][1]);

                //제목의 따옴표 변환
                $newsubject[$i][1] = str_replace(array("\\'", '\\"'), array("'", '"'), $newsubject[$i][1]);
?>
        <item>
            <title>No<?=$newsubject[$i][1]?></title>
            <link><?php echo $opencast_url . "/" . $cast_no[1]; ?></link>
            <description><?=$newnote[$i][1]?></description>
            <author><?=$caster[1]?></author>
            <guid><?php echo $opencast_url . "/" . $cast_no[1]; ?></guid>
            <pubDate><?php echo date("D, d M Y H:i:s O", $date_stamp); ?></pubDate>
        </item>
<?php
            }
        }
    }
?>
    </channel>
</rss>

일전에 오픈캐스트를 IFRAME을 이용해서 블로그에 삽입하는 툴을 만들었던 k2man입니다. (오픈캐스트를 자기 블로그에 삽입하고 싶으시면, 오른편에 있는 이전 포스팅을 보시면 됩니다. ^^)

오픈캐스트의 가장 아쉬운 점이 꼭 네이버 안에서만 구독을 해야 한다는 것입니다. 네이버에 로그인 하지 않으면, 새로운 캐스트가 발행되었는지도 알 수 없는 형태이죠. 구독기능이라면 당연히 RSS 피드 구독을 지원할 줄알았는데, 정식 오픈에서도 지원되지 않았습니다.

이미 HTML소스를 가져가신 분들을 위해서 일괄적으로 RSS구독 버튼을 생성시킬까 했지만, 원하지 않는 분들도 계실 것 같아서 부득이 구독버튼 생성 옵션을 만들었습니다.

번거로우시더라도 웹툴즈에 방문하셔서 새 HTML코드를 복사해 가시기 바랍니다.

RSS피드주소와 구독버튼

아쉽지만 간단히 RSS 피드로 오픈캐스트를 받아 볼 수 있도록 해봤습니다. 아래처럼 하단에 구독링크도 제공됩니다. 웹툴즈( http://webtools.kr )에서 구독링크와 연결되는 RSS주소는 다른 것으로 변경도 가능합니다.

피드 주소는 아래와 같은 형식으로 되어 있습니다.

http://feed.webtools.kr/opencast.php?id=KK244

여기서 KK244는 제 오픈캐스트 발행 아이디구요. 이 KK244만 자신의 것으로 바꾸면 됩니다.

애드센스로 수익 얻기

RSS를 이용하여 애드센스의 “피드용 애드센스”를 사용할 수 있게 되었습니다. 애드센스 설정법은 이미 많은 분들이 소개하고 있으므로 생략하겠습니다.

애드센스를 이용해서 피드버너 주소를 얻었다면, 웹툴즈 설정 창에서 피드주소를 새로 넣어 주시고 HTML을 생성해 주시면 됩니다.

아직은 베타

굳이 베타이라고 표현한 것은 아직 기능이 모자라기 때문이고, 어떤 오류가 있을지 모르기 때문입니다. 오류가 발생하면 죄송하지만, http://webtools.kr 게시판에 남겨 주시면 성심껏 해결하도록 하겠습니다.

아~ 날짜는 제대로 가져올 수 있지만, 시간은 제대로 가져올 수 없습니다.

아직은 모자란 기능

우선, 오픈캐스트 제목과 캐스트 소개는 제대로 보여줍니다. 또, 각 제목을 클릭했을 때 각 캐스트로 이동합니다.

각 발행에 있어서도 제목과 캐스트노트의 일부분을 가져옵니다.

이 외에 앞서 제공해 드렸던, 오픈캐스트 프레임이 IFRAME 형태로 되어 있어서 일부 RSS리더에서는 제대로 출력되지 않는 문제도 있습니다. (한RSS는 정상적으로 보입니다.^^)

또 모든 발행정보를 가져올 수 있는 것이 아니고, 현재 오픈캐스트 게시판에 노출되어 있는 것들만 가져올 수 있습니다. 따라서 어떤 분은 30개를 가져올 수도 있고, 발행했다는 글이 게시판에 없다면 하나도 가져오지 못할 수도 있습니다.

([No.2 제주의 아름다운 도로, 드라이브 가자] 를 발행했습니다. 형태의 글을 말합니다.)

이젠 더 이상 만들면 네이버에서 어떤 제재를 하지 않을까 슬슬 걱정이 되기도 합니다. ^^;; 그래서 네이버 오픈캐스트에서 RSS 기능을 지원할 때 까지만 운영해 볼까 생각중입니다. ^^

  1. 마르 2009.07.29 10:59 신고

    이거, 현재 호스트가 만료되었나보네요. 관리 안되고 있는건가요.ㅠㅠ 딱 필요한 기능인데...

    • k2man 2009.07.29 13:27 신고

      feed.webtools.kr/opencast.php?id=KK244 형태로 이용 가능합니다. 포스트 수정을 안해버려서... 죄송합니다. ^^;;

+ Recent posts