墙纸更换器无法正常工作

时间:2012-05-05 19:36:45

标签: python windows urllib2 ctypes wallpaper

我是Python的新手,当我制作一个可以将我的背景更改为每日国家地理图片的程序时,我遇到了一个问题。它可以很好地获取jpeg的路径,但是当我使用命令更改桌面背景(对于Windows)时,它只是将背景更改为纯黑色。代码本身并没有抛出任何错误,它只是没有工作我伤口如何想要它。这是代码。

import urllib2
import ctypes

SPI_SETDESKWALLPAPER = 20
url = urllib2.urlopen("http://photography.nationalgeographic.com/photography/photo-of-the-day/")
code = url.readlines()
pos = code[1303].split("\"",2)
imgurl = pos[1]
print imgurl
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, imgurl , 0)

2 个答案:

答案 0 :(得分:2)

您似乎将URL传递给set wallpaper命令,而不是图像的路径。首先获取图像。试试吧。

import urllib2
import ctypes

SPI_SETDESKWALLPAPER = 20
url = urllib2.urlopen("http://photography.nationalgeographic.com/photography/photo-of-the-day/")
code = url.readlines()
pos = code[1303].split("\"",2)
imgurl = pos[1]

print imgurl
# Changes after here
url2 = urllib2.urlopen(imgurl)
out = open("wallpaper.jpg", "wb")
out.write(url2.read())
out.close()
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, "wallpaper.jpg" , 0)

我实际上没有尝试过(没有在Windows上运行)所以也许它可以解决问题而且可能没有!

PS是解析网址的非常脆弱的代码,但是让它运行起来的荣誉!

答案 1 :(得分:0)

用于解析网址的代码确实非常脆弱。你最好使用正则表达式。此正则表达式搜索包含图像的唯一div,然后删除除url之外的所有内容 此外,使用with打开文件会更好,因为它会自动关闭文件 改进的代码将是:

import urllib2
import ctypes
import re

SPI_SETDESKWALLPAPER = 20
url = urllib2.urlopen("http://photography.nationalgeographic.com/photography/photo-of-the-day/")
code = url.read()
imgurl = re.sub(r'(.|\n)+?<div class="primary_photo">(.|\n)+?<img src="(.+?)"(.|\n)+', r'\3', code)

print imgurl
url2 = urllib2.urlopen(imgurl)
with open("wallpaper.jpg", "wb") as f:
    f.write(url2.read())
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, "wallpaper.jpg" , 0)