1 ###############################################################################
3 # <p>³°Éô¥µ¡¼¥Ð¤Ë¤¢¤ëRSS¤ò¼èÆÀ¤·¤Æ°ìÍ÷ɽ¼¨¤·¤Þ¤¹¡£</p>
8 ###############################################################################
9 package plugin::rss::RSS;
11 #==============================================================================
13 #==============================================================================
17 return bless $self,$class;
20 #==============================================================================
22 #==============================================================================
29 return &Util::paragraph_error("RSS¤ÎURL¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£");
32 # ¥¥ã¥Ã¥·¥å¥Õ¥¡¥¤¥ë¤Î¹¹¿·»þ¹ï¤ò¥Á¥§¥Ã¥¯
34 my $cache = $wiki->config('log_dir')."/".&Util::url_encode($filename).".rss";
37 my @status = stat($cache);
38 if($status[9]+(60*60) > time()){
46 $content = &Util::get_response($wiki,$url) or return &Util::paragraph_error($!);
48 # EUC¤ËÊÑ´¹¡Ê½ÐÎϤ¹¤ë¤È¤¤ËÊÑ´¹¤¹¤ë¤Î¤¬µÈ¡Ë
49 #&Jcode::convert(\$content, "euc");
52 open(RSS,">$cache") or return &Util::paragraph_error($!);
57 # ¥í¡¼¥«¥ë¤«¤éRSS¤ò¼èÆÀ
58 open(RSS,$cache) or return &Util::paragraph_error($!);
59 while(<RSS>){ $content .= $_; }
62 # XML¥Õ¥¡¥¤¥ë¤«¤É¤¦¤«¥Á¥§¥Ã¥¯
63 if($content !~ /<(\?xml|rss) version/i){
64 return &Util::paragraph_error("XML¥Õ¥¡¥¤¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£");
66 my @status = stat($cache);
69 return $self->parse_rss(\$content);
72 #==============================================================================
73 # RSS¤ò¥Ñ¡¼¥¹¤·¤ÆHTML¤òÀ¸À®
74 #==============================================================================
78 my $charset = $self->get_charset($content);
83 if($$content =~ /<rss .*?version=\"(.*?)\"/i){
87 if($version eq "1.0"){
88 $$content =~ m#(/channel>|/language>)#si;
93 while ($$content =~ m|<item[ >](.+?)</item|gsi) {
101 $item =~ m#title>([^<]+)</#si;
104 $item =~ m#link>([^<]+)</#si;
106 $link =~ s/\s".*//g; # ¥À¥Ö¥ë¥¯¥©¡¼¥Æ¡¼¥·¥ç¥ó°Ê¹ß¤òÀÚ¤êÍî¤È¤¹
108 if ($version eq "2.0") {
109 if ($item =~ m#pubDate>([^<]+)</#si) {
113 if ($version eq "1.0") {
114 #if ($item =~ m#(description|dc\:date)>([^<]+)</#si) {
115 if ($item =~ m#dc\:date>([^<]+)</#si) {
119 if ($version eq "0.91") {
120 if($item =~ m#description>([^<]+)</#si){
126 &Jcode::convert(\$title,'euc',$charset);
127 &Jcode::convert(\$date ,'euc',$charset);
129 $buf .= "<li><a href=\"$link\">$title</a>";
137 if($count>50){ last; }
140 return $buf."</ul>\n";
143 #==============================================================================
144 # XML¥Õ¥¡¥¤¥ë¤«¤é¥¥ã¥é¥¯¥¿¥»¥Ã¥È¤ò¼èÆÀ¤·¤ÆJcode.pm¤Ç»ØÄê²Äǽ¤Êʸ»úÎó¤òÊֵѡ£
145 # »ØÄꤵ¤ì¤Æ¤¤¤Ê¤«¤Ã¤¿¾ì¹ç¤Ïundef¤¬ÊÖ¤ê¤Þ¤¹¡£
146 #==============================================================================
152 # ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤¬»ØÄꤵ¤ì¤Æ¤¤¤¿¾ì¹ç
153 if($$content =~ /encoding="(.+?)"/){
154 # ¤È¤ê¤¢¤¨¤ºÂçʸ»ú¤ËÊÑ´¹
157 # Shift_JIS¤Î¾ì¹çsjis¤Ë
158 if($encode eq "SHIFT_JIS" || $encode eq "SJIS" ||
159 $encode eq "WINDOWS-31J" || $encode eq "MS932" || $encode eq "CP932"){
163 } elsif($encode eq "EUC-JP"){
167 } elsif($encode eq "UTF-8"){
171 } elsif($encode eq "ISO-2022-JP" || $encode eq "JIS"){