Рубрики
Без рубрики

Как автоматически изменить обои для рабочего стола каждую минуту с помощью Python

Этот пост был первоначально опубликован на https://shaikh.com Этот пост был обновлен, чтобы включить изменения … Помечено с Python, Linux, Ubuntu, CodeNewie.

Этот пост был первоначально опубликован на https://shaikh.com Этот пост был обновлен, чтобы включить изменения в поддержку операционной системы Linux. Таким образом, вы можете использовать этот код для изменения фона рабочего стола в Linux и Windows Computers 🙂.

В этом забавном уроке мы собираемся скачать случайные обои с ** pexels ** и установить ее на наш фон на рабочем столе каждую минуту с помощью Python. Хотя это звучит как Fun Project, но мы собираемся изучать некоторые важные концепции, такие как HTTP-запрос, как сделать HTTP-запрос, как загрузить файл и сохранить его на свой локальный аппарат и самое главное, как установить обои, используя функцию системы Windows.

Посетите мою страницу GitHub для полных кодов в https://github.com/jaqsparow/change-desktop-wallpaper

Примечание. Все эти фрагменты кода проверяются на Windows 10 и Ubuntu 20.04 LTS, с Python V3.9.0

Что мы будем строить?

Мы собираемся построить приложение CLI, используя Python, чтобы изменить обои на рабочем столе каждое заданное количество минут. Каждое обои, загруженные из Интернета, будут уникальными, и наше приложение изменит обои на основе времени, которые мы устанавливаем.

Что мы узнаем в этом посте?

  • Как генерировать случайное число? 📗
  • Как сделать HTTP-запрос с помощью Python? 📕
  • Как скачать изображение на свой локальный компьютер? 📙
  • Как установить обои, используя Python 💡
  • Как вызвать систему Windows C ++ из Python💡

Получить ключ API для загрузки обоев

Прежде всего, нам нужен ключ API, чтобы сделать HTTP-запрос и загрузить изображение. Для этого учебника я собираюсь использовать Pexels Отказ Выполните следующие действия, чтобы получить ключ API

Шаг 1: Зарегистрируйтесь для бесплатной учетной записи

Посетите эту ссылку, а затем нажмите «Присоединиться». Укажите ваше имя и данные электронной почты в указанном тексте и создайте учетную запись https://www.pexels.com/join-consumer/

Шаг 2: получить началось

Как только вы зарегистрированы и подтвердили свой адрес электронной почты https://www.pexels.com/api/ и нажмите «Начать работу», и он приведет вас к новой странице для приложений. Нажмите «Новое приложение» и предоставьте свои данные приложения.

После вышеуказанного шага вам следует снабжать API ключ которые мы будем использовать на следующем шаге. Так что сохраните этот ключ API где-то в вашей машине.

Примечание – не злоупотребляйте Pexels API. Они предоставляют 200 запросов в час с бесплатным аккаунтом. Так уважают 👏

Установка запросов модуль

Чтобы сделать HTTP-запрос, нам нужен модуль Запросы . Так что давайте устанавливаем этот модуль

pip install requests

Теперь у нас все настроено и пойдем на следующий шаг, чтобы начать кодирование 💻.

Начать кодирование ..

Сначала нам нужно импортировать все модули, которые нам нужно сделать это приложение. Так что давайте начнем начать.

import argparse
import os
import time
import random
import requests
import ctypes
import platform

Почему нам нужны эти модули

  • * argparse: * Поскольку это приложение CLI, нам нужно пройти аргументы нашему приложению, используя этот модуль
  • * ОС: * Нам нужен этот модуль, чтобы найти текущий рабочий каталог и полный путь наших обоев
  • * время: * Этот модуль будет использоваться для вызова нашей функции каждые данные минуты, а также использовать Sleep () метод
  • случайный: Для генерации случайного числа, чтобы мы могли сделать URL случайного запроса каждый раз
  • * Запросы: * Мы используем этот модуль, чтобы сделать HTTP-запрос и загрузить обои
  • CTYPES: ** Этот модуль должен вызвать внешнюю функцию в Python. Он предоставляет C совместимые типы данных и позволяет вызывать DLL и общие библиотеки. Нам нужно это позвонить ** SystemParameterSinfow Чтобы изменить наши обои
  • * Платформа: * Мы используем этот встроенный модуль, чтобы узнать операционную систему, в которой этот код будет работать. На основании этого мы позвоните системной функции, чтобы изменить обои

