1.0版本

一、获取壁纸路径

使用request对必应壁纸的api进行访问,获取图片路径,并下载到本地,api地址的说明参考:starsion大佬的文章
顺便做了个封装,代码如下所示:
其中:
1、download_path是图片的存放地址,建议是全英文路径,因为后面用会到opencv做一个文字显示
2、days:是api里面所提到的请求图片返回日期,可填-1、0、1
3、number:返回的图片数,最大的是8,代码里面做了简单的判断
4、headers:我在pycharm里面用fake_useragent是可以的,但不知道为啥在bat文件运行就不行了,所以为了稳定性我直接用了浏览器给的,详细的查看可以看这个链接百度百科,直接修改xxx的内容就可以了

# 根据必应的api来下载图片
def get_pic_from_url(download_path,days=0,number=8):# api参考链接:https://blog.csdn.net/m0_37682004/article/details/82314055# 官方的api# format : 返回数据格式# days:请求图片截止日期,0为当天# number:返回图片数,1—8url = f'https://cn.bing.com/HPImageArchive.aspx?format=js&idx={days}&n={number}&mkt=zh-CN'if (number > 8):print("获取图片数量太多,应该在1~8之间")return 0# ua = UserAgent()# headers = {'User-Agent': ua.edge}headers = 'xxx'r = requests.get(url, headers=headers)  # 通过reques请求网页信息if (number == 1):text = json.loads(r.text)pic_url = text['images'][0]['url']link = 'https://cn.bing.com' + pic_urlname = text['images'][0]['copyright'].split(' ')[0]#     下载图片html = requests.get(link)print(f'{download_path}/{name}.jpg')with open(f'{download_path}/1.jpg', 'wb') as f:    # 将获取链接保存至本地f.write(html.content)f.close()else:text = json.loads(r.text)for i in range(number):pic_url = text['images'][i]['url']link = 'https://cn.bing.com' + pic_urlname = text['images'][i]['copyright'].split(' ')[0]        # 因为opencv不支持中文,所以没有用原本的文字,可以考虑更改url里面的地区设置(mkt=zh-CN)来获取原来的英文名#     下载图片html = requests.get(link)print(f'{download_path}/{name}.jpg')with open(f'{download_path}/{i}.jpg', 'wb') as f:  # 将获取链接保存至本地f.write(html.content)f.close()time.sleep(2)                        # 好像下载太快会有限制,所以就加了个延时2秒,当然可以用线程池?

二、根据文件夹内已有的图片修改日期来判断是否需要覆盖原有图片

基本原理就是用图片的时间跟当天的时间进行比较,如果是当天则跳过下载,否则就下载图片;
在这里用了个取巧的方法,也就是我先放了一张“1.jpg”的图片进去【主要是比较懒。。。】
当然可以再写几行代码判断文件夹里面是否有图片,如果没有图片就下载壁纸。
为了增加随机性,写了一个随机选取文件夹内的图片函数get_last_pic()
代码如下

 pic_path = r'C:\Users\Administrator\Pictures\paperwall'      # 图片存放地址# 根据图片创建时间来确定是否需要爬取图片pic_time = os.path.getmtime(os.path.join(pic_path,'1.jpg'))date = datetime.datetime.fromtimestamp(pic_time)# 时间判断if (date.strftime('%Y-%m-%d') == datetime.datetime.now().strftime("%Y-%m-%d")):passelse:get_pic_from_url(pic_path)          # 获取当天图片信息pic = get_last_pic(pic_path)        # 随机选择一张图片
# 根据壁纸库来排序壁纸时间
def get_last_pic(path):lists = os.listdir(path)            # 获取指定路径目录下的所有信息number = random.randint(1,len(lists)) - 1return lists[number]

三、基于datetime来计算当前日期与目标日期的时间间隔

这个就是单纯的时间计算了,可惜的是好像没有现成的第三方库来判断节假日,如果有了解的话可以评论区说一下

# main里面的调用
timedown = get_countdown_number('2021-12-31')
picture = add_countdown_number(timedown, os.path.join(pic_path,pic))
# 函数定义
def get_countdown_number(endtime):# 获取时间nowtime = datetime.datetime.today()                   # 当前时间endtime = datetime.datetime.strptime(endtime, "%Y-%m-%d")       # 截止时间deltatime = endtime - nowtimeprint(deltatime.days)return deltatime.days# 根据壁纸库来候选壁纸
def add_countdown_number(countdown,path):pic = cv2.imread(path)# pic = cv2.resize()pic = cv2.putText(pic,f'To ddl :{countdown}days',(300,300),cv2.FONT_HERSHEY_SIMPLEX,5,(255,255,255),2)return pic# (300,300)是文字放置文字,5是文字大小,2是线宽,(255,255,255)是文字颜色

