App-BookmarkFeed
view release on metacpan or search on metacpan
}
},
"configure" : {
"requires" : {
"ExtUtils::MakeMaker" : "6.52"
}
},
"runtime" : {
"requires" : {
"CommonMark" : "0",
"DateTime" : "0",
"DateTime::Format::ISO8601" : "0",
"File::Slurper" : "0",
"Mojo::SQLite" : "0",
"Mojolicious" : "0",
"perl" : "5.036000"
}
},
"test" : {
"requires" : {
"XML::RSS" : "0"
}
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
version: '1.4'
name: App-BookmarkFeed
no_index:
directory:
- t
- inc
requires:
CommonMark: '0'
DateTime: '0'
DateTime::Format::ISO8601: '0'
File::Slurper: '0'
Mojo::SQLite: '0'
Mojolicious: '0'
perl: '5.036000'
resources:
repository: https://src.alexschroeder.ch/bookmark-feed.git
version: 1.01
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
Makefile.PL view on Meta::CPAN
AUTHOR => 'Alex Schroeder',
LICENSE => 'agpl_3',
MIN_PERL_VERSION => '5.36.0',
EXE_FILES => [
'script/bookmark-feed',
],
PREREQ_PM => {
'Mojolicious' => 0, # for Mojo::Template
'Mojo::SQLite' => 0,
'File::Slurper' => 0,
'DateTime' => 0,
'DateTime::Format::ISO8601' => 0,
'CommonMark' => 0,
},
TEST_REQUIRES => {
'XML::RSS' => 0,
},
CONFIGURE_REQUIRES => {
'ExtUtils::MakeMaker' => '6.52',
},
META_MERGE => {
'meta-spec' => { version => 2 },
lib/App/BookmarkFeed.pm view on Meta::CPAN
our $VERSION = 1.01;
use v5.36;
use File::Basename;
use File::Spec;
use Mojo::SQLite;
use Mojo::Template;
use File::Slurper qw(read_text write_text);
use CommonMark qw(:node :event);
use DateTime;
use DateTime::Format::ISO8601;
sub main (@files) {
my $feed_file = pop(@files);
die "Usage:\nbookmark-feed markdown-files... feed-file\n" unless @files;
my ($filename, $dirs, $suffix) = fileparse($feed_file, ".rss", ".xml");
my $db_file = File::Spec->catfile($dirs, $filename . ".db");
my $sql = Mojo::SQLite->new("sqlite:$db_file");
$sql->migrations->from_data->migrate;
my $db = $sql->db;
for (@files) { die "$_ is not readable\n" unless -r $_ }
my @items;
for my $file (@files) {
my $dt = DateTime->from_epoch(epoch => (stat($file))[9]);
my $md = read_text($file);
my $parser = CommonMark::Parser->new;
$parser->feed($md);
my $doc = $parser->finish;
push(@items, to_items($doc, $dt));
}
update($db, @items);
write_feed($db, $feed_file);
}
lib/App/BookmarkFeed.pm view on Meta::CPAN
sub write_feed ($db, $feed_file) {
my $mt = Mojo::Template->new(vars => 1);
my $items = $db->select('items',
[qw(date url title description)],
{ },
{
order_by => {-desc => 'date'},
limit => 40,
})->hashes;
$_->{date} = DateTime::Format::ISO8601
->parse_datetime($_->{date})
->strftime("%a, %d %b %Y %H:%M:%S %z")
for @$items;
my $feed = $mt->render(<<'EOT', { items => $items});
<rss version="2.0">
<channel>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<title>Bookmarks</title>
% for my $item (@$items) {
<item>
( run in 0.331 second using v1.01-cache-2.11-cpan-05444aca049 )