App-PM-Announce
view release on metacpan or search on metacpan
lib/App/PM/Announce/Feed/meetup.pm view on Meta::CPAN
package App::PM::Announce::Feed::meetup;
use warnings;
use strict;
use Moose;
extends 'App::PM::Announce::Feed';
use File::Temp;
has venue => qw/is ro/;
sub fetch_image {
my $self = shift;
my $image = shift;
{
my $uri = $image;
my $response = $self->agent->get( $uri );
$self->logger->debug( "Fetching image at $uri" );
die "Unable to fetch image at $uri" unless $response->is_success;
die "File at $uri doesn't seem to be an image" unless my ($extension) = $response->header( 'Content-Type' ) =~ m/image\/(.*)/;
# $extension = "jpg";
my $image = File::Temp->new( UNLINK => 0, SUFFIX => ".$extension" );
$self->logger->debug( "Saving image to $image" );
print $image $response->decoded_content;
close $image or warn $!;
$self->logger->debug( "Saved " . -s "$image" );
return $image;
}
}
sub announce {
my $self = shift;
my %event = @_;
my $username = $self->username;
my $password = $self->password;
my $uri = $self->uri;
my $venue = $event{venue} || $self->venue;
my $datetime = $event{datetime};
$self->get("http://www.meetup.com/login/");
$self->logger->debug( "Login as $username / $password" );
$self->submit_form(
fields => {
email => $username,
password => $password,
},
form_number => 1,
button => 'submitButton',
);
die "Wasn't logged in" unless $self->content =~ m/Your Meetup Groups/;
my %optional;
my ($image, $temporary_image);
if ($image = $event{image}) {
if ($image =~ m/^https?:\/\//) {
$image = $self->fetch_image( $image );
$temporary_image = 1;
}
$optional{attachfile} = $image.'';
$self->logger->debug( "Attaching $image" );
}
$self->get($uri);
my $hour12 = $datetime->hour;
$hour12 -= 12 if $hour12 > 12;
$hour12 = 12 unless $hour12;
$self->submit_form(
fields => {
title => $self->format( \%event => 'title' ),
description => $self->format( \%event => 'description' ),
venueId => $venue,
origId => $venue,
'event.day' => $datetime->day,
'event.month' => $datetime->month,
'event.year' => $datetime->year,
'event.hour12' => $hour12,
'event.minute' => $datetime->minute,
( run in 1.676 second using v1.01-cache-2.11-cpan-140bd7fdf52 )