В очередной раз закрываю тему наполнения папки обоями с помощью Free Bing Image API. На сей раз кроссплатформа на Python (тег).
Наконец-то дошли руки продолжить тему стареньких постов (раз и два). Кстати, в последней статейке, в качестве эксперимента, я навертел на bash’е вполне приемлемую штуковину. Хотя и с зависимостью от jq.
Здесь более понятный бурелом:
# Get Bing Walls
title="GetBingWalls"
version="2.1.1.4"
# Импорт библиотек
import os
import requests
import platform
import ctypes
import sys
from pathlib import Path
# Функция установки заголовка окна
def set_console_title(title):
if platform.system() == "Windows":
ctypes.windll.kernel32.SetConsoleTitleW(title)
else:
print(f"\033]0;{title}\a", end='', flush=True)
# Получить текущую папку программы
def get_program_directory():
# Для скомпилированного исполняемого файла
if getattr(sys, 'frozen', False):
# Если программа запущена как exe, возвращаем путь к исполняемому файлу
program_dir = os.path.dirname(sys.executable)
else:
# Если программа запущена в обычном режиме (например, из .py)
program_dir = os.path.dirname(os.path.abspath(__file__))
return program_dir
# Основная функция
def get_bing_walls(save_directory):
# Выведем данные об API в терминал
print("Free Bing Image API")
print("https://peapix.com/api")
print("The images are provided for wallpaper use only.")
print()
print(f"coded by ngdream.ru | version: {version}")
print()
# URL API
url = "https://peapix.com/bing/feed"
# Папка с обоями
dir = "bing"
# Создать папку по указанному пути, если её нет, и перейти в неё
wallpapers_directory = Path(save_directory) / dir
wallpapers_directory.mkdir(parents=True, exist_ok=True)
os.chdir(wallpapers_directory)
# Получаем ссылки из JSON
response = requests.get(url)
response.raise_for_status()
links = [item['imageUrl'] for item in response.json()]
# Цикл скачивания файлов
for link in links:
# Получение имени файла из URL
filename = os.path.basename(link)
# Скачивание файла, если его нет в папке
if not (wallpapers_directory / filename).is_file():
print(f"Скачивается файл {link}...")
img_data = requests.get(link).content
with open(filename, 'wb') as handler:
handler.write(img_data)
# Заголовок консоли
set_console_title(title)
# Запускаем функцию
try:
get_bing_walls(get_program_directory())
except:
print("Что-то пошло не так...")
Тестировал на Windows и Linux Mint 22. Версия Python 3.12.5.
Скрипт можно скомпилировать в exe с помощью auto-py-to-exe.