summaryrefslogtreecommitdiff
path: root/tweet-archive.pl
blob: bac22c5b3059e28c8e6811f32140c26d7e6dd76d (plain)
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/usr/bin/env perl 
use v5.36;
use strict;
use warnings;
use experimental 'try';
use lib 'lib','local/lib/perl5';
use Path::Tiny;
use JSON::MaybeXS;
use Dakkar::TweetArchive;
use Dakkar::NotesArchive;
use Dakkar::TweetArchive::Store;
 
my $json_parser = JSON::MaybeXS->new(
    utf8 => 1,
    relaxed => 1,
);
 
my $conf = $json_parser->decode(
    do {
        try {
            path(__FILE__)->sibling('tweet-archive.conf')->slurp_raw()
        }
        catch ($e) {
            '{}'
        }
    },
);
 
my $store = Dakkar::TweetArchive::Store->new($conf->{db});
 
if ($conf->{twitter} && $conf->{twitter}{enabled}) {
    my $client = Dakkar::TweetArchive->new($conf->{twitter});
 
    my @responses;
    $client->client->ua->add_handler( response_done => sub { push @responses$_[0]; return } );
 
    try {
        my $latest_id = $store->latest_tweet_id;
 
        for my $tweet ($client->home_timeline($latest_id)->@*) {
            $store->store_tweet($tweet);
        }
 
        #$store->store_twitter_friends($client->friends); 
        $store->store_twitter_followers($client->followers);
    }
    catch ($e) {
        print "Twitter Fail: $e\n";
        for my $res (@responses) {
            next if $res->is_success;
            print $res->request->as_string;
            print $res->as_string;
            print "\n",'-' x 50,"\n\n";
        }
    };
};
 
if ($conf->{misskey} && $conf->{misskey}{enabled}) {
    my $client = Dakkar::NotesArchive->new($conf->{misskey});
 
    my @responses;
    $client->client->ua->add_handler( response_done => sub { push @responses$_[0]; return } );
 
    try {
        my $latest_id = $store->latest_note_id // '0';
 
        $client->timeline(
            $latest_id,
            sub($notes) {
                $store->store_note($_for $notes->@*;
            },
        );
 
        $store->store_misskey_following($client->following);
        $store->store_misskey_followers($client->followers);
    }
    catch ($e) {
        print "Misskey Fail: $e\n";
        for my $res (@responses) {
            next if $res->is_success;
            print $res->request->as_string;
            print $res->as_string;
            print "\n",'-' x 50,"\n\n";
        }
    };
};