App-SpreadRevolutionaryDate
view release on metacpan or search on metacpan
lib/App/SpreadRevolutionaryDate/BlueskyLite.pm view on Meta::CPAN
}
if ($content =~ /<meta\s+property="og:image"\s+content="([^"]+)"/) {
my $img_url = $1;
unless ($img_url =~ m!://!) {
$url = "$url/" unless $url =~ m!/$!;
$img_url = $url . $img_url;
}
my $img_response = $ua->get($img_url);
return unless $img_response->is_success;
my $blob_req = HTTP::Request->new('POST', 'https://bsky.social/xrpc/com.atproto.repo.uploadBlob');
$blob_req->header('Content-Type' => $img_response->header('Content-Type'));
$blob_req->content($img_response->content);
my $blob_response = $self->{ua}->request($blob_req);
return unless $blob_response->is_success;
my $blob_content = decode_json($blob_response->decoded_content);
($card->{thumb}) = $blob_content->{blob};
}
return $card;
lib/App/SpreadRevolutionaryDate/BlueskyLite.pm view on Meta::CPAN
my $img_alt = $img->{alt} // ucfirst(fileparse($img->{path}, qr/\.[^.]*/));
my $img_bytes;
open my $fh, '<', $img->{path} or die "Cannot read $img->{path}: $!\n";
{
local $/;
$img_bytes = <$fh>;
}
close $fh;
my $blob_req = HTTP::Request->new('POST', 'https://bsky.social/xrpc/com.atproto.repo.uploadBlob');
$blob_req->header('Content-Type' => $mime_type);
$blob_req->content($img_bytes);
my $blob_response = $self->{ua}->request($blob_req);
return unless $blob_response->is_success;
my $blob_content = decode_json($blob_response->decoded_content);
$payload->{record}->{embed} = {
'$type' => 'app.bsky.embed.images',
images => [
{
lib/App/SpreadRevolutionaryDate/Target/Mastodon.pm view on Meta::CPAN
foreach my $msg (@msgs) {
my $params = {};
if (!$last_status_id) {
# First post
if ($img) {
$img = {path => $img} unless ref($img) && ref($img) eq 'HASH' && $img->{path};
my $img_alt = $img->{alt} // ucfirst(fileparse($img->{path}, qr/\.[^.]*/));
$img_alt = encode('UTF-8', $img_alt) if is_utf8($img_alt);
my $resp_img = $self->obj->upload_media($img->{path}, {description => $img_alt});
$params->{media_ids} = [$resp_img->{id}] if $resp_img->{id};
}
my $status = $self->obj->post_status($msg, $params);
$last_status_id = $status->{id} if ($status && ref($status) eq 'HASH' && $status->{id});
} else {
# Next posts with reply_to
$params->{in_reply_to_id} = $last_status_id;
my $status = $self->obj->post_status($msg, $params);
$last_status_id = $status->{id} if ($status && ref($status) eq 'HASH' && $status->{id});
@ARGV = ('--msgmaker=Gemini', '--test', '--gemini_process=AnniversairePeople');
seek DATA, $data_start, 0;
my $spread_gemini = App::SpreadRevolutionaryDate->new(\*DATA);
is($spread_gemini->config->gemini_process, 'AnniversairePeople', 'Gemini process option value');
my @gemini_prompt_keys = sort keys %{$spread_gemini->config->gemini_prompt};
is_deeply(\@gemini_prompt_keys, ['AnniversairePeople', 'MacronJokeColuche'], 'Gemini prompt option keys');
like($spread_gemini->config->gemini_prompt->{AnniversairePeople}, qr/^Quelles sont les personalit.s ayant leurs anniversaire le /, 'Gemini promt option value');
ok($spread_gemini->config->gemini_search->{MacronJokeColuche}, 'Gemini search set');
ok(!$spread_gemini->config->gemini_search->{AnniversairePeople}, 'Gemini search unset');
is($spread_gemini->config->gemini_img_path->{MacronJokeColuche}, '~/Images/coluche_macron.png', 'Gemini img path');
is($spread_gemini->config->gemini_img_url->{MacronJokeColuche}, 'https://upload.wikimedia.org/wikipedia/commons/3/38/Emmanuel_Macron_-_Caricature_%2840366024295%29.jpg', 'Gemini img url');
is($spread_gemini->config->gemini_img_alt->{MacronJokeColuche}, 'Caricature de Coluche disant : « Câest lâhistoire dâun mecâ¦Â » avec une caricature de macron', 'Gemini img alt');
__DATA__
[bluesky]
# Get these values from https://bsky.app/
identifier = 'Identifier'
password = 'Password'
[twitter]
# Get these values from https://apps.twitter.com/
channels = '#Channel1'
channels = '#Channel2'
channels = '#Channel3'
[Gemini]
api_key = APIKEY
prompt AnniversairePeople = "Quelles sont les personalités ayant leurs anniversaire le $day $month ? Donne une liste d'au maximum 6 personnes, puis après la liste donne l'URL sans formattage de la fiche wikipédia d'une seule d'entre elles, ne com...
prompt MacronJokeColuche = "Je veux envoyer chaque jour une blague différente sur les réseaux sociaux Mastodon et Bluesky. La blague doit être chaque fois suffisamment différente, toujours dans le style de Coluche et toujours sur Emmanuel Macro...
search MacronJokeColuche = 1
img_path MacronJokeColuche = '~/Images/coluche_macron.png'
img_url MacronJokeColuche = 'https://upload.wikimedia.org/wikipedia/commons/3/38/Emmanuel_Macron_-_Caricature_%2840366024295%29.jpg'
img_alt MacronJokeColuche = 'Caricature de Coluche disant : « Câest lâhistoire dâun mecâ¦Â » avec une caricature de macron'
( run in 2.680 seconds using v1.01-cache-2.11-cpan-b16cb0d3907 )