#!/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.
