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