[첫화면으로]UseModWiki소스수정/RSS제공

마지막으로 [b]

최근변경내역의 RSS 제공

config.pl 수정

다음 환경 변수들을 추가한다.
### rss from usemod 1.0
$InterWikiMoniker = '';         # InterWiki moniker for this wiki. (for RSS)
$SiteDescription  = $SiteName;  # Description of this wiki. (for RSS)
$RssLogoUrl  = '';              # Optional image for RSS feed
$RssDays     = 7;               # Default number of days in RSS feed
$RssTimeZone = 9;               # Time Zone of Server (hour), 0 for GMT, 9 for Korea

wiki.pl 수정

환경 변수와 전역 변수 추가
### 패치를 위해 추가된 환경설정 변수
use vars qw(
    $UserGotoBar $UserGotoBar2 $UserGotoBar3 $UserGotoBar4
    ...
    $InterWikiMoniker $SiteDescription $RssLogoUrl $RssDays $RssTimeZone
    );
###
...
### 패치를 위해 추가된 내부 전역 변수
use vars qw(%RevisionTs $FS_lt $FS_gt $StartTime $Sec_Revision $Sec_Ts
    ...
    $QuotedFullUrl);
###

기존의 DoRc 함수가 인자를 받도록 바뀌었다. 0이면 rss, 1이면 기존 html 이다. 따라서 기존 코드에서 DoRc() 로 되어 있던 것들을 DoRc(1) 로 고친다. (0과 1을 반대로 했다면 안 고쳐도 되었을 텐데.. -_-)
sub DoBrowseRequest {
    ...
            &DoRc(1);
    ...
}

sub BrowsePage {
    ...
        &DoRc(1);
    ...
}

DoRc 함수를 인자에 따라 다르게 동작하도록 고친다. 아래에서 주석문에 rss 가 들어간 부분을 찾아서 고친다.
sub DoRc {
###############
### added by gypark
### rss from usemod1.0
    my ($rcType) = @_;
    my $showHTML;
###
###############
    my ($fileData, $rcline, $i, $daysago, $lastTs, $ts, $idOnly);
    ...
    my $showbar = 0;
###############
### added by gypark
### rss from usemod1.0
    if (0 == $rcType) {
        $showHTML = 0;
    } else {
        $showHTML = 1;
    }
###
###############

   ...
        $starttime = &GetParam("from", 0);
###############
### replaced by gypark
### rss from usemod1.0
#       print "<h2>" . Ts('Updates since %s', &TimeToText($starttime))
#                   . "</h2>\n";
        if ($showHTML) {
            print "<h2>" . Ts('Updates since %s', &TimeToText($starttime))
                        . "</h2>\n";
        }
###
###############
    } else {
        $daysago = &GetParam("days", 0);
        $daysago = &GetParam("rcdays", 0)  if ($daysago == 0);
        if ($daysago) {
            $starttime = $Now - ((24*60*60)*$daysago);
###############
### replaced by gypark
### rss from usemod1.0
#           print "<h2>" . Ts('Updates in the last %s day'
#                        . (($daysago != 1)?"s":""), $daysago) . "</h2>\n";
            if ($showHTML) {
                print "<h2>" . Ts('Updates in the last %s day'
                             . (($daysago != 1)?"s":""), $daysago) . "</h2>\n";
            }
###
###############
            # Note: must have two translations (for "day" and "days")
            # Following comment line is for translation helper script
            # Ts('Updates in the last %s days', '');
        }
    }
    if ($starttime == 0) {
###############
### replaced by gypark
### rss from usemod1.0
#       $starttime = $Now - ((24*60*60)*$RcDefault);
#       print "<h2>" . Ts('Updates in the last %s day'
#           . (($RcDefault != 1)?"s":""), $RcDefault) . "</h2>\n";
        if (0 == $rcType) {
            $starttime = $Now - ((24*60*60)*$RssDays);
        } else {
            $starttime = $Now - ((24*60*60)*$RcDefault);
        }
        if ($showHTML) {
            print "<h2>" . Ts('Updates in the last %s day'
                . (($RcDefault != 1)?"s":""), $RcDefault) . "</h2>\n";
        }
###
###############
        # Translation of above line is identical to previous version
    }
###############
### pda clip by gypark
    }
