updateWallpaper.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #!/bin/python
  2. from datetime import datetime
  3. from time import sleep
  4. import argparse
  5. import os
  6. import shutil
  7. import certifi
  8. import urllib3
  9. import anyjson
  10. class BingWallpaperChanger:
  11. def __init__(self, saveDir, wallpaperCmd):
  12. self.saveDir = saveDir
  13. self.savePath = saveDir +"/wallpaper"
  14. self.wallpaperCmd = wallpaperCmd.replace("$PATH", self.savePath)
  15. self.lastUrl = None
  16. def setWallpaper(self):
  17. print("Setting new wallpaper")
  18. os.system(self.wallpaperCmd)
  19. def updateLatest(self):
  20. print("test")
  21. http = urllib3.PoolManager(
  22. cert_reqs='CERT_REQUIRED',
  23. ca_certs=certifi.where())
  24. jsonReq = http.request('GET', 'https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US')
  25. if jsonReq.status != 200:
  26. print("bing.com not responding")
  27. exit()
  28. json = anyjson.deserialize(jsonReq.data.decode("utf-8"))
  29. for img in json["images"]:
  30. if img["url"] != self.lastUrl:
  31. try:
  32. os.makedirs(self.savePath)
  33. except FileExistsError:
  34. pass
  35. with http.request('GET', "https://www.bing.com/" +img["url"], preload_content=False) as r, open(self.savePath, 'wb') as outFile:
  36. shutil.copyfileobj(r, outFile)
  37. self.lastUrl = img["url"]
  38. return True
  39. return False
  40. return False
  41. def run(self, delay):
  42. while True:
  43. if self.updateLatest():
  44. self.setWallpaper()
  45. sleep(delay)
  46. if __name__ == '__main__':
  47. parser = argparse.ArgumentParser()
  48. parser.add_argument("--delay", default=30)
  49. parser.add_argument("--saveDir", default=os.environ["HOME"] +"/.local/share/bing")
  50. parser.add_argument("--wallpaperCmd", default="gsettings set org.gnome.desktop.background picture-uri file://$PATH")
  51. args = parser.parse_args()
  52. wallpaperChanger = BingWallpaperChanger(args.saveDir, args.wallpaperCmd)
  53. wallpaperChanger.run(int(args.delay) * 60)