四、保存图片+设置桌面

原理:opencv生成一张带有倒计时的图片,并且用修改注册表的方式进行桌面设置
参照大佬的代码进行了一些修改使用Python做一个切换电脑桌面壁纸的小程序

# 通过修改注册表的方式来修改桌面壁纸
def Windows_set_wall_paper(path):# 打开注册表key = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER, "Control panel\\Desktop", 0, win32con.KEY_SET_VALUE)# 函数定义:# RegOpenKey(key, subkey, reserved, sam)# RegOpenKeyEx(key, subkey, reserved, sam)# 两个函数的参数一样。参数含义如下:# Key:Windows注册表基本项。# HKEY_CLASSES_ROOT       是HKEY_LOCAL_MACHINE\Software的子项,保存打开文件所对应的应用程序信息# HKEY_CURRENT_USER       是HKEY_USERS的子项,保存当前用户的配置信息# HKEY_LOCAL_MACHINE      保存计算机的配置信息,针对所有用户# HKEY_USERS              保存计算机上的所有以活动方式加载的用户配置文件# HKEY_CURRENT_CONFIG     保存计算机的硬件配置文件信息# SubKey:要打开的子项。# Reserved:必须为0。# Sam:对打开的子项进行的操作,包括win32con.KEY_ALL_ACCESS、win32con.KEY_READ、win32con.KEY_WRITE等# 往注册表中写入属性值win32api.RegSetValueEx(key,  "wapaperStyle", 0, win32con.REG_SZ, "2")  # 经过多次调试,发现参数“2”和“0”这样搭配效果最好win32api.RegSetValueEx(key, "Tilewallpaper", 0, win32con.REG_SZ, "0")#     RegSetValueEx(key,valueName,reserved,type,value) 要修改或重新设置注册表某一项的项值。如果项值存在,则修改该项值,如果不存在,则添加该项值。# 对于RegSetValueEx,其参数含义如下:# Key:要设置的项的句柄。# valueName:要设置的项值名称。# Reserved:保留,可以设为0。# Type:项值的类型。# Value:所要设置的值。#     RegSetValue(key,subKey,type,value) 设置项的默认值#     对于RegSetValue,其参数含义如下:#     Key:已经打开的项的句柄。#     subKey:所要设置的子项。#     Type:项值的类型,必须为win32con.REG_SZ。#     Value:项值数据,为字符串。# 刷新桌面win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER, path, win32con.SPIF_SENDWININICHANGE)

五、写了个bat文件用来一键修改壁纸

因为我的路径是包含中文的,因此需要进去txt里面修改一下编码格式

大概就这样了,如果有啥错误还请各位大佬批评指正,如果有啥疑问欢迎提问【如果我还记得的话】
文件链接:https://download.csdn.net/download/weixin_43943199/72306544


2.0版本

增加

1、路径下无图片下的判定
2、随机在图库中选择一张图片

    if len(pic_names) == 0:      # 如果文件夹内没有内容get_pic_from_url(pic_path,days=-1,number=4)          # 则直接获取当天图片获取当天图片信息else:                                   # 文件夹内包含图片# 根据文件时间判断是否需要在线下载图片pic_names.sort(key=lambda fn: os.path.getmtime(pic_path + '\\' + fn))           # 按时间排序pic_time = os.path.getmtime(os.path.join(pic_path, pic_names[-1]))              # 获取时间最新的一张date = datetime.datetime.fromtimestamp(pic_time)            # 获取文件修改时间if (date.strftime('%Y-%m-%d') == datetime.datetime.now().strftime("%Y-%m-%d")):     # 如果图片时间跟今天的时间相同pass                                                                            # 什么都不执行else:get_pic_from_url(pic_path)                                                      # 获取当天图片信息