###
###############

    # Read rclog data (and oldrclog data if needed)
    ($status, $fileData) = &ReadFile($RcFile);
    ...
    $lastTs++  if (($Now - $lastTs) > 5);  # Skip last unless very recent

    $idOnly = &GetParam("rcidonly", "");
###############
### replaced by gypark
### rss from usemod1.0
#   if ($idOnly ne "") {
    if ($idOnly && $showHTML) {
###
###############
        print '<b>(' . Ts('for %s only', &ScriptLink($idOnly, $idOnly))
                    . ')</b><br>';
    }
###############
### pda clip by gypark
    if (!($IsPDA)) {
###
###############
###############
### added by gypark
### rss from usemod1.0
    if ($showHTML) {
###
###############
    foreach $i (@RcDays) {
        print " | "  if $showbar;
    ...
        print " (".
            Ts('currently set to %s', &TimeToText($bookmark)).
            ")<br>\n";
    }
###
###############
###############
### added by gypark
### rss from usemod1.0
    }
###
###############
###############
### pda clip by gypark
    }
###
###############

    # Later consider a binary search?
    ...
        last if ($ts >= $starttime);
    }
###############
### replaced by gypark
### rss from usemod1.0
#   if ($i == @fullrc) {
    if ($i == @fullrc && $showHTML) {
###
###############
        print '<br><strong>' . Ts('No updates since %s',
                                            &TimeToText($starttime)) . "</strong><br>\n";
    } else {
        splice(@fullrc, 0, $i);  # Remove items before index $i
        # Later consider an end-time limit (items older than X)
###############
### replaced by gypark
### rss from usemod1.0
#       print &GetRcHtml(@fullrc);
#   }
#   print '<p>' . Ts('Page generated %s', &TimeToText($Now)), "<br>\n";
        if (0 == $rcType) {
            print &GetRcRss(@fullrc);
        } else {
            print &GetRcHtml(@fullrc);
        }
    }
    if ($showHTML) {
        print '<p>' . Ts('Page generated %s', &TimeToText($Now)), "<br>\n";
    }
###
###############
}

기존의 GetOldPageLink 를 수정하고, 새로운 함수 GetOldPageParameters 를 추가한다.
###############
### replaced by gypark
### from usemod1.0
# sub GetOldPageLink {
#   my ($kind, $id, $revision, $name) = @_;
#
#   if ($FreeLinks) {
#       $id = &FreeToNormal($id);
#       $name =~ s/_/ /g;
#   }
#   return &ScriptLink("action=$kind&id=$id&revision=$revision", $name);
# }
sub GetOldPageParameters {
    my ($kind, $id, $revision) = @_;

    $id = &FreeToNormal($id) if $FreeLinks;
    return "action=$kind&id=$id&revision=$revision";
}

sub GetOldPageLink {
    my ($kind, $id, $revision, $name) = @_;

    $name =~ s/_/ /g if $FreeLinks;
    return &ScriptLink(&GetOldPageParameters($kind, $id, $revision), $name);
}
###
###############

action=rss 이면 DoRss 를 부르게 한다.
sub DoOtherRequest {
    ...
### comment from Jof
        } elsif (($action eq "comments") || ($action eq "longcomments")) {
            &DoComments($id) if &ValidIdOrDie($id);
### rss from usemod1.0
        } elsif ($action eq "rss") {
            &DoRss();
###
###############
        } else {
            # Later improve error reporting
            &ReportError(Ts('Invalid action parameter %s', $action));
    ...
}

이제는 페이지를 저장할 때 rclog 화일에 페이지 revision 번호도 저장한다.
sub DoPostMain {    # 원래 DoPost 였는데 코멘트 매크로 달면서 바뀌었다.
    ...
#   &WriteRcLog($id, $summary, $isEdit, $editTime, $user, $Section{'host'});
    &WriteRcLog($id, $summary, $isEdit, $editTime, $user, $Section{'host'}, $Section{'revision'});
###
    ...
}

