bingUpdateWallpaper 2.4 KB

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