【python】必应api获取壁纸信息+修改桌面+倒计时显示相关推荐

  1. python图片修改过、有原图、怎么得到改动的地方_微信发照片原图会泄露行踪?手把手教会你如何用 Python 通过图片获取用户信息!...

    原标题:微信发照片原图会泄露行踪?手把手教会你如何用 Python 通过图片获取用户信息! 前言 有媒体曝出,微信发原图或存在泄露位置信息的风险. 对此,腾讯微信团队微博 12 月 1 日发布声明称, ...

  2. Python通过GeoIP获取IP信息(国家、城市、经纬度等)

    IP地址信息是非常重要的情报信息,通过IP可以定位到该IP所在的国家.城市.经纬度等. 获取IP信息的方式有很多,很多服务商都提供了相应的地址库或API接口服务. 如国内的ipip.net,国外的ip ...

  3. 微信小程序使用百度api获取天气信息 —— 微信小程序教程系列(16)

    之前已经介绍过,如何使用百度地图api来获取地理位置信息 微信小程序的百度地图获取地理位置 -- 微信小程序教程系列(15) 下面介绍使用百度api来获取天气信息. 1> 第一步:先到百度开放平 ...

  4. python,ffprobe获取视频信息

    背景 需要获取视频基础信息,如果分辨率.大小.播放时长等,研究发现ffprobe工具已经提供了非常全面的视频信息,用ffprobe分析视频很简单,且看我是怎么在python码中调用ffprobe来提取 ...

  5. android调用在线天气服务,android通过google api获取天气信息示例

    android通过google API获取天气信息 复制代码 代码如下: public class WeatherActivity extends Activity { private TextVie ...

  6. 小程序通过API获取位置信息 微信API 百度地图API

    博客简介 本篇博客介绍如何调用微信API获取经纬度,如何调用百度地图API获取实物位置 微信API获取经纬度信息 百度地图API获取实物位置 微信小程序获取经纬度 微信提供了获取当前设备经纬度的API ...

  7. android自动获取天气,android通过google api获取天气信息示例

    android通过google API获取天气信息 public class WeatherActivity extends Activity { private TextView txCity; p ...

  8. Android开发:基于原生API获取位置信息、卫星信号个数及参与定位的卫星个数

    目录 概述 权限申请及开启GPS 调用原生API进行定位 获取设备收到的卫星信号个数 获取用于定位的卫星信号个数 成果图 概述 最近在做室内外无缝定位的相关demo,室外定位中,GNSS定位方法具有精 ...

  9. C# 通过豆瓣网络编程API获取图书信息

    这篇文章主要是关于如何通过豆瓣API获取信息的书籍,起初,我看到了原来的想法的内容是"C# 网络编程之网页简单下载实现"中通过HttpWebResponse类下载源代码,再通过正則 ...

最新文章

  1. 每天一个linux命令(41):ps命令
  2. TL-410小路由静态路由问题
  3. 在网页中显示数字时钟
  4. svn: Can't convert string from 'UTF-8' to native encoding
  5. DQN笔记:MC TD
  6. linux安装系统配置环境变量,Linux系统安装jdk及配置环境变量的方法
  7. 【BZOJ 2753】 2753: [SCOI2012]滑雪与时间胶囊 (分层最小树形图,MST)
  8. SQL对Xml字段的操作
  9. 在Sharepoint 2010中使用ReportViewer控件展示RDLC报表
  10. 高性能web系统的架构和系统优化
  11. No module named ‘pyqt5‘解决办法
  12. ABP框架使用打印日志
  13. 利用python实现端口扫描
  14. 数据分析及数据挖掘学习路线
  15. html整体居中文字,html文字居中 html图片居中代码
  16. Android修炼之道—自定义控件 (300喵喵币)
  17. Java实现QQ、微信等自动无限发送消息(炸屏)
  18. Keil工程窗口各项图标描述
  19. 自己动手搭建搜索工具
  20. 使用响应扩展的响应面(Rx)

热门文章

  1. [LeetCode ] 八皇后问题以及回溯法
  2. 实现一个简单的图片轮播效果
  3. android edittext底线,android – 更改edittext的底线颜色
  4. php怎么自动识别车牌号,如何在Windows中使用Open ALPR(自动车牌识别)从图像中识别车辆牌照...
  5. 如何在浏览器中打开jupyter notebook
  6. kafka connector使用(单机手动启动版)
  7. 中文名字和英文名字正则匹配
  8. UWP 制作汉堡菜单及添加滑动手势
  9. Ubuntu16.04 笔记本合上盖子时不进入休眠
  10. ln(1+x)和ln(1-x)的麦克劳林级数