summaryrefslogtreecommitdiffstats
path: root/bin/pinboard_export
blob: 3e61a09aeb5ce5282de249572c44671515f25fe0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!perl
use strict;
use warnings;
# PODNAME: pinboard_export
# ABSTRACT: data exporter for pinboard

use DBI;
use Getopt::Long qw(:config pass_through);
use WWW::Pinboard;

my ($dsn, $token);
GetOptions(
    'dsn=s'   => \$dsn,
    'token=s' => \$token,
);
die "--dsn is required" unless $dsn;
die "--token is required" unless $token;

my $dbh = DBI->connect($dsn, '', '', { RaiseError => 1, AutoCommit => 0 });
my $fromdt = '1970-01-01T00:00:00Z';
if (!$dbh->tables(undef, undef, 'posts')) {
    $dbh->do(<<'');
    CREATE TABLE `posts` (
        href TEXT NOT NULL,
        description TEXT NOT NULL,
        extended TEXT NOT NULL,
        tags TEXT NOT NULL,
        time TEXT NOT NULL,
        toread TEXT NOT NULL
    );

}
else {
    ($fromdt) = $dbh->selectrow_array(
        'SELECT time FROM posts ORDER BY strftime("%s", time) DESC LIMIT 1'
    );
}

my $api = WWW::Pinboard->new(token => $token);

if ($fromdt ge $api->update->{update_time}) {
    $dbh->disconnect;
    exit(0);
}

my $sth = $dbh->prepare(
    'INSERT INTO posts (href, description, extended, tags, time, toread) VALUES (?, ?, ?, ?, ?, ?)'
);

my $posts = $api->all(fromdt => $fromdt);

for my $post (@$posts) {
    $sth->execute(
        $post->{href},
        $post->{description},
        $post->{extended},
        $post->{tags},
        $post->{time},
        $post->{toread},
    );
}

$dbh->commit;
$dbh->disconnect;