Plagger::Plugin::Namespace::MediaRSS - Media RSS extension


Plagger documentation Contained in the Plagger distribution.

Index


Code Index:

NAME

Top

Plagger::Plugin::Namespace::MediaRSS - Media RSS extension

SYNOPSIS

Top

  - module: Namespace::MediaRSS

DESCRIPTION

Top

This plugin parses Media RSS extension in the feeds and stores media information to entry enclosures. This plugin is loaded by default.

AUTHOR

Top

Tatsuhiko Miyagawa

SEE ALSO

Top

Plagger, http://search.yahoo.com/mrss


Plagger documentation Contained in the Plagger distribution.

package Plagger::Plugin::Namespace::MediaRSS;
use strict;
use base qw( Plagger::Plugin );

sub register {
    my($self, $context) = @_;
    $context->register_hook(
        $self,
        'aggregator.entry.fixup' => \&handle,
    );
}

sub handle {
    my($self, $context, $args) = @_;

    # Ick, I need to try the URL with and without the trailing slash
    for my $media_ns ("http://search.yahoo.com/mrss", "http://search.yahoo.com/mrss/") {
        my $media = $args->{orig_entry}->{entry}->{$media_ns}->{group} || $args->{orig_entry}->{entry};
        my $content = $media->{$media_ns}->{content} || [];
        $content = [ $content ] unless ref $content && ref $content eq 'ARRAY';

        for my $media_content (@{$content}) {
            my $enclosure = Plagger::Enclosure->new;
            $enclosure->url( URI->new($media_content->{url}) );
            $enclosure->auto_set_type($media_content->{type});
            $args->{entry}->add_enclosure($enclosure);
        }

        if (my $thumbnail = $media->{$media_ns}->{thumbnail}) {
            $args->{entry}->icon({
                url   => $thumbnail->{url},
                width => $thumbnail->{width},
                height => $thumbnail->{height},
            });
        }
    }

    1;
}

1;
__END__