I've covered how you handle keys and authenticating with Twitter
previously, so look into those for more information as we go ahead
with sending tweets!
There was a time when Twitter was just text, so you could just
send a link to an image. There were sites like TwitPix that hosted
images for you, but eventually Twitter developed the ability to
host media.
my $media ; push @$media, $config->{ file } ; push @$media, 'icon.' . $suffix ; if ( $twit->update_with_media( $status , $media ) ) { say 'OK' ; }
There are four ways you could define the media:
$media = [ 'path to media' ] ; $media = [ 'path to media', 'replacment filename' ] ; $media = [ 'path to media', 'replacment filename', Content-Type => mime/type' ] ; $media = [ undef , 'replacment filename', Content-Type => mime/type', 'raw media data'] ;
I use the second in order to specify the file name that isn't whatever
long and random filename it has. The module has ways to guess the
correct mime type, but you can specify to avoid that. The last one,
starting with undef, allows you to create or modify an image with
Image::Magick or whatever you choose and tweet it without having to
involve the filesystem at all.
A few words about what we mean by media. We mean images or video; no
audio file option. By images, we mean PNG, JPG, GIF or WEBP. No SVG,
and less that 5MB as of this writing. (Check https://dev.twitter.com/
for more info later.)
Video has other constraints, but I don't tweet just video often, if
ever. I generally put it to YouTube and post the link.
There's a couple ways you can have more fun with images on Twitter.
Those would be with your profile image, the square image that sits
next to your tweet, and the profile banner, the landscape image that
shows up at the top of your page.
They work like the above, handling media the same way.
my $image ; push @$image, $config->{ file } ; push @$image, 'icon.' . $suffix ; if ( $twit->update_profile_image( $image ) ) { say 'OK' ; } my $banner ; push @$banner, $config->{ file } ; push @$banner, 'icon.' . $suffix ; if ( $twit->update_profile_banner( $banner ) ) { say 'OK' ; }
Profile images are square, and are converted to square if your initial
image is not square. For both, JPG, GIF or PNG are allowed and are
converted upon upload. If you try to upload an animated GIF, they will
use the first frame. This can make your profile image less fun, but if
you have a feed full of pictures that throb and spin, that can make
you feel seasick.
And, since we're hitting profile-related issues, perhaps I should
handle your profiles and we can get this behind us.
Changing your username, going from @jacobydave to something else, is
doable but not via the API. It isn't a thing you can or should be
doing with an API. You can change other details, however. You can
change your name ("Dave Jacoby"), description ("Guy blogging about
Perl's Net::Twitter library. Thought Leader. Foodie."), website
("http://varlogrant.blogspot.com/") and location ("Dark Side of the
Moon").
use Getopt::Long ; my $config ; GetOptions( 'description=s' => \$config->{ description }, 'location=s' => \$config->{ location }, 'name=s' => \$config->{ name }, 'web=s' => \$config->{ url }, ) ; my $params ; for my $p ( qw{ name url location description } ) { $params->{ $p } = $config->{ $p } if $config->{ $p } ; } $params->{ include_entities } = 0 ; $params->{ skip_status } = 1 ; if ( $twit->update_profile( $params ) ) { say 'OK' ; } }
I *DO* have fun fun with location, setting it with a number of
strings; "My Happy Place" on Saturday, "Never got the hang..." for
Thursdays. You can set this to any string, and Twitter does nearly
nothing with it. I'd suggest you ignore it or set it to something
general or clever, and forget it.
Now that we've covered how you tweet and handle your identity a little, next time we'll start to get into relationships, which are the things that make a social network social.
Now that we've covered how you tweet and handle your identity a little, next time we'll start to get into relationships, which are the things that make a social network social.
No comments:
Post a Comment