Automatyczna zmiana tapet z Flickr

Pomysł

Większość użytkowników dba o wygląd swoich pulpitów, co jakiś czas zmieniając tematy graficzne, ikony i inne tego typu elementy. Chyba jednak najczęściej nudzi się nam nasza tapeta, która zazwyczaj rzuca nam się w oczy najbardziej, z racji swoich dużych rozmiarów, obejmujących większość pulpitu.

Przez dosyć długi czas korzystałem z mojego poprzedniego skryptu, który za każdym uruchomienieniem komputera zmieniał mi tapetę na jedną z wylosowanych z podanych lokalizacji. Rozwiązanie to nadal jest bardzo dobre i sprawdza się, tak długo jak nie znudzą nam się zgromadzone tapety.

Zawsze można szukać innych, dodawać nawet pojedynczo przy zauważeniu czegoś ciekawego. Niestety czasami zdarza się tak, że braknie czasu na takie szczegóły, a tapety same się nie wymienią.

A dlaczego nie?

Z taką myślą przystąpiłem do pisania skryptu w Pythonie, którego zadaniem jest na żywo pobierać za każdym razem nową tapetę i automatycznie ją ustawiać.

Zbytnio trudne zadanie to nie było, zwłaszcza mając tak wspaniały język, jak Python i mnogość jego modułów i możliwości do wykorzystania.

Zdecydowałem, że obrazy pobierać będzie z serwisu Flickr na bazie feedów, które każdy może sobie sam ustawić, czy to podając identyfikator użytkownika/grupy, czy wymieniając własne tagi.

Działa poprawnie w środowisku GNOME. Chciałem również rozszerzyć o obsługę KDE 4, ale nie mogłem znaleźć żadnych konkretnych informacji na temat API, które by na to pozwoliło, a na forum KDE napisano, że narazie nie można tego zmienić ani za pomocą D-BUS, ani niczego innego. KDE 3 sobie odpuściłem, ale jeżeli ktoś poprosi, to bez problemu dodam.

Instrukcja:

  1. Ściągnij plik i przenieś w miejsce, do którego masz dostęp i w którym skrypt będzie mógł umieścić plik tapety.
  2. Otwórz skrypt i znajdź zmienną feed_url. Zmień jej wartość na adres feeda z wybranymi przez Ciebie obrazkami.
  3. Zaraz pod tym, zmień wartość zmiennej size na Twoją rozdzielczość. Pamiętaj o takim samym formacie, jak wartość domyślna.
  4. Odpal skrypt komendą python FlickrWallpaper.py, aby sprawdzić, czy działa poprawnie.
  5. Prawdopodobnie będziesz chciał dodać skrypt do autostartu bądź jako wpis do swojego crontab.

Skąd wziąć adres feeda?

Możesz albo pobierać obrazki od konkretnego użytkownika czy grupy, lub też zdefiniować tagi odpowiadające obrazom. Adres feeda otrzymasz na każdej stronie Flickr ze zdjęciami (na dole lub przy pasku adresu). Możesz także zajrzeć do dokumentacji po szczegółowe informacje. W tym przypadku klucz API nie jest potrzebny.

Kod

FlickrWallpaper.py

 
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
"""
This script changes your wallpaper to a new one downloaded directly from Flickr.
Notice: Works only in GNOME! Script uses ImageMagick but it's optional.
 
Usage:
    1. Move the script to a place where it has the right to download a wallpaper.
    2. Find the "feed_url" and change the link to any other flickr feed showing images.
    3. Right below, change "size" to your resolution if it's other than default.
    4. Run the script with command "python wallpaper.py" to see if it works properly.
    5. You would probably like to add it to your crontab or autostart in order to change wallpapers periodically.
"""
 
__author__ = "Marcin `Walker` Pośpiech"
__copyright__ = "Copyright 2009"
__license__ = "GNU General Public License"
__email__ = "marcin.pospiech@gmail.com"
__URL__ = "http://blog.walker.net.pl/"
 
from xml.dom.minidom import parseString
from random import choice
from urllib import urlretrieve, urlopen
from gconf import client_get_default
import os
 
 
# Link to Flickr feed with list of wallpapers
feed_url = "http://api.flickr.com/services/feeds/groups_pool.gne?id=94834891@N00&lang=en-us&format=atom"
 
# Your resolution
size = "1280x800" 
 
#
# Do not change the code below unless you know what you're doing.
#
 
wallpapers = []
file = os.path.join(os.getcwd(), "wallpaper.jpg")
 
print "Downloading a list of wallpapers..."
 
feed = parseString(urlopen(feed_url).read())
 
for node in feed.getElementsByTagName("link"):
    if node.attributes["rel"].value == "enclosure":
        url = node.attributes["href"].value
        if url[-5] == "o":
            wallpapers.append(url)
 
if len(wallpapers) > 0:
    print "The list has been prepared."
 
    wallpaper = choice(wallpapers)
    print "Your wallpaper for now: " + wallpaper
    print "Downloading the file... (it may take some time, be patient)"
 
    if os.path.isfile(file):
        file2 = file + "_new"
        urlretrieve(wallpaper, file2)
        os.rename(file2, file)
    else:
        urlretrieve(wallpaper, file)
 
    print "The wallpaper has been downloaded."
 
    if os.system("convert -resize %s %s %s" % (size, file, file)) == 0:
        print "Image has been resized to your resolution."
    else:
        print "ImageMagick is not installed, so the wallpaper won't be resized."
 
    gconf = client_get_default()
    if gconf.get_string("/desktop/gnome/background/picture_filename") != file:
        gconf.set_string("/desktop/gnome/background/picture_filename", file)
        gconf.set_string("/desktop/gnome/background/picture_options", "stretched")
 
    print "You should see the wallpaper on your desktop now."
 
else:
    print "Sorry, the list contains no elements. Check if the feed is correct or try with another one."
 

2 komentarze

  1. Dziękuję, skrypt z pewnością znajdzie zastosowanie na nie jednym komputerze.

  2. ZAJEBISTE AA

Zostaw komentarz: