127 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/local/bin/perl
 | 
						|
 | 
						|
use strict;
 | 
						|
use lib '/var/home/slowtwitch/slowtwitch.com/cgi-bin/articles/admin';
 | 
						|
use Links qw/:objects/;
 | 
						|
use Links::SiteHTML;
 | 
						|
use GT::Date;
 | 
						|
use XML::RSS;
 | 
						|
 | 
						|
$| = 1;
 | 
						|
local $SIG{__DIE__} = \&Links::fatal;
 | 
						|
Links::init('/var/home/slowtwitch/slowtwitch.com/cgi-bin/articles/admin');
 | 
						|
 | 
						|
main();
 | 
						|
 | 
						|
sub main {
 | 
						|
# ------------------------------------------------------------------
 | 
						|
# Main admin loop, displays html pages and other admin tasks.
 | 
						|
#
 | 
						|
    my @updates = get_recent_updates('Links', 'Add_Date', 'DESC', 10);
 | 
						|
    gen_rss(@updates);
 | 
						|
}
 | 
						|
 | 
						|
sub get_recent_updates {
 | 
						|
# ------------------------------------------------------------------
 | 
						|
# Get recent news updates from the DB and return an array of hashes
 | 
						|
#
 | 
						|
    my ($table, $sort_by, $sort_order, $limit) = @_;
 | 
						|
	my $db = $DB->table($table);
 | 
						|
	$db->select_options("ORDER BY $sort_by $sort_order", "LIMIT $limit");
 | 
						|
 | 
						|
	my $sth = $db->select();
 | 
						|
	my @loop;
 | 
						|
	while (my $link = $sth->fetchrow_hashref) {
 | 
						|
		$link = Links::SiteHTML::tags('link',$link);
 | 
						|
		push @loop, {
 | 
						|
            description     => $link->{Description},
 | 
						|
            title           => $link->{Title},
 | 
						|
            link            => $link->{detailed_url},
 | 
						|
        };
 | 
						|
	}
 | 
						|
    return @loop;
 | 
						|
}
 | 
						|
 | 
						|
sub gen_rss {
 | 
						|
# ------------------------------------------------------------------
 | 
						|
# Generate the rss output file
 | 
						|
#
 | 
						|
    my @updates = @_;
 | 
						|
 | 
						|
    use URI::Escape;
 | 
						|
 | 
						|
    my $date = GT::Date::date_get(time, "%yyyy%-%mm%-%dd%T%hh%:%mm%:%ss%%o%");
 | 
						|
    $date =~ s/^(.*)(\d\d)$/$1:$2/;
 | 
						|
 | 
						|
    my $rss = XML::RSS->new(version => '1.0', encoding => 'iso-8859-1');
 | 
						|
    $rss->channel(
 | 
						|
        title       => 'Slowtwitch.com',
 | 
						|
        link        => 'http://www.slowtwitch.com',
 | 
						|
        description => '',
 | 
						|
        dc          => {
 | 
						|
            date        => $date,
 | 
						|
            creator     => 'Slowtwitch.com',
 | 
						|
            publisher   => 'Slowtwitch.com',
 | 
						|
            rights      => 'Copyright 2007, Slowtwitch.com',
 | 
						|
            language    => 'en-us',
 | 
						|
        },
 | 
						|
        syn         => {
 | 
						|
            updatePeriod    => 'daily',
 | 
						|
            updateFrequency => '1',
 | 
						|
            updateBase      => $date,
 | 
						|
        }
 | 
						|
    );
 | 
						|
 | 
						|
    $rss->image(
 | 
						|
        title       => 'Slowtwitch.com',
 | 
						|
        url         => 'http://www.slowtwitch.com/favicon.ico',
 | 
						|
        link        => 'http://www.slowtwitch.com',
 | 
						|
        dc          => {
 | 
						|
            creator => 'Slowtwitch.com'
 | 
						|
        }
 | 
						|
    );
 | 
						|
 | 
						|
    foreach (@updates) {
 | 
						|
    	my $t = escape_for_xml($_->{title});
 | 
						|
        my $d = escape_for_xml($_->{description});
 | 
						|
 | 
						|
        $rss->add_item(
 | 
						|
            title       => $t,
 | 
						|
            link        => $_->{link},
 | 
						|
            description => $d,
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    $rss->save('/var/home/slowtwitch/slowtwitch.com/www/rss/slowtwitch.rss');
 | 
						|
}
 | 
						|
 | 
						|
sub escape_for_xml {
 | 
						|
	my $text = shift;
 | 
						|
 | 
						|
	$text =~ s/\x82/,/g;
 | 
						|
    $text =~ s-\x83-<em>f</em>-g;
 | 
						|
    $text =~ s/\x84/,,/g;
 | 
						|
    $text =~ s/\x85/.../g;
 | 
						|
 | 
						|
    $text =~ s/\x88/^/g;
 | 
						|
	$text =~ s-\x89- °/°°-g;
 | 
						|
 | 
						|
	$text =~ s/\x8B/</g;
 | 
						|
	$text =~ s/\x8C/Oe/g;
 | 
						|
 | 
						|
	$text =~ s/\x91/`/g;
 | 
						|
	$text =~ s/\x92/'/g;
 | 
						|
	$text =~ s/\x93/"/g;
 | 
						|
	$text =~ s/\x94/"/g;
 | 
						|
	$text =~ s/\x95/*/g;
 | 
						|
	$text =~ s/\x96/-/g;
 | 
						|
	$text =~ s/\x97/--/g;
 | 
						|
	$text =~ s-\x98-<sup>~</sup>-g;
 | 
						|
	$text =~ s-\x99-<sup>TM</sup>-g;
 | 
						|
 | 
						|
	$text =~ s/\x9B/>/g;
 | 
						|
	$text =~ s/\x9C/oe/g;
 | 
						|
 | 
						|
	return "<![CDATA[$text]]>";
 | 
						|
}
 |