Генерировать случайное число

Давайте создадим функцию имени get_wallpaper () и генерировать случайное число внутри этой функции, которую мы будем использовать для изготовления случайного URL-адреса HTTP-запроса.

def get_wallpaper():
    #Random number
    num = random.randint(1,99)

Сделать HTTP-запрос

Теперь давайте сохраним наш ключ API внутри функции, как показано ниже. Замените ключи API в поле а также установить URL для pexel запрос как показано ниже

    #Set your api key here
    payload = {'Authorization': ''}
    #Search query
    query = 'flower'
    #URL for PEXELS
    url = 'https://api.pexels.com/v1/search?per_page=1&page=' + str(num) + '&query=' + query

С вышеуказанными кодами мы создаем случайное URL с Страница Параметр и запрос = цветок 🙂. Измените запрос в зависимости от того, какой тип обоев вы хотите скачать как природа, гора, самолет или все, что вы хотите. Я загружаю обои с запросом цветок Таким образом, у нас есть URL, теперь давайте сделаем HTTP-запрос на этот URL с помощью Получить метод

    res= requests.get(url, headers=payload)

В вышеуказанном коде мы делаем HTTP-запрос на Pexels с ключом API в заголовках. Также обратите внимание, что мы сохранили ответ в res Переменная, которую мы собираемся использовать на нашем следующем шаге. Теперь его время для скачивания изображения. Давайте сделаем это, используя ниже код

    #Get the url of the image from the response
    if res.status_code == 200:
        img_url = res.json().get('photos')[0]['src']['original']
        #Make request to get the image
        img = requests.get(img_url)
        #Write and save the imgae locally with name temp.jpg
        with open('temp.jpg', 'wb') as f:
            f.write(img.content)
    else:
        print('error in making http request')

Давайте понять вышеуказанный код. В самой первой линии мы проверяем код состояния из нашего HTTP-запроса на последнем шаге. Обратите внимание, что для каждого HTTP-запроса мы получим ответ со Status_Code. Если код состояния составляет 200, это означает, что запрос был успешным, и необходимо вернуть хороший ответ. Мы преобразуем контент ответа в объект JSON, чтобы мы могли использовать его анализировать URL-адрес изображения.

Во второй строке мы получили Image_URL после разбора объекта ответа JSON. Мы делаем еще один HTTP-запрос, чтобы загрузить изображение и, наконец, мы сохраняем изображение в нашей локальной системе, используя Напишите метод. Обратите внимание, что мы сохраняем файл, используя WB Режим, так что новый файл будет загружен и заменен старый. Мы экономите обои как «Temp.jpg»

Наконец мы печатаем «сообщение об ошибке», если код состояния возвращается не 200.

Установите обои, используя Python

В этом разделе мы собираемся создать новую функцию set_wallpaper () следующим образом

def set_wallpaper():
    get_wallpaper()
    #Check the operating system
    system_name = platform.system().lower()
    path = ''
    if system_name =='linux':
        path = os.getcwd()+'/temp.jpg'
        command = "gsettings set org.gnome.desktop.background picture-uri file:" + path
        os.system(command)
    elif system_name == 'windows':
        path = os.getcwd()+'\\temp.jpg'
        ctypes.windll.user32.SystemParametersInfoW(20,0,path,0)

Давайте посмотрим, что мы сделали выше. В первой строке внутри set_wallpaper () Мы называем функцию get_wallpaper () Чтобы скачать изображение и сохранить его на temp.jpg файл. В следующей строке мы назначаем путь Переменная с полным путем изображения, который мы только что скачали.