sub WriteRcLog {
###############
### replaced by gypark
### rss from usemod1.0
#   my ($id, $summary, $isEdit, $editTime, $name, $rhost) = @_;
    my ($id, $summary, $isEdit, $editTime, $name, $rhost, $revision) = @_;
###
###############
    my ($extraTemp, %extra);

    %extra = ();
    $extra{'id'} = $UserID  if ($UserID ne "");
    $extra{'name'} = $name  if ($name ne "");
###############
### added by gypark
### 최근변경내역에 북마크 기능 도입
    $extra{'tscreate'} = $Page{'tscreate'};
### rss from usemod 1.0
    $extra{'revision'} = $revision if ($revision ne "");
###############

    $extraTemp = join($FS2, %extra);
    # The two fields at the end of a line are kind and extension-hash
    ...
}

이하의 함수들은 통채로 추가.

DoRss 본체는 xml 헤더만 출력하고 DoRc(0) 을 부른다.
sub DoRss {
    print "Content-type: text/xml\n\n";
    &DoRc(0);
}

DoRc 는 인자 0 을 받았다면 GetRcRss 를 부른다.
sub GetRcRss {
    my ($rssHeader, $headList, $items);

    # Normally get URL from script, but allow override
    $FullUrl = $q->url(-full=>1)  if ($FullUrl eq "");
    $QuotedFullUrl = &QuoteHtml($FullUrl);
    $SiteDescription = &QuoteHtml($SiteDescription);

    my $ChannelAbout = &QuoteHtml($FullUrl . &ScriptLinkChar()
        . $ENV{QUERY_STRING});
    $rssHeader = <<RSS ;
<?xml version="1.0" encoding="$HttpCharset"?>
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns="http://purl.org/rss/1.0/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:wiki="http://purl.org/rss/1.0/modules/wiki/"
>
    <channel rdf:about="$ChannelAbout">
        <title>${\(&QuoteHtml($SiteName))}</title>
        <link>${\($QuotedFullUrl . &QuoteHtml("?$RCName"))}</link>
        <description>${\(&QuoteHtml($SiteDescription))}</description>
        <wiki:interwiki>
            <rdf:Description link="$QuotedFullUrl">
                <rdf:value>$InterWikiMoniker</rdf:value>
            </rdf:Description>
        </wiki:interwiki>
        <items>
            <rdf:Seq>
RSS
    ($headList, $items) = &GetRc(0, @_);
    $rssHeader .= $headList;
    return <<RSS ;
$rssHeader
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="${\(&QuoteHtml($RssLogoUrl))}">
        <title>${\(&QuoteHtml($SiteName))}</title>
        <url>$RssLogoUrl</url>
        <link>$QuotedFullUrl</link>
    </image>
$items
</rdf:RDF>
RSS
}

GetRcRss 는 다시 GetRc(0) 을 부른다. 또 DoRc 가 html 출력을 할 때는 GetRcHtml 을 부르는데 이녀석은 별 하는 일 없이 GetRc(1) 을 부른다. 0.92의 GetRcHtml 이 1.0 에서는 GetRc 로 바뀌고 인자에 따라 다르게 동작하게 한 건데... ext 버전에서는 GetRcHtml 이 워낙 많이 수정되어서 그냥 함수를 별개로 두기로 한다. 즉,
0.92 :

HTML: DoRc ------> GetRcHtml

1.0 :

RSS:  --------+-> DoRc ---+---> GetRcRss ----------+-> GetRc ---------------+--> GetRssRcLine
      DoRc(0) |           |               GetRc(0) |  (기존 GetRcHtml 수정) |
              |           |                        |                        |
              |           |                        |                        |
              |           |                        |                        |
HTML: --------+           +---> GetRcHtml ---------+                        +--> GetHtmlRcLine
      DoRc(1)              (이건 그냥 더미) GetRc(1)

ext 버전 :

RSS:  --------+-> DoRc ---+---> GetRcRss ----------+-> GetRc ---------------+--> GetRssRcLine
      DoRc(0) |           |               GetRc(0)    (1.0의 것을 사용)     |
              |           |                                                 |
              |           |                                                 |
              |           |                                                 |
HTML: --------+           +---> GetRcHtml                                   +--> GetHtmlRcLine
      DoRc(1)              (기존 것 계속 사용)                          (결과적으로 사용되지 않음)
따라서 GetRcHtml 과 GetRc 는 비슷한 코드가 반복된다. GetRc(1) 을 호출하는 부분이 없기 때문에 GetRc 에서 해당 경로를 죄다 삭제해 주면 좀 보기에 좋겠지만... 첫째로 귀찮고 둘째로 나중에 다시 필요해질지 모르니 그냥 두기로 함.

