F.Ko-Jiの「一秒後は未来」

DailyFeedで一部のAtomフィードを読み込んだ時にリンク先がおかしくなる不具合を修正しました

いつも DailyFeed をご利用いただきありがとうございます。

一部のAtomフィードを読み込んでDailyFeedを作成したとき、ひとつのリンク先URLに複数のURLが連結されてしまう不具合がありましたので、さきほど修正しました。

原因としては、フィードのパースに利用している MagpieRSS が Atom の link 要素を適当に取り扱っていたためです。

そのままだと channel 要素に含まれる link 要素も entry 要素に含まれる link 要素も source 要素に含まれる link 要素も同等に取り扱ってしまっていて、おかしなことになっていました。

参考までに修正内容の diff を載せておきます。

+++ extlib/magpierss/rss_parse.inc	(working copy)
@@ -61,6 +61,7 @@
     var $intextinput        = false;
     var $inimage            = false;
     var $current_namespace  = false;
+    var $insource           = false;
     
 
     /**
@@ -187,6 +188,9 @@
                 $this->current_item['about'] = $attrs['rdf:about']; 
             }
         }
+        elseif ($this->initem and $el == 'source') {
+            $this->insource = true;
+        }
         
         // if we're in the default namespace of an RSS feed,
         //  record textinput or image fields
@@ -237,7 +241,7 @@
         // Magpie treats link elements of type rel='alternate'
         // as being equivalent to RSS's simple link element.
         //
-        elseif ($this->feed_type == ATOM and $el == 'link' ) 
+        elseif ($this->feed_type == ATOM and $el == 'link' and $this->initem and !$this->insource) 
         {
             if ( isset($attrs['rel']) and $attrs['rel'] == 'alternate' ) 
             {
@@ -277,6 +281,9 @@
             $this->current_item = array();
             $this->initem = false;
         }
+        elseif ($el == 'source' and $this->initem) {
+            $this->insource = false;
+        }
         elseif ($this->feed_type == RSS and $this->current_namespace == '' and $el == 'textinput' ) 
         {
             $this->intextinput = false;

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

著者について

fkoji

F.Ko-Ji

Webエンジニアやってます。最近は ドットインストール の開発がお仕事です。その傍ら、個人で Meity電車遅延なう梅酒.in#グラドル自画撮り部 の部室といったネットサービスを開発・運営してます。梅酒と草野球とリアル脱出ゲームが好きです。

» 詳しいプロフィールや運営サービスの一覧など