Perl初心者スレ(マジレス回答)at TECH
Perl初心者スレ(マジレス回答) - 暇つぶし2ch293:デフォルトの名無しさん
14/06/08 05:04:05.20 LT2twBt5
複数のRSSフィードを結合して一つのRSSを生成したい。
その際、「生成されたフィード記事のリンクURLすべてを任意のリンク先に指定する。」
このやり方を教えてください。

XML::FeedPP、XML::TreePPというモジュールを用い、下記のCGIプログラムを使用して自動更新する1つのフィードを生成するところまでは出来ました。
しかし、他の部分はチョロチョロと変えることができるのですが、記事リンクだけはどうしても変えることができません。全部の記事リンクを、ある1つのリンクに変換したいだけです。

#!/usr/bin/perl

use XML::TreePP;
use XML::FeedPP;

my $feed = XML::FeedPP::RDF->new();
$feed->merge( "結合したいrssフィード1" );
$feed->merge( "結合したいrssフィード2" );
my $now = time();
$feed->sort_item();
$feed->pubDate( $now );
my $atom = $feed->to_file( "index.rdf", "UTF-8" );

print "Content-type: text/plain\n\n";
print "出力完了\n";

使ってるレンタルサーバーはロリポップです。

複数のフィード(RSS、Atomなど)をまとめるCGI
URLリンク(blog.audiofan.net)
[Perl] XML::FeedPP - RSS・RDF・Atomフィードの解析・生成・変換・結合
URLリンク(www.kawa.net)
XML::FeedPP
URLリンク(metacpan.org)
URLリンク(search.cpan.org)

294:デフォルトの名無しさん
14/06/10 06:01:49.29 hRaawaun
>>293
WebProg
URLリンク(nozomi.2ch.net)

295:デフォルトの名無しさん
14/06/10 12:30:22.68 zpbxFFHG
URLリンク(s1.gazo.cc)
こういった10行で一組のデータの中に
---
市民の...

yerles
warrior
---
というパターンが多くあります。
マッチ検索したいのは
---
市民の...

dog
warrior
---
というパターンです。
"市民"という文字を見つけたら
2行下に
"dog"という文字があるならば
その、"市民の..."を出力して欲しいです。

ファイル読んで単純マッチするぐらいしか今はできません
open (my $in , "<" , "./cdatan_5_101.s2");
while (<in>){
  if (/yerles/){print "matched\n"}
}
close $in;



}

296:デフォルトの名無しさん
14/06/10 13:44:16.05 kKsVvptA
>>295
URLリンク(ideone.com)

297:デフォルトの名無しさん
14/06/10 13:58:26.18 kKsVvptA
手抜きすぎた。

>>295
URLリンク(ideone.com)

298:デフォルトの名無しさん
14/06/10 14:45:55.30 zpbxFFHG
凄い。ありがとう。
出てきたshiftとか勉強してみます
感謝

299:デフォルトの名無しさん
14/06/11 22:22:53.08 PCU6+AOL
どこにshiftの出番があるのか?と思ったらそう言うことか。
普通に配列に突っ込んで、マイナスのインデクスでアクセスすりゃいいやん。
$ perl -Mvars=@a -lne 'push @a, $_ ; next if !/dog/ ; next if $a[-3] !~ /市民/ ; print $a[-3]' File
メモリ喰いが気になるのなら、
$ perl -Mvars=%h -lne '$h{$.} = $_ if /市民/ ; next if !/dog/ ; next if ! defined $h{$. - 2} ; print $h{$. - 2}' File
とか、で節約すりゃいい。、、、けど、今時そんなの気にする必要もないだろ

上のワンライナーでやってる事は、
$ perl -MO=Deparse -Mvars...略
でわかる。

300:デフォルトの名無しさん
14/06/12 13:15:46.45 qt4Roz23
恰好をつけるなら、リングバッファでも書くところですが、回答としては、あんまりだと思ったので。
2行固定なら、別に使わなくても。
perl -ne '($_, $x, $y) = ($x, $y, $_); $y =~ /dog/ && /市民/ && print' File

何も考えなくていいなら、正規表現でバッサリ。
perl -e 'print((local $/ = <>) =~ /(^.*市民.*\n).*\n.*dog/gm)' File


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch