- #!/usr/bin/env perl
- use feature qw'say' ;
- use strict ;
- use warnings ;
- use Cwd 'abs_path' ;
- use Data::Dumper ;
- use IO::Interactive qw{ interactive } ;
- use Try::Tiny ;
- use YAML::XS qw{ LoadFile DumpFile } ;
- use lib '/home/jacoby/lib' ;
- use Instagram ;
- my $config_file = join '/', $ENV{HOME}, '.i2b.yml' ;
- my $config = LoadFile($config_file) ;
- my $token = $config->{user}{access_token} ;
- my $id = $config->{user}{id} ;
- my $template = 'https://api.instagram.com/v1/users/XX/media/recent' ;
- my $ig = connect($config) ;
- $ig->set_access_token($token) ;
- my $url = $template ;
- $url =~ s/XX/$id/ ;
- my $feed = $ig->request($url) ;
- my $data = $feed->{data} ;
- my @data = grep { $_->{type} eq 'image' } @$data ;
- my $most_recent = $data[0] ;
- my $file = '/home/jacoby/.i2b/i2b.jpg' ;
- my $image_id = $most_recent->{id} ;
- my $image_url = $most_recent->{images}->{standard_resolution}->{url} ;
- my $image_text = $most_recent->{caption}->{text} ;
- if ( $config->{done} ne $image_id ) {
- my $image = imagegrab($image_url) ;
- imagewrite( $file, $image ) ;
- say {interactive} $image_id ;
- say {interactive} $image_text ;
- $config->{done} = $image_id ;
- }
- imageset($file) ;
- DumpFile( $config_file, $config ) ;
- exit ;
- # takes a URL, returns the raw content
- sub imagegrab {
- my $url = shift ;
- my $agent = new LWP::UserAgent ;
- my $request = new HTTP::Request( 'GET', $url ) ;
- my $response = $agent->request($request) ;
- if ( $response->is_success ) {
- return $response->content ;
- }
- return undef ;
- }
- # takes an filename and an image, and writes image to filename
- sub imagewrite {
- my $file = shift ;
- my $image = shift ;
- if ( open my $fh, '>', $file ) {
- print $fh $image ;
- close $fh ;
- return 1 ;
- }
- return 0 ;
- }
- # takes a filename, sets it as backgroundimages
- sub imageset {
- my $img = shift ;
- return unless $img ;
- my $command = join ' ', qw{
- gsettings set
- org.gnome.desktop.background
- picture-uri
- } ;
- my $command2 = join ' ', qw{
- gsettings set
- org.gnome.desktop.background
- picture-options
- } ;
- my $bg = '"file://' . abs_path $img . '"' ;
- qx{$command $bg} ;
- qx{$command2 'zoom'} ;
- }
With IFTTT, it's even easier on Android.
But I don't spend all my time with just Android and Ubuntu. I spend a fair amount of time in Windows. I have a start with that: I can use C# to set an image to the background. This is the first step. I know, at least a little, about scheduling tasks in Windows, which is the last step.
So, the coming steps:
- Using C# to get the Instagram JSON
- Using C# to parse the Instagram JSON and pull URL of newest image
- Using C# to download said image. Certainly related to getting the JSON.
- Using C# to write image file to Windows equivalent to /tmp (because this will be released to others).
- Knowing what Windows for /tmp is.
- Knowing where to hold my Instagram OAuth token data.
Seems like a small number of things to get done, once I sit down to do them. I just need to sit down, do them, and build the tool again.