Foto aleatória do Tumblr no fundo da minha área de trabalho (Gnome)

Eu uso muito o tumblr recentemente, então pensei em criar um script que atualizaria a imagem de fundo do meu desktop no Gnome a cada alguns segundos com uma imagem aleatória de alguns blogs do tumblr de que gosto.

#!/usr/bin/php
<?php
$config
= array(
'api_key' => 'get your api key from http://www.tumblr.com/oauth/apps',
'sleep' => 45,
'debug' => true,
'blogs' => array(
'whiteshoe',
'devopsreactions',
'afr0diti',
//...
)
);
if(empty($config['api_key']))
throw new Exception('Api key is empty');

if(empty($config['blogs']))
throw new Exception('Blogs can not be empty array');
$r
=0;
while(true) {
$blog_url
= url($config['blogs'], $config['api_key']);
$response
= json_decode(get($blog_url));
$posts
= ($response->meta->status == 200) ? $response->response->posts : array();
if(isset($config['debug']) && $config['debug']) {
echo
"[debug] request {$r}, {$response->meta->status} @ {$blog_url}n";
}
if(!empty($posts)) {
mt_srand
(time());
$rand
= mt_rand(0, count($posts)-1);
$post
= $posts[$rand];
printDetails
($post);
$photo
= array_shift($post->photos);
$url
= $photo->original_size->url;
setBackground
($url);
sleep
(isset($config['sleep']) ? $config['sleep'] : 60);
}
}

function setBackground($url)
{
$filename
= __DIR__.DIRECTORY_SEPARATOR.'tumblr_backgroud_image';
file_put_contents
($filename, file_get_contents($url));
exec('gsettings set org.gnome.desktop.background picture-uri file:///'.$filename);
}

function url($blog, $key)
{
if(is_array($blog)) {
$x
= array_rand($blog);
$blog
= $blog[$x];
}
return "http://api.tumblr.com/v2/blog/{$blog}.tumblr.com/posts/photo?api_key={$key}";
}
function get($url)
{
$ch
= curl_init();

curl_setopt
($ch, CURLOPT_URL, $url);

curl_setopt
($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt
($ch, CURLOPT_TIMEOUT, '30');
$content
= trim(curl_exec($ch));
curl_close
($ch);
return $content;
}

function printDetails($post)
{
foreach(array('blog_name','id','post_url','caption') as $info)
{
echo $post
->{$info};
echo
"n";
}
echo
"n";
}

O código está na essência: 4984301 , comentários e melhorias são bem-vindos. Versão para Mac OS em breve …