Created
March 29, 2013 06:24
-
-
Save studio3104/5269083 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env perl | |
use strict; | |
use warnings; | |
use Data::Dumper; | |
use LWP::UserAgent; | |
use URI; | |
use JSON qw/decode_json/; | |
use Digest::MD5 qw/md5_hex/; | |
use Path::Class qw/dir file/; | |
use Encode; | |
use utf8; | |
use Proclet; | |
use Acme::AjiFry::EN; | |
use Array::Diff; | |
use Fluent::Logger; | |
my $proclet = Proclet->new; | |
my $ua = LWP::UserAgent->new; | |
my $uri = URI->new('http://api.tumblr.com/v2/blog/mirakui.tumblr.com/posts/photo'); | |
my $api_key = YOUR_TUMBLR_API_KEY; | |
my $crypt = Acme::AjiFry::EN->new(); | |
my $logger = Fluent::Logger->new(host => "192.168.33.11"); | |
$uri->query_form( 'api_key' => $api_key ); | |
$proclet->service( | |
code => sub { | |
while (1) { | |
&download(&get_url_list); | |
sleep 10; | |
} | |
}, | |
tag => &to_aji('mirakui') | |
); | |
sub to_aji { | |
$crypt->translate_from_ajifry($crypt->translate_to_ajifry(shift)); | |
} | |
sub logger { | |
$logger->post( "mirakui.tumblr" => { message => shift } ); | |
} | |
sub download { | |
my $urls = shift; | |
foreach my $url (@$urls) { | |
my $filename = md5_hex( encode_utf8($url) ) . '.jpg'; | |
my $filepath = dir('./')->file($filename); | |
next if -f $filepath; | |
print &to_aji(encode_utf8("Download... $url\n")); | |
$ua->get( $url, ':content_file' => $filepath->stringify ); | |
} | |
} | |
sub get_url_list { | |
my $req = HTTP::Request->new( GET => $uri ); | |
my $res = $ua->request($req); | |
die $res->status_line if $res->is_error; | |
my $ref = decode_json( $res->content ); | |
my $urls = []; | |
my $items = $ref->{"response"}->{"posts"}; | |
foreach my $item (@$items) { | |
if ( my $photos = $item->{'photos'} ) { | |
foreach my $photo (@$photos) { | |
push( @$urls, $photo->{'original_size'}->{'url'} ); | |
} | |
} | |
} | |
&check_downloaded($urls); | |
} | |
my $last_urls = []; | |
sub check_downloaded { | |
my $urls = shift; | |
my $added = Array::Diff->diff( $last_urls, $urls )->added; | |
push( @$last_urls, @$added ); | |
while ( scalar(@$last_urls) >= 40 ) { | |
shift $last_urls; | |
} | |
$added; | |
} | |
$proclet->run; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment