【python】必应api获取壁纸信息+修改桌面+倒计时显示
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获取壁纸信息+修改桌面+倒计时显示相关推荐
- python图片修改过、有原图、怎么得到改动的地方_微信发照片原图会泄露行踪?手把手教会你如何用 Python 通过图片获取用户信息!...
原标题:微信发照片原图会泄露行踪?手把手教会你如何用 Python 通过图片获取用户信息! 前言 有媒体曝出,微信发原图或存在泄露位置信息的风险. 对此,腾讯微信团队微博 12 月 1 日发布声明称, ...
- Python通过GeoIP获取IP信息(国家、城市、经纬度等)
IP地址信息是非常重要的情报信息,通过IP可以定位到该IP所在的国家.城市.经纬度等. 获取IP信息的方式有很多,很多服务商都提供了相应的地址库或API接口服务. 如国内的ipip.net,国外的ip ...
- 微信小程序使用百度api获取天气信息 —— 微信小程序教程系列(16)
之前已经介绍过,如何使用百度地图api来获取地理位置信息 微信小程序的百度地图获取地理位置 -- 微信小程序教程系列(15) 下面介绍使用百度api来获取天气信息. 1> 第一步:先到百度开放平 ...
- python,ffprobe获取视频信息
背景 需要获取视频基础信息,如果分辨率.大小.播放时长等,研究发现ffprobe工具已经提供了非常全面的视频信息,用ffprobe分析视频很简单,且看我是怎么在python码中调用ffprobe来提取 ...
- android调用在线天气服务,android通过google api获取天气信息示例
android通过google API获取天气信息 复制代码 代码如下: public class WeatherActivity extends Activity { private TextVie ...
- 小程序通过API获取位置信息 微信API 百度地图API
博客简介 本篇博客介绍如何调用微信API获取经纬度,如何调用百度地图API获取实物位置 微信API获取经纬度信息 百度地图API获取实物位置 微信小程序获取经纬度 微信提供了获取当前设备经纬度的API ...
- android自动获取天气,android通过google api获取天气信息示例
android通过google API获取天气信息 public class WeatherActivity extends Activity { private TextView txCity; p ...
- Android开发:基于原生API获取位置信息、卫星信号个数及参与定位的卫星个数
目录 概述 权限申请及开启GPS 调用原生API进行定位 获取设备收到的卫星信号个数 获取用于定位的卫星信号个数 成果图 概述 最近在做室内外无缝定位的相关demo,室外定位中,GNSS定位方法具有精 ...
- C# 通过豆瓣网络编程API获取图书信息
这篇文章主要是关于如何通过豆瓣API获取信息的书籍,起初,我看到了原来的想法的内容是"C# 网络编程之网页简单下载实现"中通过HttpWebResponse类下载源代码,再通过正則 ...
最新文章
- 每天一个linux命令(41):ps命令
- TL-410小路由静态路由问题
- 在网页中显示数字时钟
- svn: Can't convert string from 'UTF-8' to native encoding
- DQN笔记:MC TD
- linux安装系统配置环境变量,Linux系统安装jdk及配置环境变量的方法
- 【BZOJ 2753】 2753: [SCOI2012]滑雪与时间胶囊 (分层最小树形图,MST)
- SQL对Xml字段的操作
- 在Sharepoint 2010中使用ReportViewer控件展示RDLC报表
- 高性能web系统的架构和系统优化
- No module named ‘pyqt5‘解决办法
- ABP框架使用打印日志
- 利用python实现端口扫描
- 数据分析及数据挖掘学习路线
- html整体居中文字,html文字居中 html图片居中代码
- Android修炼之道—自定义控件 (300喵喵币)
- Java实现QQ、微信等自动无限发送消息(炸屏)
- Keil工程窗口各项图标描述
- 自己动手搭建搜索工具
- 使用响应扩展的响应面(Rx)
热门文章
- [LeetCode ] 八皇后问题以及回溯法
- 实现一个简单的图片轮播效果
- android edittext底线,android – 更改edittext的底线颜色
- php怎么自动识别车牌号,如何在Windows中使用Open ALPR(自动车牌识别)从图像中识别车辆牌照...
- 如何在浏览器中打开jupyter notebook
- kafka connector使用(单机手动启动版)
- 中文名字和英文名字正则匹配
- UWP 制作汉堡菜单及添加滑动手势
- Ubuntu16.04 笔记本合上盖子时不进入休眠
- ln(1+x)和ln(1-x)的麦克劳林级数