| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #!/bin/python
- from time import sleep
- import argparse
- import os
- import shutil
- import certifi
- import urllib3
- import anyjson
- class BingWallpaperChanger:
- def __init__(self, saveDir, wallpaperCmd, locale):
- self.saveDir = saveDir
- self.savePath = saveDir +"/wallpaper"
- self.wallpaperCmd = wallpaperCmd.replace("$PATH", self.savePath)
- self.locale = locale
- self.lastUrl = None
- self.http = urllib3.PoolManager(
- cert_reqs='CERT_REQUIRED',
- ca_certs=certifi.where())
- def setWallpaper(self):
- print("Setting new wallpaper")
- os.system(self.wallpaperCmd)
- def updateLatest(self):
- jsonReq = self.http.request('GET', 'https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=' +self.locale, retries=False)
- if jsonReq.status != 200:
- print("bing.com not responding")
- return None
- json = anyjson.deserialize(jsonReq.data.decode("utf-8"))
- for img in json["images"]:
- if img["url"] != self.lastUrl:
- try:
- os.makedirs(self.savePath)
- except FileExistsError:
- pass
- with self.http.request('GET', "https://www.bing.com/" +img["url"], preload_content=False, retries=False) as r, open(self.savePath, 'wb') as outFile:
- shutil.copyfileobj(r, outFile)
- self.lastUrl = img["url"]
- return True
- return None
- return False
- def run(self, delay):
- while True:
- updated = None
- try:
- updated = self.updateLatest()
- except urllib3.exceptions.NewConnectionError:
- pass
- if updated == True:
- self.setWallpaper()
- if updated == None:
- sleep(30) # Network error
- else:
- sleep(delay)
- if __name__ == '__main__':
- parser = argparse.ArgumentParser()
- parser.add_argument("--delay", default=30)
- parser.add_argument("--saveDir", default=os.environ["HOME"] +"/.local/share/bing")
- parser.add_argument("--country", default="en-US")
- parser.add_argument("--wallpaperCmd", default="gsettings set org.gnome.desktop.background picture-uri file://$PATH")
- args = parser.parse_args()
- wallpaperChanger = BingWallpaperChanger(args.saveDir, args.wallpaperCmd, args.country)
- wallpaperChanger.run(int(args.delay) * 60)
|