The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

POE::Component::RSS - Event based RSS parsing

SYNOPSIS

  use POE qw(Component::RSS);

  POE::Component::RSS->spawn();

  $kernel->post('rss', 'parse', {
                         Item => 'item_state',
                       },
                     , $rss_string);

DESCRIPTION

POE::Component::RSS is an event based RSS parsing module. It wraps XML::RSS and provides a POE based framework for accessing the information provided.

RSS parser components are not normal objects, but are instead 'spawned' as separate sessions. This is done with PoCo::RSS's 'spawn' method, which takes one named parameter:

Alias = $alias_name>

'Alias' sets the name by which the session is known. If no alias is given, the component defaults to 'rss'. It's possible to spawn several RSS components with different names.

Sessions communicate asynchronously with PoCo::RSS - they post requests to it, and it posts results back.

Parse requests are posted to the component's 'parse' state, and include a hash of states to return results to, and a RSS string to parse, followed by an optional identity parameter. For example:

  $kernel->post('rss', 'parse',
                       { # hash of result states
                         Item => 'item_state',
                         Channel => 'channel_state',
                         Image => 'image_state',
                         Textinput => 'textinput_state',
                         Start => 'start_state',
                         Stop => 'stop_state',
                       },
                     , $rss_string, $rss_identity_tag);

Currently supported result events are:

Item = 'item_state'>

A state to call every time an item is found within the RSS file. Called with a reference to a hash which contains all attributes of that item.

Channel = 'channel_state'>

A state to call every time a channel definition is found within the RSS file. Called with a reference to a hash which contains all attributes of that channel.

Image = 'image_state'>

A state to call every time an image definition is found within the RSS file. Called with a reference to a hash which contains all attributes of that image.

Textinput = 'textinput_state'>

A state to call every time a textinput definition is found within the RSS file. Called with a reference to a hash which contains all attributes of that textinput.

Start = 'start_state'>

A state to call at the start of parsing.

Stop = 'stop_state'>

A state to call at the end of parsing.

If an identity parameter was supplied with the parse event, the first parameter of all result events is that identity string. This allows easy identification of which parse a result is for.

TODO

  • Provide event based generation of RSS files.

  • Provide more of the information in an RSS file as events.

  • We depend on the internals of XML::RSS. This is bad and should be fixed.

BUGS

  • Some events may be emitted even if no data was found. Calling code should check return data to verify content.

AUTHOR

Michael Stevens - michael@etla.org.

SEE ALSO

perl(1). This component is built upon XML::RSS(3).