WWW::Facebook::API
, and I tried to wrestle with Facebook's OAuth or similar implementation to get the access I need to do what I want. And then I figured out another way.- #!/usr/bin/perl
- # usage: echo big long string of text | facebook.pl
- # returns "big long string of text"
- use 5.010 ;
- use strict ;
- use warnings ;
- use Carp ;
- use Data::Dumper ;
- use Net::SMTP::TLS ;
- use Getopt::Long ;
- use IO::Interactive qw{ interactive } ;
- use subs qw{ send_mail get_credentials } ;
- my $status = join ' ', @ARGV ;
- if ( length $status < 1 ) {
- while ( <stdin> ) {
- $status .= $_ ;
- }
- chomp $status ;
- }
- my $identity = 'MY_IDENTITY_STRING' ;
- my @to ;
- push @to, 'GETYOUROWNSPECIALEMAILFROM@m.facebook.com' ;
- my $body = $status ;
- my %msg ;
- $msg{ body } = $body ;
- $msg{ to } = \@to ;
- $msg{ cc } = \@cc ;
- say send_mail %msg ;
- exit ;
- sub get_credentials {
- #this is the point where my setup sucks
- my %creds ;
- my $config = '/home/jacoby/.smtp_identities' ;
- if ( open my $fh, '<', $config ) {
- while ( <$fh> ) {
- my $line = $_ ;
- chomp $line ;
- $line = ( split m{\#}mx )[ 0 ] ;
- next if length $line < 1 ;
- $line =~ s{\s}{}gmx ;
- my @line = split m{,}mx, $line ;
- next if $line[ 0 ] ne $identity ;
- $creds{ from } = $line[ 1 ] ;
- $creds{ server } = $line[ 2 ] ;
- $creds{ username } = $line[ 3 ] ;
- $creds{ password } = $line[ 4 ] ;
- }
- close $fh ;
- }
- if ( defined $creds{ username } ) {
- return %creds ;
- }
- say 'No identity chosen' ;
- exit 1 ;
- }
- sub send_mail {
- my %msg = @_ ;
- my %creds = get_credentials ;
- my $body = $msg{ body } ;
- my $to = $msg{ to } ;
- my @to = @$to ;
- my $mailer = new Net::SMTP::TLS( $creds{ server },
- Hello => $creds{ server },
- Port => 587,
- User => $creds{ username },
- Password => $creds{ password }, ) or croak $!;
- $mailer->mail( $creds{ from } ) ;
- $mailer->to( @to ) ;
- $mailer->data ;
- $mailer->datasend( 'Subject: ' . $body . "\n" ) ;
- $mailer->datasend( 'From: ' . $creds{ from } . "\n" ) ;
- $mailer->datasend( 'To: ' . ( join ',', @to ) . "\n" ) ;
- $mailer->datasend( "\n" ) ;
- $mailer->datasend( '' ) ;
- $mailer->dataend ;
- $mailer->quit ;
- return $msg{ body } ;
- }
- </stdin>
I already had it, so I just had to modify it slightly, but it came to me. You can set status and upload images via email. I just hand to double-check the right way — statuses in subject, not body — and came right up.
get_credentials
is my method for not hard-coding information into the code, and here I do exactly that for the $to
email and the $identity
string.I could see using the big and scary Facebook API if I wanted to code up the next Farmville. I know my wife wants me to do that. But for this small purpose, there's little need to go through all that.
No comments:
Post a Comment