어쨌거나, 그래서 이것이 통채로 추가해 버린 GetRc 함수
sub GetRc {
    my $rcType = shift;
    my @outrc = @_;
    my ($rcline, $date, $newtop, $author, $inlist, $result);
    my ($showedit, $link, $all, $idOnly, $headItem, $item);
    my ($ts, $pagename, $summary, $isEdit, $host, $kind, $extraTemp);
    my ($rcchangehist, $tEdit, $tChanges, $tDiff);
    my ($headList, $historyPrefix, $diffPrefix);
    my %extra = ();
    my %changetime = ();
    my %pagecount = ();

    # Slice minor edits
    $showedit = &GetParam("rcshowedit", $ShowEdits);
    $showedit = &GetParam("showedit", $showedit);
    if ($showedit != 1) {
        my @temprc = ();
        foreach $rcline (@outrc) {
            ($ts, $pagename, $summary, $isEdit, $host) = split(/$FS3/, $rcline);
            if ($showedit == 0) {  # 0 = No edits
                push(@temprc, $rcline)  if (!$isEdit);
            } else {               # 2 = Only edits
                push(@temprc, $rcline)  if ($isEdit);
            }
        }
        @outrc = @temprc;
    }
# Optimize param fetches out of main loop
    $rcchangehist = &GetParam("rcchangehist", 1);
# Optimize translations out of main loop
    $tEdit    = T('(edit)');
    $tDiff    = T('(diff)');
    $tChanges = T('changes');
    $diffPrefix = $QuotedFullUrl . &QuoteHtml("?action=browse\&diff=5\&id=");
    $historyPrefix = $QuotedFullUrl . &QuoteHtml("?action=history\&id=");
    foreach $rcline (@outrc) {
        ($ts, $pagename) = split(/$FS3/, $rcline);
        $pagecount{$pagename}++;
        $changetime{$pagename} = $ts;
    }
    $date = "";
    $all = &GetParam("rcall", 0);
    $all = &GetParam("all", $all);
    $newtop = &GetParam("rcnewtop", $RecentTop);
    $newtop = &GetParam("newtop", $newtop);
    $idOnly = &GetParam("rcidonly", "");
    $inlist = 0;
    $headList = '';
    $result = '';
    @outrc = reverse @outrc if ($newtop);
    foreach $rcline (@outrc) {
        ($ts, $pagename, $summary, $isEdit, $host, $kind, $extraTemp)
            = split(/$FS3/, $rcline);
        next  if ((!$all) && ($ts < $changetime{$pagename}));
        next  if (($idOnly ne "") && ($idOnly ne $pagename));
### hide page
        next if (&PageIsHidden($pagename));
        %extra = split(/$FS2/, $extraTemp, -1);
        if ($date ne &CalcDay($ts)) {
            $date = &CalcDay($ts);
            if (1 == $rcType) {  # HTML
                # add date, properly closing lists first
                if ($inlist) {
                    $result .= "</UL>\n";
                    $inlist = 0;
                }
                $result .= "<p><strong>" . $date . "</strong></p>\n";
                if (!$inlist) {
                    $result .= "<UL>\n";
                    $inlist = 1;
                }
            }
        }
        if (0 == $rcType) {  # RSS
            ($headItem, $item) = &GetRssRcLine($pagename, $ts, $host,
                        $extra{'name'}, $extra{'id'}, $summary, $isEdit,
                        $pagecount{$pagename}, $extra{'revision'},
                        $diffPrefix, $historyPrefix);
            $headList .= $headItem;
            $result   .= $item;
        } else {  # HTML
            $result .= &GetHtmlRcLine($pagename, $ts, $host, $extra{'name'},
                        $extra{'id'}, $summary, $isEdit,
                        $pagecount{$pagename}, $extra{'revision'},
                        $tEdit, $tDiff, $tChanges, $all, $rcchangehist);
        }
    }
    if (1 == $rcType) {
        $result .= "</UL>\n"  if ($inlist);  # Close final tag
    }
    return ($headList, $result);  # Just ignore headList for HTML
}

