プロが教えるわが家の防犯対策術!

perlでRSSファイルを取得してTITLEタグの内容を抜き出したいのですが、
XML::RSSが使えない状況では、どのようにしたらいいでしょうか?
my $document = LWP::Simple::get($url)後に正規表現で取り出して
print タイトル<br>という風に表示しようと思っています。
よろしくお願いします。

----下記のページを参考にしています。
http://www.itmedia.co.jp/enterprise/articles/070 …

A 回答 (2件)

正規表現で処理する前にutf-8をEUCに変換します。


Perlの正規表現はEUC以外では環境次第ですので動作保障が出来ません。
その後、全テキスト読み込み、「<title>」「<link>」タグの付いた行をそれぞれ配列「@T」「@L」に代入という前提で
for(my $i=0; $i<=$#T; $i++){
$T[$i] =~ s/<title>(.+)<\/title>/$1/;
$L[$i] =~ s/<link>(.+)<\/link>/$1/;
  print '<a href="'.$L[$i]."'>".$T[$i]."</a><BR>\n";
}
で抽出が完了すると思います。
タイトルだけならLINKの部分を取ってください。
    • good
    • 0
この回答へのお礼

なるほど処理する文字コードの違いがでてくるわけですね。
正規表現でのマッチ方法も理解できました。
ソースを対応させて動かしてみます。
ありがとうございました。

お礼日時:2007/07/06 11:13

こんにちは、


あくまでも参考程度ですが。

以下のスクリプトをutf-8Nで保存して
ActivePerlで実行したら、

 naoyaのはてなダイアリー
 会社にお泊まり

と表示されます。

#! /usr/bin/perl
use strict;
use warnings;
use utf8;

#>----下記のページを参考にしています。
#リンク先のxmlサンプルをコピペしました。
my $document = << "END_OF_DOCUMENT";
<?xml version="1.0" encoding="utf-8" ?>
<rdf:RDF
xmlns="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xml:lang="ja">
<channel rdf:about="http://d.hatena.ne.jp/naoya/rss">
<title>naoyaのはてなダイアリー</title>
<link>http://d.hatena.ne.jp/naoya/</link>
<description>naoyaのはてなダイアリー</description>
<items>
<rdf:Seq>
<rdf:li rdf:resource="http://d.hatena.ne.jp/naoya/20050330/1112136510"/>


</rdf:Seq>
</items>
</channel>
<item rdf:about="http://d.hatena.ne.jp/naoya/20050330/1112136510">
<title>会社にお泊まり</title>
<link>http://d.hatena.ne.jp/naoya/20050330/1112136510< …
<description>夜遅かったので会社に泊まることにしました。</description>
<dc:date>2005-03-30T07:48:30+09:00</dc:date>
</item>
END_OF_DOCUMENT

my @titles = $document =~ /<title>([^<]*)<\/title>/ig;

binmode STDOUT, ":encoding(shiftjis)";

print "$_\n" for @titles;

exit;


>print タイトル<br>
この様子だとCGIだと思いますが、文字コードには
気をつけないといけませんね。
正規表現はあまり得意じゃないので、自信がありません。

あくまで参考程度に。

この回答への補足

use utf8;での参考パターンですね。
文字列の取得方法も参考になりました。
ありがとうございます。

補足日時:2007/07/06 11:14
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!