
RSSからデータ取り出しについて、ご教授ください。
use XML::RSS;
をperlに実装して、RSSファイルを分解し、必要なデータだけ取り出すスクリプトを使用しています。
データがとれなくなったので、ソースを調べたところ、配布元が改造をしたらしく
<rss version="2.0">
<channel>
<title>RSSによる順位公開</title>
<item>
<title>タイトル1</title>
<rank>1</rank>
<preranks>
<rank>3</rank>
</preranks>
</item>
<item>
<title>タイトル2</title>
<rank>2</rank>
<preranks>
<rank>10</rank>
</preranks>
</item>
のようになっていました。
<rank> はそのときのタイトルの表示ランキングで、<preranks>は、RSSが更新される以前の表示ランキングを示しています。
ちなみに、preranks からネストしている rank を別の表記にしたり、ネストしない構造に変更することは、対応できないとの回答でした。
$rss->parse( RSSのURL );
for (@{$rss->{'items'}}) {
$el00 = $_->{title};
$el01 = $_->{rank};
}
と実行すると、$el00は、タイトル1 や タイトル2 と希望通りの形に分解できるのですが、$el01 は 13 や 210 など、<preranks> の内側の <rank> と並べた数字で表示されてしまいます。
といって、 $el01 = $_->{preranks}; でも数字がとれません。
こうした構造のRSSで、<rank> と <preranks> をデータとして分解するには、どんな記述をしたらいいのでしょうか?
よろしくご教授お願いします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
XML::RSSモジュールを使って試してみましたが、パースがうまくいかないですね。
XML::RSSモジュールにこだわらなくていいのなら、XML::XPathモジュールを使えば、下記のようなスクリプトでパースができると思います。
#!/usr/bin/env perl
use v5.16;
use warnings;
use utf8;
use open IO => qw/:utf8 :std/;
use autodie;
use XML::XPath;
my $string = << 'EOF';
<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
<channel>
<title>RSSによる順位公開</title>
<item>
<title>タイトル1</title>
<rank>1</rank>
<preranks>
<rank>3</rank>
</preranks>
</item>
<item>
<title>タイトル2</title>
<rank>2</rank>
<preranks>
<rank>10</rank>
</preranks>
</item>
</channel>
</rss>
EOF
my $xpath = XML::XPath->new(xml => $string);
for my $item ($xpath->findnodes('//item'))
{
say 'タイトル:', $item->findvalue('title');
say '新ランク:', $item->findvalue('rank');
say '旧ランク:', $item->findvalue('preranks/rank');
}
実行結果は下記のとおりとなります。
タイトル:タイトル1
新ランク:1
旧ランク:3
タイトル:タイトル2
新ランク:2
旧ランク:10
XPathは一度覚えちゃえば、いろいろな場面で活用できます。
表示させたいところを細かく指定できるのが便利です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- PHP 【スプレッドシート】順位のつけ方 2 2022/08/17 13:27
- 数学 線形代数 正則 階数 3 2023/03/22 07:52
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- JavaScript 【jquery】EasyUIのSubGridにMySQLのテーブルデータを表示&編集にしたい 5 2022/05/02 13:10
- gooブログ gooブログについて 1 2022/05/09 09:46
- 教えて!goo RSSについて 1 2022/08/17 15:15
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- 大学・短大 | 1 -2 -2c+1| |2| A=| 2 -1 -c+2 | b=|2| | 1 -c+2 2 2 2023/05/14 21:42
- Excel(エクセル) エクセルでの勤務表作成、インターバルの設定について 3 2022/06/03 15:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
wikipediaのAPIの取り込みについて
-
指定フォルダ内のファイル一括DL
-
「デバイスは PRN を初期化でき...
-
Excel VBAでリンク切れをチェッ...
-
例外処理のフローチャートの記...
-
VBAで別モジュールへの変数の受...
-
vba userFormのSubを標準モジュ...
-
VBAのコードを書くところ(初心...
-
ファイルロックについて
-
標準モジュールを削除したい。(...
-
VBのフォームモジュールと標準...
-
モジュールとサブルーチン
-
ExcelVBA:パブリック オブジェ...
-
use warningsがうるさい?
-
エラトステネスの篩について。
-
エクセルVBAでシートモジュール...
-
"JScript"が見つかりません!
-
XPモードでIE6のスクリプトデバ...
-
プロシージャの戻り値を取得す...
-
vba で f1 キーを押すと、特定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perlで定義済みの関数名を使っ...
-
Perl/TkでURLを既定のブラウザ...
-
TwitterAPI1.1でGetメソッド(...
-
mechanizeのタイムアウト処理に...
-
Win32でInputBoxを実装するには?
-
Perlでのselfの書き方
-
正規表現で指定範囲の文字列の取得
-
Perl webのテキストボックスに...
-
perlでのポインタの使い方
-
例外のキャッチ方法
-
Perl での XML 処理での DTD 宣...
-
Perl 強制終了の回避について
-
perlでhtmlファイルを取得した...
-
Perl/Tk Entry に対して見出し...
-
Perl LWPでのIPv6エラー
-
PerlのWeb::Scraperと正規表現...
-
web文書を取得するプログラムの...
-
Web::Scraperの使い方で
-
wikipediaのAPIの取り込みについて
-
正規表現でURLを抽出するには。
おすすめ情報