- 追加された行はこの色です。
- 削除された行はこの色です。
* #showrss の不具合?? [#a8595d9f]
- ページ: [[BugTrack2]]
- 投稿者: [[matsuo2]]
- 優先順位: 普通
- 状態: 着手
- カテゴリー: プラグイン
- 投稿日: 2006-04-29 (土) 21:03:31
- バージョン:
** メッセージ [#s9666085]
[[official:質問箱3/378]]
天気予報を表示しようとしたのですが
◆天気 愛知 西部(名古屋)
#showrss(http://weather.goo.ne.jp/area/5110.rdf,0,1)
↑表示されない。(06/04/06)
◆天気 愛知 東部(豊橋)
#showrss(http://weather.goo.ne.jp/area/5120.rdf,0,1)
↑こちらはうまく表示される。
他のrssリーダではうまく表示されていたので#showrssに原因があるのではないかと・・・
***回答 [#f75079e5]
- mb_detect_encoding() が EUCのところをUTF-8と誤検出するのが原因でした。判定部分に手を入れてみました。 -- [[matsuo2]] &new{2006-04-16 (日) 19:43:15};
--- showrss.inc.php.org
+++ showrss.inc.php
@@ -52,9 +51,13 @@
if (! class_exists($class)) $class = 'ShowRSS_html';
list($rss, $time) = plugin_showrss_get_rss($rssurl, $usecache);
+
if ($rss === FALSE)
return '<p>showrss: cannot get rss from server.</p>' . "\n";
+ if (is_string($rss))
+ return "<p>showrss: error ${rss}\n";
+
$obj = new $class($rss);
$timestamp = '';
@@ -210,12 +213,20 @@
$this->is_item = FALSE;
$this->tag = '';
- // Detect encoding
- $this->encoding = mb_detect_encoding($buf);
+ /* Detect encoding ex. <?xml version="1.0" encoding="EUC-JP" ?> */
+ $lines = split(">", $buf, 1);
+ if (preg_match( "/encoding=\"(.+)\"/i", $lines[0], $encoding)) {
+ $this->encoding = $encoding[1];
+ } else {
+ $this->encoding = mb_detect_encoding($buf);
+ }
+
+ // Convert to utf-8
if (! in_array(strtolower($this->encoding), array('us-ascii', 'iso-8859-1', 'utf-8'))) {
$buf = mb_convert_encoding($buf, 'utf-8', $this->encoding);
$this->encoding = 'utf-8';
}
+
$xml_parser = xml_parser_create($this->encoding);
xml_set_element_handler($xml_parser, array(& $this, 'start_element'), array(& $this, 'end_element'));
xml_set_character_data_handler($xml_parser, array(& $this, 'character_data'));
- なるほど、rss自身が申告しているエンコーディングがあるならばそれを尊重するべき、という事ですね :) -- [[henoheno]] &new{2006-04-30 (日) 23:02:10};
- ふむ、例示されたshowrssの例は、引数の判定を厳密にするとエラーになる気がします(というかそうした作業を既に始めていて、実際にそうなっています) -- [[henoheno]] &new{2006-05-02 (火) 11:54:55};
こうすると
#showrss(http://weather.goo.ne.jp/area/5110.rdf,0,1)
こうなる
#showrss: Template not found: 0
-- 恐らくはテンプレートの部分 (default等) を省略される意図で書かれているのに、showrssの実装は引数の省略を許さないつくりである(二番目の引数は必ずテンプレートの名称でなければならない)ため、評価がずれているのでしょう。 -- [[henoheno]] &new{2006-05-02 (火) 11:58:37};
本来のusageはこのようだ
#showrss(URI-to-RSS[,default|menubar|recent[,Cache-lifetime[,Show-timestamp]]])
こうされたいのかな?
#showrss(http://weather.goo.ne.jp/area/5110.rdf,default,1)
officialサイトを読む例 (templateはmenubar)
#showrss(http://pukiwiki.sourceforge.jp/?cmd=rss10,menubar,1,0)
- 当方ではshowrss.inc.php (1.18以前)にて上記天気予報 2例共、正常に表示されます。showrss.inc.php (1.19)ではTemplate not found・・です。 -- [[hirokasa]] &new{2006-05-02 (火) 21:19:48};
- 第2引数を書くか、カンマで区切れば良いのですね。引数の省略は不可ってことか。 -- [[hirokasa]] &new{2006-05-03 (水) 09:03:53};
#showrss(http://weather.goo.ne.jp/area/5110.rdf,,0,1)
#comment