Script para obter um wallpaper de como está o globo em tempo real

Publicado por Renan (última atualização em 12/04/2010)

[ Hits: 5.986 ]

Download WorldSky.py

Download 1270770656.WorldSky.py (versão 2)




Script em Pygtk que baixa uma imagem do globo do site http://die.net mostrando onde está noite e onde está dia.

O script cria um ícone na bandeja para poder controlá-lo com opções como atualizar, parar, escolher a projeção e encerrar.

As escolhas de projeção são:

- Peters ( http://static.die.net/earth/peters/1600.jpg )
- Mollweide ( http://static.die.net/earth/mollweide/1600.jpg )
- Hemisfério ( http://static.die.net/earth/hemisphere/1600.jpg )

  



Versões atualizadas deste script

Versão 2 - Enviado por Renan em 08/04/2010

Changelog: Alterado para usar uma sintaxe anterior ao python versão 2.6.

Download 1270770656.WorldSky.py


Esconder código-fonte

#!/usr/bin/env python
#
#       WorldSky.py
#       
#       Copyright 2010 Renan Vedovato Traba <hellupline@gmail.com>
#       
#       This program is free software; you can redistribute it and/or modify
#       it under the terms of the GNU General Public License as published by
#       the Free Software Foundation; either version 2 of the License, or
#       (at your option) any later version.
#       
#       This program is distributed in the hope that it will be useful,
#       but WITHOUT ANY WARRANTY; without even the implied warranty of
#       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#       GNU General Public License for more details.
#       
#       You should have received a copy of the GNU General Public License
#       along with this program; if not, write to the Free Software
#       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#       MA 02110-1301, USA.

import os, gtk, glib, gconf, urllib2

__cache_path__ = os.path.join(os.environ['HOME'], ".cache", "wallpaper")

def download_file(url):
    while True:
        try:
            return urllib2.urlopen(url).read()
        except:
            pass
    return None

def update_wallpaper(image_url="http://static.die.net/earth/peters/1600.jpg"):
    if not os.path.isdir(__cache_path__): os.mkdir(__cache_path__)
    path = os.path.join(__cache_path__, "WorldSky.jpg")
    with open(path, "w") as file: file.write(download_file(image_url))
    background_key = "/desktop/gnome/background/picture_filename"
    return gconf.client_get_default().set_string(background_key, path)

class WorldSky(object):
    def __init__(self):
        self.image_url = "http://static.die.net/earth/peters/1600.jpg"
        self.refresh_cb(None); self.service = glib.timeout_add(1000*60*60, self.refresh_cb)

        statusicon = gtk.StatusIcon()
        statusicon.set_visible(True)
        statusicon.set_from_stock(gtk.STOCK_ABOUT)

        menu = gtk.Menu()

        menu_item = gtk.ImageMenuItem(gtk.STOCK_REFRESH)
        menu_item.connect('activate', self.refresh_cb)
        menu.append(menu_item)

        menu.append(gtk.SeparatorMenuItem())

        menu_item = gtk.CheckMenuItem('Run')
        menu_item.set_active(True)
        menu_item.connect('toggled', self.toggled_cb)
        menu.append(menu_item)

        menu.append(gtk.SeparatorMenuItem())

        menu_item = gtk.RadioMenuItem(None, 'Peters projection')
        menu_item.set_active(True)
        menu_item.connect('toggled', self.changed_cb, "http://static.die.net/earth/peters/1600.jpg")
        menu.append(menu_item)

        menu_item = gtk.RadioMenuItem(menu_item, 'Mollweide projection')
        menu_item.connect('toggled', self.changed_cb, "http://static.die.net/earth/mollweide/1600.jpg")
        menu.append(menu_item)

        menu_item = gtk.RadioMenuItem(menu_item, 'Hemisphere projection')
        menu_item.connect('toggled', self.changed_cb, "http://static.die.net/earth/hemisphere/1600.jpg")
        menu.append(menu_item)

        menu.append(gtk.SeparatorMenuItem())

        menu_item_quit = gtk.ImageMenuItem(gtk.STOCK_QUIT)
        menu_item_quit.connect('activate', self.quit_cb)
        menu.append(menu_item_quit)

        menu.show_all()
        statusicon.connect('popup-menu', self.popup_menu_cb, menu)

        gtk.main()

    def refresh_cb(self, widget):
        update_wallpaper(self.image_url)

    def toggled_cb(self, widget):
        if widget.get_active():
            self.refresh_cb(None); self.service = glib.timeout_add(1000*60*60, self.refresh_cb)
        else:
            glib.source_remove(self.service)
        return True

    def changed_cb(self, widget, image_url):
        if widget.get_active():
            self.image_url = image_url
            self.refresh_cb(None)

    def quit_cb(self, widget):
        gtk.main_quit()

    def popup_menu_cb(self, status_icon, button, time, menu):
        menu.popup(None, None, gtk.status_icon_position_menu, button, time, status_icon)

if __name__ == '__main__': WorldSky()

Scripts recomendados

Python, GKT e Konachan.com

Inteligência artificial com Python e Shell Script

Gerador palpite Mega Sena v1.0

Consumo de memória por processo

Script em Python com várias funções matemáticas [iniciante]


  

Comentários
[1] Comentário enviado por ricardok2 em 08/04/2010 - 02:33h

Não rodou ...

./WorldSky.py:37: Warning: 'with' will become a reserved keyword in Python 2.6
File "./WorldSky.py", line 37
with open(path, "w") as file: file.write(download_file(image_url))
^
SyntaxError: invalid syntax

[2] Comentário enviado por hellupline em 08/04/2010 - 20:46h

eu usei syntax do python 2.6, mas vo alterar o codigo visualizado para usar a antiga

troque a linha:"with open(path, "w") as file: file.write(download_file(image_url))"
por:
file = open(path, "w")
file.write(download_file(image_url))
file.close()
(só coloque eles na mesma identação que a linha anterior)

[3] Comentário enviado por removido em 14/06/2010 - 11:46h

cara que script fantástico, o teu trabalho está de parabéns, consegui uma imagen deslumbrante, se quiser ver como ficou postei o screenshot na minha lista.
Parabéns cara.Um abraço de Marun=>AYG


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts