» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


 46 1234
发新话题
打印

[其他] 中年入门程序员作品,Mac下自动下载Bing每日墙纸的Python script,16楼

复制内容到剪贴板
代码:
#!/usr/bin/env python
import os
import md5
import pprint
import sys
import subprocess
from time import strftime
from urllib import URLopener
from urllib2 import urlopen
from xml.dom.minidom import parseString

# Defines source and destination of image
rss_feed = 'http://feeds.feedburner.com/bingimages';
dst_dir = os.path.expanduser('~/Pictures/DeskFeed/')

# Originally found on: http://hints.macworld.com/article.php?story=20110721062846337
# Applescript modified for dual monitors by: ViVIDboarder
SCRIPT = """/usr/bin/osascript<<end
tell application "System Events"
        set picture of every desktop to POSIX file "%s"
end tell
END"""

def set_desktop_background(destination):
  subprocess.Popen(SCRIPT%destination, shell=True)

def parseFeed(rss):
  destination = "%s%s.jpg" % (dst_dir, strftime( "%y-%m-%d")
  if os.path.exists(destination):
    sys.exit(0)

  try:
    rss_contents = urlopen( rss )
  except:
    print "Failed to read rss feed %s" % rss
    return
  rss_src = rss_contents.read()
  rss_contents.close()
  dom = parseString( rss_src )
  firstitem = dom.getElementsByTagName('item')[0]
  link = firstitem.getElementsByTagName( 'enclosure' )[0].getAttribute('url')
  URLopener().retrieve(link, destination)
  set_desktop_background(destination)

def main():
  parseFeed(rss_feed)

if __name__ == "__main__":
  main()
</end



源代码奉上

这个是用来自动获取每日bing壁纸,并且应用到Mac壁纸的一段python

使用起来有两个不方便
1. feedsburner被墙了,运行不畅
2. 即使想办法获取到了feed,得到实际图片也是 http://www.istartedsomething.com/bingimages/ 这里的,分辨率最高只有1366x768


经过我的试验,发现可以从bing首页入手,修改文件名获取高分辨率墙纸

例如打开今日的bing首页,html源码中可以找到
复制内容到剪贴板
代码:
background-image:url(http://s.cn.bing.net/az/hprichbg/rb/AustriaAutumn_ZH-CN11875113209_1366x768.jpg)
可截取出今日壁纸的有效地址
复制内容到剪贴板
代码:
http://s.cn.bing.net/az/hprichbg/rb/AustriaAutumn_ZH-CN11875113209_1366x768.jpg
然后将后面的 1366x768 改为 1920x1080  即改为
复制内容到剪贴板
代码:
http://s.cn.bing.net/az/hprichbg/rb/AustriaAutumn_ZH-CN11875113209_1920x1080.jpg
即可下载到本日Bing壁纸的高清版本

请移除原代码中关于feed获取的部分,添加刚才上述的从bing首页获取文件地址,改文件名下载的部分

为感谢连续一周奉上全部祭扫

[ 本帖最后由 eva3d 于 2013-9-25 17:16 编辑 ]


本帖最近评分记录
  • Crusher 激骚 +1 最骚 Rated by wap 2013-9-26 08:54
  • ooo 激骚 +1 最骚 Rated by wap 2013-9-25 22:44

TOP

猫熊爹你不觉得你太高端了么



TOP

posted by wap, platform: XBOX
引用:
原帖由 @蚁力神  于 2013-9-25 14:04 发表
猫熊爹你不觉得你太高端了么
喵的,现在只会写文案和画PPT的屌丝看见各种代码就尿了...


TOP

关键是没几个人现在用 Mac 并装了python呀。

TOP

引用:
原帖由 ffcactus 于 2013-9-25 14:33 发表
关键是没几个人现在用 Mac 并装了python呀。
我装了,主要是搭梯子用

TOP

虽然明知ff是吃了药....不过我还是说下osx自带了python....而且10.9也把版本跟进到2.7.5了....10.8好像还是2.7

TOP

posted by wap, platform: Chrome

你的思路没问题,但是截取的办法有问题,bing首页的背景是用异步载入的,你直接读bing首页源代码是没有背景图片字段的。

TOP

posted by wap, platform: iPhone
引用:
原帖由 @zztg  于 2013-9-25 14:40 发表
虽然明知ff是吃了药....不过我还是说下osx自带了python....而且10.9也把版本跟进到2.7.5了....10.8好像还是2.7
我又没有mac,我怎么知道带不带,你们全家吃了药还差不多,用苹果的神经病果然比较多。

TOP

自力更生ing,翻了几个教程,已经成功替换出正确的url来了
复制内容到剪贴板
代码:
#---------------------------------import---------------------------------------
import urllib2;
import re;

#------------------------------------------------------------------------------
def main():
    userMainUrl = "http://cn.bing.com";
    req = urllib2.Request(userMainUrl);
    resp = urllib2.urlopen(req);
    respHtml = resp.read();
    WallPaper = re.search("g_img={url:'(?P<wpurl>.+?)'", respHtml);
    print "WallPaper=",WallPaper;
    if(WallPaper):
        wpurl = WallPaper.group("wpurl");
        print "wpurl=",wpurl;
        newurl = wpurl.replace('1366x768','1920x1080');
        print "newurl=",newurl;

###############################################################################
if __name__=="__main__":
    main();
运行结果
复制内容到剪贴板
代码:
python test.py
WallPaper= <_sre.SRE_Match object at 0x106502468>
wpurl= http://s.cn.bing.net/az/hprichbg/rb/AustriaAutumn_ZH-CN11875113209_1366x768.jpg
newurl= http://s.cn.bing.net/az/hprichbg/rb/AustriaAutumn_ZH-CN11875113209_1920x1080.jpg

TOP

posted by wap, platform: Chrome

#!/usr/bin/env python
import os
import pprint
import sys
import subprocess
import urllib2
from time import strftime
from urllib import URLopener
from urllib2 import urlopen
from xml.dom.minidom import parseString

# Defines source and destination of image
#rss_feed = 'http://feeds.feedburner.com/bingimages';
url = 'http://www.bing.com'
size = '1920x1080'
dst_dir = os.path.expanduser('~/Pictures/DeskFeed/')

# Originally found on: http://hints.macworld.com/article.php?story=20110721062846337
# Applescript modified for dual monitors by: ViVIDboarder
SCRIPT = """/usr/bin/osascript<<end
tell application "System Events"
set picture of every desktop to POSIX file "%s"
end tell
END"""

def set_desktop_background(destination):
        subprocess.Popen(SCRIPT%destination, shell=True)

def parseFeed(url):
        destination = "%s%s.jpg" % (dst_dir, strftime( "%y-%m-%d")
        if os.path.exists(destination):
                sys.exit(0)

        req = urllib2.Request(url)
        content = urllib2.urlopen(req).read()
        link = content[content.index('g_img={url:') + len('g_img={url:') + 1 : len(content)]
        link = link[0 : link.index(',id:') - 1]
        links =  link.split('_')
        link = links[0] + '_' + links[1] + '_' + size + '.jpg'
        print link
        URLopener().retrieve(link, destination)
        set_desktop_background(destination)

def main():
        parseFeed(url)

if __name__ == "__main__":
        main();
本帖最近评分记录
  • eva3d 激骚 +5 感谢分享 2013-9-26 08:56

TOP

引用:
原帖由 ffcactus 于 2013-9-25 06:33 发表
关键是没几个人现在用 Mac 并装了python呀。
引用:
原帖由 ffcactus 于 2013-9-25 07:07 发表
posted by wap, platform: iPhone

我又没有mac,我怎么知道带不带,你们全家吃了药还差不多,用苹果的神经病果然比较多。
张口就来赞

TOP

没 LS 那两个优雅,但应该能用:
复制内容到剪贴板
代码:
#!/usr/bin/env python
import os
import md5
import pprint
import sys
import subprocess
from time import strftime
from urllib import URLopener
from urllib2 import urlopen
from xml.dom.minidom import parseString

#get bing wallpaper

# Defines source and destination of image
rss_feed = 'http://cn.bing.com/';
dst_dir = os.path.expanduser('~/Pictures/DeskFeed/')

# Originally found on: http://hints.macworld.com/article.php?story=20110721062846337
# Applescript modified for dual monitors by: ViVIDboarder
SCRIPT = """/usr/bin/osascript<<end
tell application "System Events"
        set picture of every desktop to POSIX file "%s"
end tell
END"""

def set_desktop_background(destination):
  subprocess.Popen(SCRIPT%destination, shell=True)

startString ="g_img={url:'"
def parseFeed(rss):
  destination = "%s%s.jpg" % (dst_dir, strftime( "%y-%m-%d"))
  if os.path.exists(destination):
    sys.exit(0)

  try:
    rss_contents = urlopen( rss )
  except:
    print "Failed to read rss feed %s" % rss
    return
  rss_src = rss_contents.read()
  rss_contents.close()
  print rss_src
  spPos = rss_src.find(startString)
  if spPos == -1:
        return
  startPos = spPos + len(startString)
  endPos = rss_src.find("'",startPos)
  if endPos == -1:
        return
  link = rss_src[startPos:endPos].replace('1366x768','1920x1080')
  URLopener().retrieve(link, destination)
  set_desktop_background(destination)

def main():
  parseFeed(rss_feed)

if __name__ == "__main__":
  main()

TOP

复制内容到剪贴板
代码:
import httplib2
import os.path

h = httplib2.Http('cache')
headers = {'Content-type': 'application/x-www-form-urlencoded'}
url = 'http://www.bing.com/'
response, content = h.request(url, 'GET')

htmlContent = content.decode('utf-8')
imageUrl = htmlContent[htmlContent.find(';g_img'):]
imageUrl = imageUrl[imageUrl.find("'") + 1:]
imageUrl = imageUrl[:imageUrl.find("'")]
imageUrl = imageUrl.replace('1366x768', '1920x1080')

print(imageUrl)
response, content = h.request(imageUrl, 'GET')

imageFile = open(os.path.basename(imageUrl), 'wb')
imageFile.write(content)
imageFile.close()
看了下源代码 好像就一处有 不是'background-image'那里 直接提出来算了
本帖最近评分记录
  • eva3d 激骚 +5 感谢分享 2013-9-26 08:56

TOP

posted by wap, platform: GALAXY S IV

用bing desktop 的是不是该有优越感了?壁纸每日自动更新,还有好几张可以备选

TOP

看16楼罢

[ 本帖最后由 eva3d 于 2013-9-25 17:15 编辑 ]

TOP

 46 1234
发新话题
     
官方公众号及微博