这个是gitbub上的一个开源的python小项目,获取气象卫星拍下的实时的地球图片,作为电脑壁纸。
在太空,有一颗日本人发射的气象卫星——向日葵8号,我们的地球图片就来自她的镜头
基本思路是这样,弄清楚她提供的接口,然后转换一下时间,把图片下载下来,然后保存本地,修改为壁纸,大功告成
接口返回的图片是一块一块的感觉,每个块550 * 550像素,你可以请求4个块,每个块550 * 550,那么就会得到一个1100 * 1100分辨率的图片,同样,你可以请求16个块,就可以得到一个2200 * 2200分辨率的地球图片
代码如下
#coding=utf-8
import time
import sys
import json
import requests
from PIL import Image
from io import BytesIO
from datetime import datetime
from dateutil import tz
import win32api, win32con, win32gui
import os#这是图片的接口
conf = {
'last_refresh_url': 'http://himawari8-dl.nict.go.jp/himawari8/img/D531106/latest.json',
'img_url_pattern': 'http://himawari8-dl.nict.go.jp/himawari8/img/D531106/%id/550/%s_%i_%i.png',
'scale': 1,
}def get_last_time():r = requests.get(conf['last_refresh_url'])# print('r.text',r.text)resp = json.loads(r.text)# resp = r.text# print('resp type',type(resp),resp)last_refresh_time = datetime.strptime(resp['date'], '%Y-%m-%d %H:%M:%S')return last_refresh_time# 转换时间
def utf2local(utc):from_zone = tz.tzutc()to_zone = tz.tzlocal()utc = utc.replace(tzinfo=from_zone)return utc.astimezone(to_zone)def download(args):scale = args['scale']fpath = ''png = Image.new('RGB', (550 * scale, 550 * scale))#还记得我前面说下载图片是一块一块嘛,把大图片分成行列分别下载for row in range(scale):for col in range(scale):strtime = args['time'].strftime("%Y/%m/%d/%H%M%S")url = conf['img_url_pattern'] % (args['scale'], strtime, row, col)print('url',url)r = requests.get(url)tile = Image.open(BytesIO(r.content))png.paste(tile, (550 * row, 550 * col, 550 * (row + 1), 550 * (col + 1)))if 'fout' in args:fpath = args['fout']else:fpath = "%s.bmp" % utf2local(args['time']).strftime("%Y/-%m/-%d/ %H.%M.%S").replace('/', '')png.save(fpath, "BMP")print('下载完成, 保存图片为 %s' % fpath)print('fpath',fpath)setWallPaper(fpath)#我默认scale=4了,这样的图片是2200*2200分辨率,现在大家的电脑普遍都1920*1080了吧
def get_last_image(fout=None, scale=4):last_refresh_time = get_last_time()args = {'time': last_refresh_time}args['scale'] = scaleif fout is not None:args['fout'] = foutdownload(args)pass#setWallpaperFromBMP 和 setWallPaper用于修改电脑壁纸
def setWallpaperFromBMP(imagepath):k = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER,"Control Panel\\Desktop",0,win32con.KEY_SET_VALUE)win32api.RegSetValueEx(k, "WallpaperStyle", 0, win32con.REG_SZ, "6") #2拉伸,0居中,6适应win32api.RegSetValueEx(k, "TileWallpaper", 0, win32con.REG_SZ, "0")win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER,imagepath, 1+2)def setWallPaper(imagePath):current_file_path = os.path.dirname(os.path.abspath(__file__))print(current_file_path)bmpImage = Image.open(imagePath)newPath = current_file_path + '\\nowimage.bmp'bmpImage.save(newPath, "BMP")setWallpaperFromBMP(newPath)def run(inc):while True:print('下载中......' )if len(sys.argv) == 1:get_last_image()elif len(sys.argv) == 2:get_last_image(fout=sys.argv[1])elif len(sys.argv) == 3:get_last_image(fout=sys.argv[1], scale=int(sys.argv[2]))print('over')time.sleep(inc)if __name__ == '__main__':#你可以传入参数#第一个参数是图片的保存位置#第二个参数影响图片分辨率,1->550*550 2->1100*1100 4->2200*2200run(600)#10分钟执行一次
地球就在那里没日没夜的运动(静止)宇宙如此深邃,黑暗,迷。什么才是我们存在的意义?