Обратите внимание, что мы используем платформа .system () Функция для идентификации операционной системы и на основе системы мы выполняем уважение команды для изменения обоев на рабочем столе.

Как вызвать функцию системы Windows ‘?

Следующая строка, показанная ниже, интересна. С помощью CTYPES Модуль, мы называем систему Windows C ++ SystemParameterSinfow () Чтобы изменить обои. Давайте посмотрим на разные параметры этой функции.

ctypes.windll.user32.SystemParametersInfoW(20,0,path,0)

Синтаксис

BOOL SystemParametersInfoW(
  UINT  uiAction,
  UINT  uiParam,
  PVOID pvParam,
  UINT  fWinIni
);
  • U7Action: ** Это параметр Systemwide (например, настольный/значок/меню ..), чтобы быть установлены или извлечены. > Мы используем SPI_SetDeskwallpaper или 0x0014, чтобы установить этот параметр. Пожалуйста, обратите внимание, что 0x0014 – ничто, кроме * * 20 В десятичном периоде которого отправляются выше код.
  • Уипарам: Это второй параметр, который зависит системный параметр Windows. Мы отправляем 0 Что касается большей части запроса. Как предложено документом использования.
  • PvParam: Этот параметр можно использовать для отправки аргумента для набора действий в первом параметре. С этим мы отправляем полный путь к изображению
  • Фвинини: Этот параметр можно использовать для установки или обновления профиля пользователя или транслировать изменение всех верхних окон. В этом случае мы не хотим что-нибудь транслировать, поэтому мы отправляем 0.

Обратный код

Если вышеупомянутое исполнение функций успешно, возвращаемое значение будет ненулевым, что он будет нулю

С этим мы сделаем с кодировкой, чтобы изменить и установить обои. Теперь пришло время называть эту функцию каждую минуту

Вызовите функцию каждую минуту, чтобы изменить обои

Здесь мы будем звонить от основной функции на основе пользовательского ввода. Поскольку это приложение CLI, мы собираемся попросить пользователя о том, что будет частотой, чтобы изменить обои? Каждую минуту или каждые 5 минут или любое другое значение?

if __name__ == "__main__":

    parser = argparse.ArgumentParser()
    parser.add_argument("-t", "--time", help="Enter time in minutes")

    args = parser.parse_args()
    minute = int(args.time)
    while(True):
        time.sleep(minute*60)
        set_wallpaper()

С приведенным выше кодом мы устанавливаем точку входа нашего приложения. Первые две строки предназначены для настройки аргументов CLI, где мы устанавливаем аргумент ввода -t что займет число минут, мы будем звонить set_wallpaper () Отказ Мы использовали Сон () Метод задержки выполнения и вызова set_wallpaper () каждый n Количество минут согласно вводу пользователя.

В порядке. Все сделано сейчас, давайте запустим приложение 🙂

Как запустить приложение?

Запустить в CMD, как показано ниже. Работать каждую минуту

C:\Users\jaqsp>wallpaper.py -t 1

Или Если вы хотите изменить обои каждые 5 минут

C:\Users\jaqsp>wallpaper.py -t 5

Вывод

Надеюсь, что этот пост поможет вам понять некоторые важные концепции, такие как, как мы сделали HTTP-запросы и загружали изображение в нашу локальную систему. Кроме того, как мы используем функцию системы Windows или (настройка GNOME Linux) и назвала его из программы Python, чтобы изменить обои. Есть много других параметров, доступных для этой системы, которую мы можем использовать для выполнения некоторых других интересных случаев. Посетите ссылку ниже, чтобы узнать больше об этой функции.

Посетить Мой репозиторий GitHub Чтобы увидеть полные коды. Спасибо за чтение:)

использованная литература

  1. https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-systemparamsersInfow

  2. https://requests.readthedocs.io/en/master/

Оригинал: “https://dev.to/shaikh/how-to-auto-change-desktop-wallpaper-every-minute-using-python-46hi”