新しもの好きのダウンロード RSS

車輪?


#!/path/to/perl
use strict;
use warnings;
use lib( './lib' );
use Encode;
use CGI::Carp qw( fatalsToBrowser );
use Data::Dumper;
use XML::RSS;
use WWW::Atarashimonozuki::Scraper;

my $CHARSET = 'utf8';
my $TITLE   = '新しもの好きのダウンロード';
my $DESC
    = 'Mac で使えるフリーソフト(無料ソフト)、フリーウェア、シェアウェア、製品アップデータの新着情報。';
my $RIGHTS = 'Copyright(c) 1996-2007 Atsushi Hayakawa.';

my $o      = WWW::Atarashimonozuki::Scraper->new();
my @result = $o->scrape();

my $rss    = new XML::RSS( version => '1.0' );
$rss->channel(
    title       => _decode( $TITLE ),
    link        => 'http://mac.page.ne.jp/',
    description => _decode( $DESC ),
    dc          => {
        date     => $o->{last_modified},
        language => 'ja',
        rights   => $RIGHTS,
    },
);

foreach my $item ( @result ) {
    $rss->add_item(
        title       => get_title( $item ),
        link        => $item->{url},
        description => _decode( $item->{desc} ) . get_byte( $item ),
        dc          => { date => $item->{date}, },
    );
}

print qq{Content-type: application/xml\n\n};
print $rss->as_string;

sub get_title {
    my $item  = shift;
    my $title = _decode( $item->{name} );
    $title .= ' (' . $item->{lang} . ') ';
    $title .= get_title_desc( $item );

    return $title;
}

sub get_title_desc {
    my $item = shift;
    my @desc;
    push( @desc, '9' )      if $item->{is_os9};
    push( @desc, 'X' )      if $item->{is_osx};
    push( @desc, 'ppc' )    if $item->{is_ppc};
    push( @desc, 'intel' )  if $item->{is_intel};
    push( @desc, 'ub' )     if $item->{is_ub};
    push( @desc, 'widget' ) if $item->{is_widget};

    if ( @desc ) {
        return '[' . join( ', ', @desc ) . ']';
    }

    return '';
}

sub get_byte {
    my $item = shift;
    return $item->{byte} ? ' (' . $item->{byte} . ')' : '';
}

sub _decode {
    return decode( $CHARSET, shift );
}