- # -*- coding:utf-8 -*-
- import dbus
- import gobject
- import dbus.glib
- import dbus.service
- from threading import Thread
- import os, time, urllib, json, thread, random
- def cleanall():
- os.system("rm -f /home/alex/Wallpaper/*.*")
- os.system("rm -f /home/alex/Wallpaper/.tmpwallpaper/*.*")
- def downloadwallpaper():
- def getwallpaperlist():
- categroy = [1,2,3,4,5,6,8,10,798,1546,797,1407,1035,1554,2097,2098,2180]
- randomcategroy = categroy[random.randint(0,len(categroy)-1)]
- geturl = "http://api.lovebizhi.com/linux.php?a=category&tid=%d&mode=0\\
- &uuid=d03565c6f58b11e196cf8c89a5322966&model_id=106&width=270\\
- &order=newest&color_id=3&channel=40001&screen_width=1600\\
- &screen_height=900&bizhi_width=0&bizhi_height=0\\
- &version_code=0&language=" % randomcategroy
- for page in range(3):
- try:
- if geturl == "":
- print "no data on current page"
- break
- result = urllib.urlopen(geturl)
- json_result = json.load(result)
- for wallpaper in json_result["data"]:
- yield wallpaper["image"]["original"]
- geturl = json_result["link"]["next"]
- except Exception, e:
- print str(e)
- print "download wallpapers thread already started!"
- savepath = "/home/alex/Wallpaper/.tmpwallpaper/"
- for wallpaper in getwallpaperlist():
- filename = os.path.basename(wallpaper)
- filename = filename[0:filename.find(",")] + ".jpg"
- exitstatus = os.system("wget -q %s -O %s%s" % (wallpaper, savepath, filename))
- print ("wget --timeout=5 -q %s -O %s%s" % (wallpaper, savepath, filename))
- if exitstatus ==0:
- os.system("mv /home/alex/Wallpaper/.tmpwallpaper/%s /home/alex/Wallpaper/" % filename)
- print "%s%s download ok" % (savepath, filename)
- print "all wallpaper download ok!"
- def getwallpaper():
- wallpaperdir = "/home/alex/Wallpaper/"
- while 1:
- allpapers = filter(\\
- lambda filename:filename!='.tmpwallpaper',\\
- os.listdir(wallpaperdir)
- )
- if len(allpapers) ==0:
- time.sleep(5)
- continue
- for wallpaper in allpapers:
- yield "%s%s" % (wallpaperdir, wallpaper)
- def setwallpaper(wallpaperiter):
- wallpaper = wallpaperiter.next()
- exitstatus = os.system("awsetbg %s" % wallpaper)
- if exitstatus !=0:
- if os.path.exists(wallpaper):
- os.unlink(wallpaper)
- class DbusController(Thread, dbus.service.Object):
- def __init__(self, wallpaperiter, busname, objectpath):
- super(DbusController, self).__init__()
- dbus.service.Object.__init__(self, busname, objectpath)
- self.wallpaperiter = wallpaperiter
- @dbus.service.method("com.person.controllerinterface")
- def changewallpaper(self):
- setwallpaper(self.wallpaperiter)
- @staticmethod
- def create(wallpaperiter):
- session_bus = dbus.SessionBus()
- busname = dbus.service.BusName("com.person.EventService", bus = session_bus)
- controller = DbusController(wallpaperiter, busname, "/personpc")
- controller.start()
- def run(self):
- gobject.threads_init()
- dbusloop = gobject.MainLoop()
- dbusloop.run()
- def wallpapersetter(wallpaperiter):
- while 1:
- setwallpaper(wallpaperiter)
- time.sleep(300)
- if __name__ == '__main__':
- cleanall()
- thread.start_new_thread(downloadwallpaper, ())
- wallpaperiter = getwallpaper()
- DbusController.create(wallpaperiter)
- wallpapersetter(wallpaperiter)
- #该片段来自于http://www.codesnippet.cn/detail/020820134933.html
来源: http://www.codesnippet.cn/detail/020820134933.html