summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2012-12-09 15:53:25 +0000
committerdakkar <dakkar@thenautilus.net>2012-12-09 15:53:25 +0000
commitdee275ea44030e283beb4e4c3f998c811d262fe3 (patch)
treee4ab5262dd62c2d826db813199e0ed8e783a93ad
parentfix date formatting (diff)
downloadfeeder-dee275ea44030e283beb4e4c3f998c811d262fe3.tar.gz
feeder-dee275ea44030e283beb4e4c3f998c811d262fe3.tar.bz2
feeder-dee275ea44030e283beb4e4c3f998c811d262fe3.zip
utility functions
-rw-r--r--feeder.pl44
-rw-r--r--lib/Feed/Utils.pm78
2 files changed, 100 insertions, 22 deletions
diff --git a/feeder.pl b/feeder.pl
index e0bd7ba..40a3f1f 100644
--- a/feeder.pl
+++ b/feeder.pl
@@ -3,6 +3,7 @@ use strict;
use warnings;
use 5.016;
use Feed;
+use Feed::Utils;
use Log::Log4perl;
Log::Log4perl::init(\<<'LOG');
@@ -13,35 +14,34 @@ log4perl.appender.Screen.layout = PatternLayout
log4perl.appender.Screen.layout.ConversionPattern = [%d{ISO8601}] (%c) %m{chomp}%n
LOG
-my $feed_class = Feed->with_traits(
+set_feed_class(Feed->with_traits(
'MailDir',
'FixDateTime',
'DeDupe',
'AuthorName',
-);
-
-sub feed {
- my (%args) = @_;
- my $feed = $feed_class->new({
- dupe_dsn => 'dbi:SQLite:dbname=dedup.db',
- maildir_base => 'maildir',
- %args,
- });
- $feed->process;
-}
+));
-feed(
- uri=>'http://www.gentoo.org/rdf/en/gentoo-news.rdf',
- mail_folders => 'Gentoo',
+set_feed_args(
+ dupe_dsn => 'dbi:SQLite:dbname=dedup.db',
+ maildir_base => 'maildir',
);
-feed(
- uri=>'http://feeds2.feedburner.com/sydneypadua/yBZX',
- mail_folders => 'Fun',
+
+feeds_from_opml(
+ {
+ mail_folders => 'Gentoo',
+ },
+ 'http://planet.gentoo.org/opml.xml',
);
-feed(
- uri=>'http://oglaf.com/feeds/rss/',
- title=>'Oglaf',
- mail_folders => 'Fun',
+
+feeds(
+ {
+ mail_folders => 'Fun',
+ },
+ 'http://feeds2.feedburner.com/sydneypadua/yBZX',
+ {
+ uri=>'http://oglaf.com/feeds/rss/',
+ title=>'Oglaf',
+ },
);
feed(
uri=>'http://feeds.gawker.com/io9/full',
diff --git a/lib/Feed/Utils.pm b/lib/Feed/Utils.pm
new file mode 100644
index 0000000..da279b3
--- /dev/null
+++ b/lib/Feed/Utils.pm
@@ -0,0 +1,78 @@
+package Feed::Utils;
+use strict;
+use warnings;
+use 5.016;
+my @methods;
+BEGIN {
+ @methods = qw(
+ set_feed_args
+ set_feed_class
+ feed
+ feeds
+ feeds_from_opml
+ );
+}
+use Sub::Exporter -setup => {
+ exports => \@methods,
+ groups => {
+ default => \@methods,
+ },
+};
+use XML::LibXML;
+use Try::Tiny;
+
+my $feed_class = 'Feed';
+sub set_feed_class {
+ $feed_class = shift;
+}
+my %feed_args = ();
+sub set_feed_args {
+ %feed_args = @_;
+}
+
+sub feed {
+ my (%args) = @_;
+ my $feed = $feed_class->new({
+ %feed_args,
+ %args,
+ });
+ $feed->process;
+
+ return;
+}
+
+sub feeds {
+ my ($common_args,@args) = @_;
+
+ for my $arg (@args) {
+ if (!ref($arg)) {
+ feed(%$common_args,uri=>$arg);
+ }
+ else {
+ feed(%$common_args,%$arg);
+ }
+ }
+
+ return;
+}
+
+sub feeds_from_opml {
+ my ($common_args,$opml_source) = @_;
+
+ my $opml = try {
+ XML::LibXML->load_xml(location => $opml_source);
+ } catch { warn $_; return };
+ return unless $opml;
+
+ for my $feed_node ($opml->findnodes(q{/opml/body/outline[@xmlUrl != '']})) {
+ my $title = $feed_node->findvalue('@title')
+ // $feed_node->findvalue('@text') // '';
+ my $uri = $feed_node->findvalue('@xmlUrl');
+
+ feed(%$common_args,title=>$title,uri=>$uri);
+ }
+
+ return;
+}
+
+1;