#!/usr/bin/perl # mylibrary2atom.pl - create Atom feeds from a MyLibrary instance # Eric Lease Morgan # Feburary 3, 2008 - first cut # require use MyLibrary::Core; use XML::Atom::Entry; use XML::Atom::Person; # define use constant NAME => 'Eric Lease Morgan'; use constant EMAIL => 'eric_morgan@infomotions.com'; # configure MyLibrary::Config->instance( 'mylibrary' ); $XML::Atom::DefaultVersion = '1.0'; # get the command my $cmd = $ARGV[ 0 ]; if ( ! $cmd ) { print "Usage: $0 []\n"; exit; } # get the optional id my $id = $ARGV[ 1 ]; # initialize my $dc = XML::Atom::Namespace->new( dc => 'http://purl.org/dc/elements/1.1/' ); my $person = XML::Atom::Person->new; $person->email( EMAIL ); $person->name( NAME ); my $link = XML::Atom::Link->new; $link->rel( 'self' ); $link->href( 'http://infomotions.com/feed.xml' ); my $feed = XML::Atom::Feed->new; $feed->id( 'tag:example.com,2006:feed-id' ); $feed->author( $person ); $feed->updated( '2002-10-02T15:00:00Z' ); $feed->add_link( $link ); # process facets if ( $cmd eq 'facets' ) { # process a specific facet if ( $id ) { my $facet = MyLibrary::Facet->new( id => $id ); $feed->title( $facet->facet_name . ' (' . $facet->facet_id . ')' ); foreach my $term_id ( $facet->related_terms( sort => 'name' )) { my $entry = XML::Atom::Entry->new; my $term = MyLibrary::Term->new( id => $term_id ); $entry->title( $term->term_name . ' (' . $term->term_id . ')' ); $entry->id( 'http://infomotions.com/ws/terms/' . $term->term_id ); $entry->summary( $term->term_note ); $entry->author( $person ); my $link = XML::Atom::Link->new; $link->type('text/html'); $link->rel('alternate'); $link->href('http://infomotions.com/ws/term/' . $term->term_id ); $entry->add_link($link); $entry->updated( '2002-10-02T15:00:00Z' ); $feed->add_entry( $entry ); } } # list all facets; not scalable else { $feed->title( 'All facets' ); foreach my $facet ( MyLibrary::Facet->get_facets( sort => 'name' )) { my $entry = XML::Atom::Entry->new; $entry->title( $facet->facet_name . ' (' . $facet->facet_id . ')' ); $entry->id( 'http://infomotions.com/ws/facets/' . $facet->facet_id ); $entry->summary( $facet->facet_note ); $entry->author( $person ); my $link = XML::Atom::Link->new; $link->type('text/html'); $link->rel('alternate'); $link->href('http://infomotions.com/ws/facets/' . $facet->facet_id ); $entry->add_link($link); $entry->updated( '2002-10-02T15:00:00Z' ); $feed->add_entry( $entry ); } } } # process terms elsif ( $cmd eq 'terms' ) { # process a specific term if ( $id ) { my $term = MyLibrary::Term->new( id => $id ); $feed->title( $term->term_name . ' (' . $term->term_id . ')' ); foreach my $resource_id ( $term->related_resources( sort => 'name' )) { my $entry = XML::Atom::Entry->new; my $resource = MyLibrary::Resource->new( id => $resource_id ); $entry->title( $resource->name . ' (' . $resource->id . ')' ); $entry->id( 'http://infomotions.com/ws/resources/' . $resource->id ); $entry->summary( $resource->note ); $entry->author( $person ); my $link = XML::Atom::Link->new; $link->type('text/html'); $link->rel('alternate'); $link->href('http://infomotions.com/ws/resource/' . $resource->id ); $entry->add_link( $link ); $entry->updated( '2002-10-02T15:00:00Z' ); $feed->add_entry( $entry ); } } # list all terms; not scalable else { $feed->title( 'All terms' ); foreach my $term ( MyLibrary::Term->get_terms( sort => 'name' )) { my $entry = XML::Atom::Entry->new; $entry->title( $term->term_name ); $entry->id( 'http://infomotions.com/ws/terms/' . $term->term_id ); $entry->summary( $term->term_note ); $entry->author( $person ); my $link = XML::Atom::Link->new; $link->type('text/html'); $link->rel('alternate'); $link->href('http://infomotions.com/ws/terms/' . $term->term_id ); $entry->add_link($link); $entry->updated( '2002-10-02T15:00:00Z' ); $feed->add_entry( $entry ); } } } # process resources elsif ( $cmd eq 'resources' ) { # process a specific resource if ( $id ) { my $resource = MyLibrary::Resource->new( id => $id ); $feed->title( $resource->name . ' (' . $resource->id . ')' ); my $entry = XML::Atom::Entry->new; $entry->title( $resource->name . ' (' . $resource->id . ')' ); $entry->id( 'http://infomotions.com/ws/resources/' . $resource->id ); $entry->summary( $resource->note ); $entry->author( $person ); my $link = XML::Atom::Link->new; $link->type('text/html'); $link->rel('alternate'); $link->href('http://infomotions.com/ws/resource/' . $resource->id ); $entry->add_link( $link ); $entry->updated( '2002-10-02T15:00:00Z' ); $feed->add_entry( $entry ); } # list all resources; not scalable else { $feed->title( 'All resources' ); foreach my $resource ( MyLibrary::Resource->get_resources( sort => 'name' )) { my $entry = XML::Atom::Entry->new; $entry->title( $resource->name . ' (' . $resource->id . ')' ); $entry->id( 'http://infomotions.com/ws/resources/' . $resource->id ); $entry->summary( $resource->note ); $entry->author( $person ); my $link = XML::Atom::Link->new; $link->type('text/html'); $link->rel('alternate'); $link->href('http://infomotions.com/ws/resources/' . $resource->id ); $entry->add_link($link); $entry->updated( '2002-10-02T15:00:00Z' ); $feed->add_entry( $entry ); } } } # error else { print "Unknown value for cmd: $cmd. Call Eric.\n" } # display and done print $feed->as_xml; exit;