GetRc 함수 안에서 불려서 rss 출력의 각 라인을 생성하는 함수
sub GetRssRcLine {
    my ($pagename, $timestamp, $host, $userName, $userID, $summary,
        $isEdit, $pagecount, $revision, $diffPrefix, $historyPrefix) = @_;
    my ($itemID, $description, $authorLink, $author, $status,
        $importance, $date, $item, $headItem);

# encode pagename for URL (ext1.88)
    my $encoded_pagename = &EncodeUrl($pagename);

    # Add to list of items in the <channel/>
    $itemID = $FullUrl . &ScriptLinkChar()
            . &GetOldPageParameters('browse', $encoded_pagename, $revision);
    $itemID = &QuoteHtml($itemID);
    $headItem = "                <rdf:li rdf:resource=\"$itemID\"/>\n";
# Add to list of items proper.
    if (($summary ne "") && ($summary ne "*")) {
        $description = &QuoteHtml($summary);
    }
    $host = &QuoteHtml($host);
    $host =~ s/\d+$/xxx/;
    if ($userName) {
        $author = &QuoteHtml($userName);
        $authorLink = "link=\"$QuotedFullUrl?$author\"";
    } else {
        $author = $host;
    }
    $status = (1 == $revision) ? 'new' : 'updated';
    $importance = $isEdit ? 'minor' : 'major';
    $timestamp += $TimeZoneOffset;
    my ($sec, $min, $hour, $mday, $mon, $year) = localtime($timestamp);
    $year += 1900;
    $date = sprintf("%4d-%02d-%02dT%02d:%02d:%02d+%02d:00",
        $year, $mon+1, $mday, $hour, $min, $sec, ($TimeZoneOffset/(60*60) + $RssTimeZone));
    $pagename = &QuoteHtml($pagename);
    # Write it out longhand
    $item = <<RSS ;
    <item rdf:about="$itemID">
        <title>$pagename</title>
        <link>$QuotedFullUrl?$encoded_pagename</link>
        <description>$description</description>
        <dc:date>$date</dc:date>
        <dc:creator>$author</dc:creator>
        <dc:contributor>
            <rdf:Description wiki:host="$host" $authorLink>
                <rdf:value>$author</rdf:value>
            </rdf:Description>
        </dc:contributor>
        <wiki:status>$status</wiki:status>
        <wiki:importance>$importance</wiki:importance>
        <wiki:diff>$diffPrefix$encoded_pagename</wiki:diff>
        <wiki:version>$revision</wiki:version>
        <wiki:history>$historyPrefix$encoded_pagename</wiki:history>
    </item>
RSS
    return ($headItem, $item);
}

마찬가지로 GetRc 함수 안에서 불려서, html 출력의 각 라인을 생성하는 함수. 그렇지만 현재는 호출될 일이 없기 때문에 내용은 비워둔다. 호출되면 서버에러를 낸다.
sub GetHtmlRcLine {
### 현재는 사용되지 않음
    die "GetHtmlRcLine -- must not be executed!!!";
}

