Random Google Images - v1.0b
Publicado por erick Darko (última atualização em 15/01/2019)
[ Hits: 2.348 ]
Homepage: ...
Download 6937.random_google_images.py
Está cansado de procurar um wallpaper legal para sua areá de trabalho? Com esse script escrito em Python 3 você pode pesquisar por imagens no Google e utilizando o visualizador de imagens feh defini-las como seu wallpaper sem ter que fazer quase nada.
Dependências:
feh # duh !
bs4 - BeautifulSoup
Instalação em distros baseadas no Debian:
$ sudo apt-get install feh python3-bs4 -y
Executando o script:
$ python3 random_google_images.py wallpaper 4k -d 5
Para ver mais opções:
$ python3 random_google_images.py --help
#!/usr/bin/env python3.5 try: from bs4 import BeautifulSoup except ImportError as err: sys.exit(str(err)) from datetime import datetime from urllib.request import Request, urlopen import subprocess as sp import argparse import logging import json import os, sys import time parser = argparse.ArgumentParser(description="Search images on google and change your background with feh") parser.add_argument('search', type=str, action='store', help="search a image on google", nargs='*') parser.add_argument('--clear', action='store_true', help='clear cache') parser.add_argument('-r', '--recent', action='store_true', help='shows recent searches') parser.add_argument('-v', '--verbosity', action='store_true', help='shows debugging information') parser.add_argument('-d', action='store', type=int, help='delay in secunds between wallpapers default is 3s', default=3) args = parser.parse_args() search = '+'.join(args.search) # if you search foo bar will be equal foo+bar script_path = os.path.dirname(os.path.abspath(__file__)) # get the script absolute path # logging config LOG_FORMAT = "%(levelname)s %(asctime)s - %(message)s" log_path=os.path.join(script_path, 'info.log') logging.basicConfig(filename=log_path, level=logging.INFO, format=LOG_FORMAT, filemode='w') logger = logging.getLogger() class Cache: def __init__(self): """ create cache if not exists """ self.search_cache_path = os.path.join(script_path, 'cache/search_cache.json') if not os.path.exists(script_path + '/cache'): os.mkdir(script_path + '/cache') if not os.path.exists(self.search_cache_path) or args.clear: open(self.search_cache_path, 'w').close() if args.recent: # shows recent search cache recent_cache = self.load_cache() if recent_cache: [ print(k, end=' ') for k in recent_cache.keys() ] else: print('No recent cache.') def dump_cache(self, images): """ write cache """ with open(self.search_cache_path, 'r') as fp: if os.stat(self.search_cache_path).st_size > 0: search_cache = eval(json.load(fp)) search_cache[search] = images else: search_cache = json.dumps({search: images}) with open(self.search_cache_path, 'w') as fp: json.dump(str(search_cache), fp) def load_cache(self): """ return a list """ if os.stat(self.search_cache_path).st_size > 0: with open(self.search_cache_path) as fp: return eval(json.load(fp)) def update_cache(self, image): """ remove images from cache """ cache = self.load_cache() try: cache[search].remove(image) return cache[search] except Exception as err: logger.error(err) headers = { 'User-Agent': 'Mozilla/5.0 (Windows NqT 6.1) AppleWebKit/537.36 \ (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.3' } def get_soup(): """ return html """ url = 'https://www.google.com/search?q={}&source=lnms&tbm=isch'.format(search) try: req = Request(url, headers=headers) with urlopen(req) as html: return BeautifulSoup(html.read(), 'html.parser') except Exception as err: logger.error(err) def search_image(): """ search the specified image on google and return it """ soup = get_soup() imgs = soup.find_all('div', {'class': 'rg_meta'}) img_src = [] for i in imgs: link, ext = eval(i.text)["ou"], eval(i.text)["ity"] resolution = str(eval(i.text)["ow"]) + "x" + str(eval(i.text)["oh"]) if eval(i.text)["ow"] >= 800 and eval(i.text)["oh"] >= 600: # append if the image resolution is greater then 800x600 img_src.append((link, ext, resolution)) cache.dump_cache(img_src) return img_src def set_background(image): """ set background using feh """ link, img_format , resolution = image # the temporarily images are saved in /tmp/ image_path = '/tmp/img_{}.{}'.format(datetime.now().strftime("%H%M_%y%m%d"), img_format) try: req = Request(link, headers=headers) with urlopen(req, timeout=15) as image: with open(image_path, 'wb') as f: f.write(image.read()) except Exception as err: logger.error(err) return None try: out = sp.run(['feh', '--bg-scale', image_path], stdout=sp.DEVNULL, stderr=sp.DEVNULL, check=True) except sp.CalledProcessError as err: logger.error(err) return None delay = args.d time.sleep(delay) if os.path.exists(image_path): os.remove(image_path) return image_path class Main(): def __init__(self): search_cache = cache.load_cache() if search_cache != None: if search in search_cache: print('searching in the cache... ' + search.replace('+',' ')) self.images = search_cache[search] else: print('searching on google... ' + search.replace('+',' ')) self.images = search_image() else: print('searching on google... ' + search.replace('+',' ')) self.images = search_image() logger.info('cache length: {}'.format(len(self.images))) def run(self): try: i = last_line = 0 while True: image = self.images[i] current_image = set_background(image) if current_image == None: updated_cache = cache.update_cache(image) self.images.remove(image) logger.info('{} removed'.format(image)) logger.info('cache length: {}'.format(len(self.images))) i += 1 if i >= len(self.images) - 1: i = 0 if args.verbosity: # verbosity enable f = open(log_path, 'r') # read the log file f.seek(last_line) # return to the last line if f.readline(): # if line is not empty. This will change the current position on log file f.seek(last_line) # return to the last line print(f.readline().replace('\n', '')) # readline last_line = f.tell() # save where stoped except KeyboardInterrupt: if os.path.exists(current_image): os.remove(current_image) except Exception as err: logger.error(err) def check(): assert (sys.platform in 'linux'), "This code runs on Linux only." try: sp.run(['which', 'feh'], check=True, stdout=sp.DEVNULL) except: sys.exit('feh isn\'t installed') if args.d < 0: raise ValueError('sleep length must be non-negative') if __name__ == '__main__': check() cache = Cache() if args.search: Main().run()
Verificar se um número é primo
Procura músicas em diretório local
Compressão de série numérica em Python
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (9)