#!/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.
Thank you for sharing this plan. I think we would need an editor for our coding stuff right? So download vscode
ReplyDelete