Как стать автором
Обновить

Украшаем рабочий стол случайными обоями с GoodFon

Python *
Сидел я как-то вечером, делать было нечего, и я решил слегка разнообразить свой рабочий стол, написав небольшой скриптик, ставящий на него случайную картинку с GoodFon. Язык я выбрал просто — простой, скриптовый, мощный, а именно — несравненный Python.

Если хотите сделать себе и своему рабочему столу приятно — подробности под катом.


Так как python кроссплатформенный язык, работать данный скрипт будет не только под linux, но и под windows.

Итак, начнем.

Матчасть



GoodFon уже сделал за нас часть работы, реализовав на сайте возможность просмотра случайных обоев. Так что нам не придется выбирать их самим методом парсинга кучи страниц. Нам остается только залезть на страницу со случайными обоями, выбрать одну из картинок и поставить ее на рабочий стол в качестве обоев. У goodfon'а есть один недостаток — незарегистрированному пользователю можно скачать в день не более ЕМНИП 10 картинок, но нам больше и не нужно.

Реализация



Я решил делать скрипт более интересным, нежели просто выполняющим свою функцию, поэтому он будет изобиловать слегка чрезмерным «общением» с пользователем.

Для начала подключаем нужные либы.
import sys
import time
from win32api import GetSystemMetrics
import urllib2
import os.path
import random
import re
import subprocess
import time


У меня этот скрипт сделан в двух версиях, про вторую я расскажу в следующем посте, чтоб не делать пост слишком длинным, но в первой версии есть заготовка для второго, а именно «дефолтный режим», описанный в отдельной функции. Выбор режима работы осуществляется конфигурационным текстовым файлом conf.txt.

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

print "Разрешение вашего экрана - ", GetSystemMetrics(0), "x", GetSystemMetrics(1)

где 0 и 1 — разрешения по высотре и ширине, соответственно.

Часть кода, где мы читаем файл, выбираем режим работы и прочее я опущу, так как это не столь важно, перейдем сразу к выбору, загрузке и установке на обои картинки.

    print "Дефолтный режим запущен. Начинаем сканирование гудфона..."
    
    print "Начинаем выбор и загрузку картинки..."

    page = urllib2.urlopen("http://www.goodfon.ru/mix.html")
    html = page.read()

    p = re.compile(r"/wallpaper/[0-9]+\.html")
    allWal = p.findall(html)
    walInd = random.randint(0, 41)
    p2 = re.compile(r"[0-9]+")
    walIndex = p2.findall(allWal[walInd])
    newUrl = "http://www.goodfon.ru/image/" + walIndex[0] + "-" + str(GetSystemMetrics(0)) + "x" + str       (GetSystemMetrics(1)) + ".jpg"
    filename = walIndex[0] + "-" + str(GetSystemMetrics(0)) + "x" + str(GetSystemMetrics(1)) + ".jpg"
    print filename
    print "Файл найден, начинаем закачку..."

    jpeg = urllib2.urlopen(newUrl)
    outputJpeg = open(filename, 'wb')
    outputJpeg.write(jpeg.read())
    outputJpeg.close()
    print "Файл закачен. Устанавливаем обои..."

    wallpaperPath = os.path.abspath(os.curdir) + "\\" + filename
    cmd = "WallpaperChanger.exe" + " " + wallpaperPath
    subprocess.Popen(cmd, shell = True)
    print "Обои установлены. Удачной работы!"
    time.sleep(5)


Здесь мы переходим по ссылке случайных обоев, читаем страничку и с помощью регулярных выражений выдергиваем из нее ссылки на странички с картинками. Ссылка на само изображение состоит из ссылки на страницу с изображением + разрешение в формате 1900x800 + расширение .jpg. После этого остается совсем простой шаг — создать файлик картинки, прочитать в него удаленный файл и установить в качестве обоев.

С последним пунктом пришлось повозиться, так как, если верить Google, установка обоев в Windows 7 не так проста, как, скажем, в ХР. В ходе поисков решения задачи я наткнулся на пример, где для этого использовалось небольшое приложение WallpaperChanger, коим я и воспользовался. Для этого необходимо запустить самое приложение, указав ему в качестве аргумента наш скачанный файл.

Все, работа скрипта завершена, а у нас на столе стоят случайные обои. Такой скрипт можно сунуть в автозагрузку, и каждый раз при старте компьютера у вас будут новые обои =)

Для того, чтобы перенести его на Linux, нужно поменять все пару строчек, а именно — вместо winAPI для определения разрешения использовать функции иксов (или какие другие, я не углублялся в эту тему, ибо не было смысла), а для установки обоев использовать, например, feh.

Весь скрипт
WallpaperChanger
Теги:
Хабы:
Всего голосов 20: ↑13 и ↓7 +6
Просмотры 14K
Комментарии 15
Комментарии Комментарии 15

Работа

Data Scientist
121 вакансия
Python разработчик
137 вакансий