如何自动从网站获取图像并更新桌面图像以匹配(在终端中)?


2

我是一名天文学家,我经常(阅读:每天几次)查看同一个网站,查看天文台的晴空图表。具体来说,在此网页上找到的图表:

http://www.cleardarksky.com/c/YerkesObILkey.html

如果我能够将此图像自动设置为笔记本电脑的桌面,那将非常方便。我知道我可以每天早上手动设置它,但这很麻烦(而且不那么讨厌)。

不幸的是,我不像我应该那样精通C语言和命令行。有没有办法改变我的bash配置文件,以自动从网站下载图像,然后将该图像设置为我的桌面,比如说,每隔两天午夜?除了明显的图像分辨率和互联网连接问题。像这样的任务完全超出了我的技能。

即使这不可能/不实用,我也有兴趣知道为什么不这样做,只是好奇心问题。

如果重要的话,我在MacBook Pro上运行10.13.1 High Sierra。


不是您的问题的直接答案,但使用此:support.apple.com/kb/PH25525?locale=en_US&viewlocale=en_US并在仪表板上创建图像的Web剪辑可能也会有所帮助。
Lizzan

Answers:


0

您有几个选项可以解决这个问题:AppleScript和Bash(终端)脚本。由于这需要每天发生一次(意味着已安排),并且您希望保证在您登录的那一刻下载文件,以便在您开始时可以在那里,然后每晚在午夜再次,我会这样做在巴什

创建脚本

该脚本将做两件事:

  • 下载图片
  • 设置为背景图像

脚本非常简单。它需要两个参数 - URL和保存文件的位置。然后它会将其下载到该文件夹​​位置:

#!/bin/bash
#Bash Script to Download Forecast and Set as desktop background

#User Defined VARs below:

#URL to fetch image 
url="http://www.cleardarksky.com/c/YerkesObILcsk.gif?c=2239204"

#Picture file Location
picFile="/Users/Thomas/Pictures/test.gif"


#Command to retrieve picture and save to defined location
curl -o "${picFile}" "$url"

exit

将它保存在方便的位置; 给它一个明显的名字就像getSkyForecast.sh。确保使脚本可执行 - chmod +x getSkyForecast.sh 如果不这样做,脚本将不会运行。

安排脚本

以下内容有点复杂,因为它将在登录时运行,每24小时运行一次。

接下来,需要启动脚本launchd。为此,您需要一个plist(描述作业的XML文件)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.user.getSkyForecast</string>
  <key>ProgramArguments</key>
  <array>
      <string>/Users/USERNAME/Path_to_Scripts/getSkyForecast.sh</string>
  <key>RunAtLoad</key> 
  <true/>
  </array>
  <key>StartCalendarInterval</key>
  <array>
  <dict>
    <key>Hour</key>
    <integer>00</integer>
    <key>Minute</key>
    <integer>00</integer>
  </dict>
</dict>
</plist>

将此文件另存为com.user.SkyForecast并将其复制到~/Library/LaunchAgents目录中。

使用以下命令加载它:

launchctl load com.user.SkyForecast

设置背景图像

最简单的方法是进入系统偏好设置并将背景图像设置为此文件(首先手动运行脚本以创建文件)。脚本运行时,它将更改文件,而不是名称,因此桌面图像将自动更改。


只是我的编程风格。
艾伦

你声明“脚本将要做两件事:”第一件事是“下载图片”,但第二件事是“设置为背景图片”,脚本中没有以编程方式执行此操作的代码。也就是说,你确实在“设置背景图像”之后添加了一个段落,其中你说“...当脚本运行时,它将更改文件,而不是名称,因此桌面图像将自动更改。”,以及你真的测试过吗?在我的测试中,文件被覆盖时不会改变显示的实际背景,因为原始图像被缓存。
user3439894

您需要对其进行编码,以便在下载文件后实际以编程方式设置或一次覆盖,使用killall Dock将强制刷新。我的偏好是以编程方式设置它而不是使用它killall Dock
user3439894

感谢你们俩!我最终选择了Allan建议的内容,但为了解决user3439894提到的问题,我只是添加了一行来以编程方式将桌面设置为登录到plist的所需文件,现在它一尘不染!(我会测试它几天,但它似乎应该工作)
Thomas Sachen

@Thomas Sachen,您会发现如果您使用为url数据定义的代码总是会过时,因为网站上的URL会发生变化,那么之后的部分就会发生变化?。您可能只能使用url='http://www.cleardarksky.com/c/YerkesObILcsk.gif',但如果这不起作用,则以下将检索实际的URL: url="http://www.cleardarksky.com$(curl -s http://www.cleardarksky.com/c/YerkesObILkey.html | awk 'match($0,/ src=".*YerkesObILcsk.gif.*" /) {print substr($0,RSTART+6,RLENGTH-8)}')"
user3439894
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.