Использование Perl для разбора Photobucket RSS-канал? - PullRequest
1 голос
/ 14 февраля 2012

Пытаюсь прочитать и разобрать канал RSS из Photobucket, и мне трудно разобраться в подэлементах элемента. Вот пример RSS XML:

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>
        <title>BlahBlah&apos;s Photobucket websitePic album media</title>
        <description>A feed of BlahBlah&apos;s images and videos for this album</description>
        <pubDate>Sun, 7 Aug 2011 20:11:31 MDT</pubDate>
        <link>http://s1100.photobucket.com/albums/g409/BlahBlah/websitePic/?sort=ascending</link>

        <lastBuildDate>Mon, 13 Feb 2012 21:04:43 MST</lastBuildDate>
        <generator>Photobucket feed generator</generator>
        <language>en-us</language>
        <ttl>60</ttl>
        <item>
            <title>F1 sidecar</title>

            <link>http://s1100.photobucket.com/albums/g409/BlahBlah/websitePic/?action=view&amp;current=IMG_0673.jpg&amp;sort=ascending</link>
            <dc:creator>BlahBlah</dc:creator>
            <description>&lt;p&gt;&lt;a href=&quot;http://s1100.photobucket.com/albums/g409/BlahBlah/&quot;&gt;BlahBlah&lt;/a&gt; posted a photo&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://s1100.photobucket.com/albums/g409/BlahBlah/websitePic/?action=view&amp;current=IMG_0673.jpg&amp;sort=ascending&quot; title=&quot;IMG_0673.jpg&quot;&gt;&lt;img src=&quot;http://i1100.photobucket.com/albums/g409/BlahBlah/websitePic/th_IMG_0673.jpg&quot; alt=&quot;IMG_0673.jpg&quot; /&gt;&lt;/a&gt;&lt;br&gt;F1 sidecar - IMG_0673.jpg&lt;/p&gt;</description>

            <guid>http://i1100.photobucket.com/albums/g409/BlahBlah/websitePic/IMG_0673.jpg</guid>
            <enclosure type="image/jpeg" url="http://i1100.photobucket.com/albums/g409/BlahBlah/websitePic/IMG_0673.jpg" />
            <media:content medium="image" type="image/jpeg" url="http://i1100.photobucket.com/albums/g409/BlahBlah/websitePic/IMG_0673.jpg">
                <media:title>F1 car</media:title>
                <media:description />
                <media:thumbnail url="http://i1100.photobucket.com/albums/g409/BlahBlah/websitePic/th_IMG_0673.jpg" />
            </media:content>
            <pubDate>Sun, 7 Aug 2011 20:11:31 MDT</pubDate>

        </item>

Я хочу получить элемент, чтобы получить его значение. Вот мой код, который не работает ...

use strict;
use CGI;
use XML::RSS;
use LWP::Simple;

my $test = CGI->new;
my $url = "http://feed1100.photobucket.com/albums/g409/BlahBlah/websitePic/feed.rss";

my $rss = XML::RSS->new();
my $data = get( $url );
$rss->parse( $data );

$rss->add_module(prefix=>'media', uri=>'http://search.yahoo.com/mrss/');

print $test->header("text/html");

my $channel = $rss->{channel};

foreach my $item ( @{ $rss->{items} } )
{
    my $link  = $item->{link};
    my $title = $item->{title};
    my $thumb = '';

    foreach my $b ( { $item->{'http://search.yahoo.com/mrss/'}->{'content'} })
    {
        print "here\n";
        if( $b->{'http://search.yahoo.com/mrss/'}->{'thumbnail'}->{'url'} )
        {
            $thumb = $thumb . ' ' . $b->{'http://search.yahoo.com/mrss/'}->{'thumbnail'}->{'url'};
        }
    }

    print $title, "\n", $link, "\nthumb=", $thumb, "\n\n\n";
}

print $test->end_html;

Он будет проходить по всем элементам канала и найдет элемент, но я не могу получить дочерние элементы. Я думаю, что мой синтаксис близок. Идеи?

Ответы [ 2 ]

1 голос
/ 14 февраля 2012

items вещь из вашего примера разбирается на эту структуру:

items => [
  {
    dc => {
      creator => "BlahBlah"
    },
    description => "<p><a href=\"http://s1100.photobucket.com/albums/g409/BlahBlah/\">BlahBlah</a> posted a photo</a></p><p><a href=\"http://s1100.photobucket.com/albums/g409/BlahBlah/websitePic/?action=view&current=IMG_0673.jpg&sort=ascending\" title=\"IMG_0673.jpg\"><img src=\"http://i1100.photobucket.com/albums/g409/BlahBlah/websitePic/th_IMG_0673.jpg\" alt=\"IMG_0673.jpg\" /></a><br>F1 sidecar - IMG_0673.jpg</p>",
    enclosure => {
      type => "image/jpeg",
      url => "http://i1100.photobucket.com/albums/g409/BlahBlah/websitePic/IMG_0673.jpg"
    },
    guid => "http://i1100.photobucket.com/albums/g409/BlahBlah/websitePic/IMG_0673.jpg",
    "http://purl.org/dc/elements/1.1/" => {
      creator => "BlahBlah"
    },
    "http://search.yahoo.com/mrss/" => {
      content => "\n                ...",
      title => "F1 car"
    },
    isPermaLink => "",
    item => "\n            \n\n ...",
    link => "http://s1100.photobucket.com/albums/g409/BlahBlah/websitePic/?action=view&current=IMG_0673.jpg&sort=ascending",
    pubDate => "Sun, 7 Aug 2011 20:11:31 MDT",
    title => "F1 sidecar"
  }
],

Например, я не вижу никакой клавиши "thumbnail" в "http://search.yahoo.com/mrss/".Это хорошая идея, чтобы сбросить ваши данные, чтобы увидеть, как именно они выглядят.Для этого см. Такие модули, как Data :: Dump .

0 голосов
/ 14 февраля 2012

Это выглядит как опечатка в этой строке:

foreach my $b ( { $item->{'http://search.yahoo.com/mrss/'}->{'content'} })

Я думаю, что вы пропускаете "@" перед первым "{" там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...