ext1.65에서 추가로 수정된 부분. html 헤더에 RSS를 얻을 수 있는 URL을 넣어서 출력한다.
sub GetHtmlHeader {
    ...
    $html .= qq(<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=$HttpCharset">\n);
    $html .= qq(<META HTTP-EQUIV="Content-Script-Type" CONTENT="text/javascript">\n);
    # 이 아래 줄 추가
    $html .= qq(<link rel="alternate" type="application/rss+xml" title="$SiteName" href="http://$ENV{SERVER_NAME}$ENV{SCRIPT_NAME}?action=rss">\n);
    $html .= qq(<script src="$JavaScript" language="javascript" type="text/javascript"></script>);
    ...
}

추가 업데이트 내역

ext1.53a - 관리자가 감춘 페이지도 RSS 출력에 포함되어 나오는 문제를 수정했습니다.
-- Raymundo 2003-10-7 3:43 am

오타 수정... DoRc 함수 안에 다음 줄이 오타가 있네요. 거의 호출되지 않는 부분이라 알아채지 못했었군요.
    if ($idOnly && &showHTML) {   를
    if ($idOnly && $showHTML) {   으로 (showHTML 앞의 & 를 $ 로) 고칠 것
-- Raymundo 2003-10-9 4:17 pm

/최근변경내역아이템갯수지정 패치를 적용하면 '최근 몇 개'의 엔트리를 출력할 지 지정할 수 있음.
-- Raymundo 2003-10-9 8:16 pm

ext1.54a - 출력 항목에 dc:creator 를 추가하고, wiki:diff 에는 diff=4 대신에 diff=5 가 출력되게 하였습니다. 로그인 한 사용자의 경우는 rss 리더에서 바로 diff 링크를 갈 경우 /북마크가 적용됩니다. (그런데 wiki:diff 항목을 지원하는 리더가 있는지 모르는 상태입니다 -_-)

ext1.65 - Jof:UseModWiki소스수정/라이브북마크 의 내용을 반영합니다. 제 홈페이지를 FireFox에서 볼 때 제대로 동작하는 것을 확인했습니다만, 안 되면 알려 주세요. 참고로 [RSS에 대한 잡담]도 읽어 볼만 하군요. 후자의 글에서 주장하는 "RSS는 미리 (정적으로) 생성되어 있어야 한다"는 말도 일리가 있긴 한데 언제 반영할지 모르겠습니다.

ext1.88

관련 링크

Notes

'최근 며칠 동안의 변경내역' 옵션 말고 갯수를 지정하는 옵션도 추가하는 게 좋지 않을까 생각합니다. RSS를 뽑았는데 항목이 텅 비어 있으면 당황할 것 같네요. 참고로 WikiX는 갯수지정 옵션만 있고요, 야후! 뉴스 같은 곳도 RSS로 뽑아주는 뉴스의 갯수가 정해져 있군요.
-- Danny 2003-10-9 3:47 pm

갯수로 옵션을 주는 사이트들을 봤습니다만 도저히 수긍이 안 가던데요.. 스무개 출력하게 했는데 하루 사이에 50개 글이 올라오면... 반대의 경우는 뭐 보통은 자기가 사이트를 방문하는 주기보다는 days 값을 크게 줄 테니 별 상관없을거라는 생각입니다. 애초에 UseMod:WikiPatches/XmlRss 에서는 그래서 rsslimit 라는 갯수 지정 인자를 줄 수 있게 했는데.. 거기서도 days 를 "more useful option" 이라고 표현하고 있고, 1.0에서는 rsslimit 은 빼 버렸더라고요. 고로 갯수지정을 하려면 코드를 별도로 고쳐야 한다는 얘기... 일단 시도는 해 보도록 하지요.
-- Raymundo 2003-10-9 3:58 pm

반영했습니다.
-- Raymundo 2003-10-9 8:16 pm

[Abilon]이라는 프로그램을 설치해서 써보고 있습니다만... author가 안나오니 좀 허전하군요. dc:creator 를 $author로 채워주면 잘 나옵니다. 그리고... description에 페이지 diff가 같이 나오게 할 수는 없을까요? 보통 description을 안 적기 마련인데 좀 휑하네요.
-- 조프 2003-12-11 4:02 pm

UseModWiki 1.0 에서는 dc:contributor 를 사용하던데, 왜 그러는지 의문이네요. 그냥 슬쩍 dc:creator 를 추가해 넣을까요? 그리고 어차피 마지막 수정자의 이름만 보는 거니까 큰 의미도 없다고 생각합니다.

diff 출력을 따로 볼 방법이 없어서, 저도 정작 위키 사이트는 다시 웹브라우저로 봅니다. 그리고 abilon 은 summary 가 없으면 빈 칸으로 나와서 다시 클릭을 해야 하지만 제가 쓰는 SharpReader 는 (이것도 예상대로 동작하지 않아서 좀 문제가 있는 듯 합니다만) summary 가 없으면 바로 페이지를 보여주니 더 낫더군요.

rss 출력 내에 diff 를 보는 링크의 정보도 있는데 (wiki:diff) 정작 그 링크를 지원하는 리더를 못 찾았네요. 매우 아쉬운 부분입니다.
-- Raymundo 2003-12-11 4:09 pm

http://jof4002.net/?action=rss 땜빵으로 넣어봤습니다.
-- 조프 2003-12-11 6:02 pm

Jof:FireFox 에 라ㅤㅅㅠㅂ님이 적은 문제에 대해서 좀 시도를 해봤습니다만, 제가 Abilon을 안쓰기 때문에 [Blogline]에 대해서 해봤습니다.
1. item rdf:about에 대해서 URLEncode 를 호출해서 넣어주면 Bloglines에서는 잘 열립니다. 뭐. 아빌론에서도 되지 않을까 싶네요.
2. 그런데 그게 문제가 되는지 모르겠는데 현재 Jof:FireFox 에서 라이브 북마크를 보면 오히려 영어로 된 페이지 이름만 표시되고 있습니다.
현재 회사고, 회사에서는 FTP가 안되는 관계로 더이상 테스트 불가입니다. -_-;;;

그리고 페이지 내용에 대해 걸리는 링크가 제대로 안되는 문제는 보니 블록라인이 utf-8을 쓰고 있고, 한글을 utf-8로 처리해서 링크를 보내기 때문에 생기는 문제더군요. 뭐 이것도 URLEncode 를 불러주면 될 것 같습니다만, 매우 귀찮습니다.
-- 조프 2004-12-24 12:23 pm

2번 문제를 해결했습니다.
sub GetRssRcLine에서 $itemID = &QuoteHtml($itemID);를 $itemID = &URLEncode(&QuoteHtml($itemID));로 바꿔주기만 하면 양쪽 다 잘 될 것 같다는 것입니다. (원래는 URLEncode를 $headitem 업데이트 한 다음에 호출했었는데, 그것 때문에 문제가 됐었던 것 같네요.)
확인 후 반영 부탁드립니다.
-- 조프 2004-12-27 9:49 pm

그러니까... 저 한 줄 수정만 하면 불여우 문제와 위 1번2번 전부 다 해결이란 건가요? 아니면 저 1번에 적힌 "URLEncode를 호출해서 넣어주면.."은 따로 하고 그와 별도로 위 한 줄 수정도 해야 한다는 건가요?
-- Raymundo 2004-12-27 11:21 pm

올불로그나 블로그코리아나 RSS수집이 안되서 올블로그에서 테스트를 해보니 에러가 나는군요. 뭔가 문제가 있는지..
-- Nyxity 2006-2-7 10:26 am

잘은 모르겠지만, 한RSS가 잘 해주고 있는 걸로봐서 올블로그가 이 버전의 RSS를 제대로 처리하지 못하는게 아닌가 생각됩니다. blog_rss 매크로의 출력과, 위키 자체의 action=rss 출력의 양식이 서로 다르거든요. 올블로그 쪽에 RSS주소를 알려주고 문의해 보시죠.
-- Raymundo 2006-2-7 11:01 am

쳇, 올블로그에 열심히 문의를 적었고 확인 버튼을 눌렀더니만 글쓰기 권한이 없다고 나오는군요. :-/
-- Raymundo 2006-2-7 11:09 am

저런.. 허탈감이라니.
-- Nyxity 2006-2-7 1:23 pm

어디선가 괄호를 안닫은듯. 페이지가 이상하게 표시되요.
-- Nyxity 2006-3-22 6:05 pm

{{{#!vim perl }}} 에서 사용했던 source-highlight 패키지가 버전업이 되면서 출력이 바뀌어 버리는 바람에... -_-;;; 이 페이지 뿐 아니라 저렇게 소스 코드를 표시한 페이지들은 지금 난리가 아닙니다. ㅠ,.ㅠ
-- Raymundo 2006-3-22 6:31 pm

아 그런거였군요. 저런~
-- Nyxity 2006-3-22 6:33 pm

올블로그에 전체RSS등록하면, 한글이 깨져버리고 모노로그의 RSS를 등록하면 페이지가 제대로 표시가 되네요. 뭐가 차이가 나는 걸까요.
-- Nyxity 2006-9-10 12:36 pm

음 글쎄요 전 올블로그는 등록을 안해서... 근데 예전부터 전체RSS(유즈모드에 단 RSS형식이... 전체RSS의 경우와 다이어리RSS가 버전과 형식이 다른 건 아시죠?)는 좀 이상했던것 같기도 하고... 잘 모르겠네요 ^^;;;
-- Raymundo 2006-9-10 4:07 pm

역시.. 그렇군요. 감사합니다.
-- Nyxity 2006-9-10 10:05 pm
이름:  
Homepage:
내용:
 

위키위키분류

마지막 편집일: 2007-2-5 5:33 pm (변경사항 [d])
2075 hits | Permalink | 변경내역 보기 [h] | 페이지 소스 보기