lobstertoot/lobstertoot.pl

41 lines
1.1 KiB
Perl

#!/usr/bin/env perl
use 5.010;
use strict;
use warnings;
use Mastodon::Client;
use JSON::Tiny qw/encode_json decode_json/;
use File::Slurp;
use LWP::UserAgent;
my $s = decode_json read_file("state.json");
my $ua = new LWP::UserAgent;
$ua->agent("lobstertoot (".$ua->_agent.") - for info contact albino\@autistici.org");
my $resp = $ua->get("$s->{lobsters}->{url}/hottest.json");
die unless $resp->is_success;
my $stories = decode_json $resp->decoded_content;
my $masto = new Mastodon::Client (
name => "lobstertoot",
coerce_entities => 1,
%{ $s->{masto} },
);
for my $story (@{$stories}) {
next if grep {$_ eq $story->{short_id}} @{ $s->{lobsters}->{storiesdone} };
my $toot = "$story->{title} $story->{url} | $s->{lobsters}->{url}/s/$story->{short_id}";
for (@{ $story->{tags} }) {
$toot .= " #$_";
}
$masto->post_status($toot);
push @{ $s->{lobsters}->{storiesdone} }, $story->{short_id};
shift @{ $s->{lobsters}->{storiesdone} } if scalar(@{ $s->{lobsters}->{storiesdone} }) > 500;
}
open my $fh, ">state.json" or die $!;
print $fh encode_json($s);
close $fh;