From 4d670f36be4aa9843fd429f545fe340cbb2e4d7f Mon Sep 17 00:00:00 2001 From: Chip Black Date: Tue, 19 Nov 2013 04:42:19 -0600 Subject: [PATCH] Better rssing, now with tags! --- rss.cgi | 61 ++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 45 insertions(+), 16 deletions(-) diff --git a/rss.cgi b/rss.cgi index b207874..ca2a779 100755 --- a/rss.cgi +++ b/rss.cgi @@ -26,24 +26,36 @@ DOC } sub print_rss { - my ($name, @items) = @_; + my ($type, $name, @items) = @_; + + my ($title, $link); + if ($type eq 'user') { + $title = "${name}'s blërg"; + $link = "${baseurl}#$name"; + } elsif ($type eq 'tag' || $type eq 'ref') { + $title = $name; + my $basename = $name; + $basename =~ s/^.//; + $link = "${baseurl}#/$type/$basename"; + } print < - ${name}'s blërg - ${baseurl}#$name + $title + $link Textual vomit HEADER for my $i (@items) { my $data = xml_escape($i->{data}); - my $post_time = strftime("%a, %d %b %Y %H:%M:%S %Z", gmtime($i->{timestamp})); + my $post_time = strftime("%a, %d %b %Y %H:%M:%S %Z", localtime($i->{timestamp})); + my $author = defined $i->{author} ? $i->{author} : $name; print < $post_time - ${baseurl}get/$name/$i->{record} + ${baseurl}get/$author/$i->{record} $data ITEM @@ -73,16 +85,12 @@ while (my $q = new CGI::Fast) { -status => '301 Moved Permanently', -location => "${baseurl}rss/user/$username"); # And present the content in case their client is broken - my $n = $b->record_count - 1; - my @list = reverse map { - { - record => $_, - data => $b->fetch($_), - timestamp => $b->timestamp($_), - } - } ($n > 50 ? $n - 50 : 0)..$n; - $b->close; - print_rss($username, @list); + my $i = { + record => '?failed_redirect', + timestamp => time, + data => qq{Your RSS aggregator is dumb and isn't following 301 redirects. Please manually redirect it here: ${baseurl}rss/user/$username} + }; + print_rss(user => $username, $i); } elsif ($path[0] eq 'user') { my $username = $path[1]; my $b = Blerg::Database->open_existing($username); @@ -100,8 +108,29 @@ while (my $q = new CGI::Fast) { } } ($n > 50 ? $n - 50 : 0)..$n; $b->close; - print_rss($username, @list); + print_rss(user => $username, @list); } elsif ($path[0] eq 'tag') { + my $tag = $path[1]; + $tag =~ s/^H/#/; + my @list = Blerg::Database::tag_list($tag, 0, -1); + @list = map { + my $b = Blerg::Database->open_existing($_->{author}); + my $data = $b->fetch($_->{record}); + my $timestamp = $b->timestamp($_->{record}); + $b->close; + { + author => $_->{author}, + record => $_->{record}, + data => $data, + timestamp => $timestamp, + }; + } @list; + print header(-type => 'application/rss+xml'); + if (substr($tag, 0, 1) eq '#') { + print_rss(tag => $tag, @list); + } else { + print_rss(ref => $tag, @list); + } } elsif ($path[0] eq 'ref') { } elsif ($path[0] eq 'feed') { } -- 2.25.1