• ベストアンサー

RSSの生成順

現在、KENTWEBのWEBPATIOに下記スクリプトを追加してRSS機能を利用していますが、 http://jyosui.xrea.jp/hicnt/hicnt.cgi?pid=patiopl&img=0&len=3&url=http://jyosui.xrea.jp/download/wpfeedpl RSSを生成しているこのファイルは、RSSを記事生成順(記事ナンバー順)で生成するようです。 これをRSSの日時順にするにはどうしたらいいでしょうか? 詳しい方おられましたらご指南お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kt_yuka
  • ベストアンサー率53% (8/15)
回答No.1

簡単にソースを見ただけなので、違ってたらごめんなさい。 rss1 rss2 atom という各サブルーチンでは、@feed の値を順に出力しているようなので、 それらが呼び出される手前、具体的には if($rss1file) { &rss1; } if($rss2file) { &rss2; } if($atomfile) { &atom; } というところの前で、@feed を表示したい順に並べ替えてやれば良いと思います。 my($num,$rno,$sub,$pdate,undef,undef,$nam,$com) = split(/<>/, $feed[$i]); というところからして、4番目の $pdateが日付だと思うので、 @feed = map {$_->[0]} sort { $b->[4] <=> $a->[4] } map {[$_, split /\t/]} @feed; としてやれば良いと思います。 RSS関連は仕様が厳格ではない部分があるので、RSSリーダーによっては、出力順ではなくて 勝手に日付順にするかもしれません。

falcon_jun
質問者

お礼

ご返信ありがとうございます。 早速、kt_yukaさんのご指示を仰ぎたいと思うのですが、上記の @feed = map {$_->[0]} sort { $b->[4] <=> $a->[4] } map {[$_, split /\t/]} @feed; をwpfeed.plの何行目にこちらを記述するのかわからなかったので、 すみませんが追加箇所のご指示までいただけると大変助かります。 ずっと誰からも回答をいただけていませんでしたのでこの度は本当にお世話になります。お手数おかけしますが、よろしくお願いいたします。

その他の回答 (2)

  • kt_yuka
  • ベストアンサー率53% (8/15)
回答No.3

やっぱりちゃんと見ないと分からないかも。 data/feed.log の内容を数行でいいので見せてもらえますか? 更新日のセットされている個所とか違うかも。

falcon_jun
質問者

お礼

お手数おかけします。。 Sat, 06 Mar 2010 13:53:32 +0900<>Sat, 06 Mar 2010 15:50:50 +0900<> 3<><>試験最新<>2010-03-06T13:53:32+09:00<>Sat, 06 Mar 2010 13:53:32 +0900<>2010-03-06T13:53:32+09:00<>ファル<>わをん<><> 2<><>試験02<>Sat, 06 Mar 2010 13:49:07 +0900<>Sat, 06 Mar 2010 13:49:07 +0900<>2010-03-06T15:50:50+09:00<>ファル<>はまやらわ<>1267850947<> 1<><>試験01<>Tue, 02 Mar 2010 02:47:39 +0900<>Tue, 02 Mar 2010 02:47:39 +0900<>2010-03-06T13:34:20+09:00<>ファル<>あかさたな<>1267465659<> 試験では3件の記事をアップし、2番目の記事を更新してRSSを更新してみたのですが、実際に吐かれるRSSは 06T13:34:20+09:00 この部分の順序になっているようです。よろしくお願いします。。

  • kt_yuka
  • ベストアンサー率53% (8/15)
回答No.2

158行目の「shift(@feed);」の上か下でしょうかね。 上か下で挙動が変わると思いますが、shift(@feed);を何のためにやっているかまで 追っていないので、試してみてください。

falcon_jun
質問者

お礼

ご指示に従い記述を追加してみたのですが、RSSを更新しても並びは時間順ではなく記事生成順のままでした。一応どのように追加したかもご報告しますね。。 ---------- パターン1 ---------- @feed = map {$_->[0]} sort { $b->[4] <=> $a->[4] } map {[$_, split /\t/]} @feed; shift(@feed); ← 158行目 if($rss1file) { &rss1; } if($rss2file) { &rss2; } if($atomfile) { &atom; } } ---------- パターン2 ---------- shift(@feed); ← 158行目 @feed = map {$_->[0]} sort { $b->[4] <=> $a->[4] } map {[$_, split /\t/]} @feed; if($rss1file) { &rss1; } if($rss2file) { &rss2; } if($atomfile) { &atom; } } もし追加方法がおかしいようでしたらご指摘いただけると嬉しいです。お手数おかけして申し訳ないです。よろしくお願いします。