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


发新话题
打印

[其他] 中年入门程序员作品,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

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



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

看16楼罢

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

TOP

好吧,全部写完了...... 这年头还是得靠自己啊...  有需要的拿去,明天继续研究如何让这个py自动定时运行

Mac下,在图片目录里面建立一个 DeskFeed 的目录,把代码保存为“随便什么名字.py” 然后终端里面运行 python 随便什么名字.py
理论上马上壁纸就会更换了
复制内容到剪贴板
代码:
#!/usr/bin/env python
import os
import md5
import pprint
import sys
import subprocess
import urllib2
import re
from time import strftime
from urllib import URLopener
from urllib2 import urlopen
from xml.dom.minidom import parseString

dst_dir = os.path.expanduser('~/Pictures/DeskFeed/')

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 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;
        destination = "%s%s.jpg" % (dst_dir, strftime( "%y-%m-%d"));
        URLopener().retrieve(newurl, destination)
        set_desktop_background(destination)

if __name__=="__main__":
    main();

TOP

posted by wap, platform: Firefox

图片目录下面建立 DeskFeed目录了么

TOP

昨晚把开机运行的也搞定了..   
在应用程序里打开Automator,建立应用程序


然后在左边选择实用工具,再选择运行Shell工具,其他设置如图
我这里的情况是假设16楼的script保存为bing.py,存放在 ~/Pictures/bing.py,注意路径必须是绝对路径,不能用~/,而必须用/Users/你的用户名/


Automator保存为一个应用文件,随便放哪里都可以,我是放应用程序里面了
在系统偏好设置(齿轮)里打开用户与群组,选择对应你的用户名,点击右边上方的登录项,把之前用Automator建立的应用程序添加到启动项目,下次开机就自动执行了,壁纸每日开机一换,今天开机直接就换成海云台夜景了
附件: 您所在的用户组无法下载或查看附件

TOP

posted by wap, platform: XBOX

runnning你是不是复制的代码有误啊  第一行就出错了...  难道你是粘贴到了mac的文本编辑里面去了?  如果是这样,请在保存前按 SHIFT+COMMAND+T,变成纯文本再保存,否则直接保存是RTF格式的富文本。

TOP

posted by wap, platform: XBOX

收附件
附件: 您所在的用户组无法下载或查看附件
本帖最近评分记录
  • Running82 激骚 +4 感谢分享 2013-9-26 21:10

TOP

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